Jeg har nu siddet og bakset med Java's paint funktioner. Det skal gerne ende ud i et spil, men lige nu er det hele lidt på forsøgs stadiet.
Jeg har lavet en klasse, der først og fremmest tegner en firkant. Det virker fint! Klassen har en knap, og denne knap har en actionlistener, der ændrer i y-værdien for firkanten for derefter at køre repaint() metoden.
Problemet er, at firkanten, samtidig med at den rykker sig, bliver på sin plads - den er først rigtig opdateret når jeg minimerer vinduet, og åbner det igen. Kender i til det problem?
I kan se koden her:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Area
{
private static final int HEIGHT = 500;
private static final int WIDTH = 500;
private static final Dimension size = new Dimension(HEIGHT,WIDTH);
public Graphic game;
public Area () {
// Udseenet sættes fleksibelt
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) { }
final JFrame frame = new JFrame("Dots");
// Hovedramme, spil-ramme og spil
JPanel content = (JPanel)frame.getContentPane();
JPanel game_container = new JPanel();
game = new Graphic(size);
/**
* Hovedramme sættes til default-størrelse
* Der tilføjes farve til "spillepladen" og rammerne
* får alle en kant
*/
content.setPreferredSize(size);
game_container.setPreferredSize(new Dimension(WIDTH,HEIGHT-100));
content.setBorder(new EmptyBorder(6,6,6,6));
game_container.setBorder(new EtchedBorder());
game_container.setBackground(Color.white);
game_container.add(game, BorderLayout.CENTER);
content.add(game_container, BorderLayout.NORTH);
// Menu
JMenuBar menu = new JMenuBar();
JMenu filer = new JMenu("Filer");
JMenu hjælp = new JMenu("Hjælp");
JMenuItem start = new JMenuItem("Start nyt spil");
JMenuItem quit = new JMenuItem("Afslut");
JMenuItem high = new JMenuItem("Highscore");
filer.add(start); filer.add(high); filer.add(quit);
JMenuItem formål = new JMenuItem("Formål");
JMenuItem om = new JMenuItem("Spil_Info");
hjælp.add(formål); hjælp.add(om);
menu.add(filer); menu.add(hjælp);
JButton knap = new JButton("Move");
knap.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
game.moveY();
}
});
content.add(knap, BorderLayout.SOUTH);
frame.setJMenuBar(menu);
frame.pack();
frame.setVisible(true);
}
public class Graphic extends JPanel
{
Dimension size;
public int x;
public int y;
public Graphic(Dimension size) {
setForeground(Color.black);
this.size = size;
x = size.width/2;
y = size.height - 125;
}
public Dimension getPreferredSize() {
return new Dimension(size);
}
public void paintComponent(Graphics g) {
g.fillRect(x,y,5,5);
}
public void moveY() {
y = y - 20;
repaint();
}
}
}
Jeg har valgt at tage hele koden med, da jeg ikke er sikker på hvor problemet er. Håber i kan overleve den relative lange post
Indlæg senest redigeret d. 17.10.2006 00:51 af Bruger #10415