Witam. Mam do napisania prostą grę w Javie. Natrafiłem na pewien problem kiedy chciałem zaimplementować obsługę myszy. Ale najpierw może przedstawię to, co do tej pory udało mi się napisać:
SpaceMission.java:
package spacemission;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GraphicsDevice; // te dwa potzrebne do fullscreena
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferStrategy;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SpaceMission extends Canvas {
private static final int GAMEWIDTH = 800;
private static final int GAMEHEIGHT = 600;
public static final String imagespath = "src" + File.separator + "spacemission" + File.separator + "images" + File.separator;
private String imagepath = imagespath + "player" + File.separator + "czstrzala.gif";
private BufferStrategy bstrategy;
private Sprites sprites = new Sprites();
private void InitSpaceMission() {
JFrame Window = new JFrame("Space Mission v. 0.0001");
JPanel Panel = (JPanel) Window.getContentPane();
setBounds(0, 0, GAMEWIDTH, GAMEHEIGHT);
Panel.setPreferredSize(new Dimension(GAMEWIDTH, GAMEHEIGHT));
Panel.setBackground(new Color(0, 0, 0));
Panel.setLayout(null);
Panel.add(this);
Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Window.setBounds(0, 0, GAMEWIDTH, GAMEHEIGHT);
Window.setResizable(false);
Window.setLocationRelativeTo(null);
Window.setIconImage(new ImageIcon(imagespath +"icon.gif").getImage());
//odkomentować dla fullscreen
//if (!Window.isDisplayable()) Window.setUndecorated(true);
//GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
//gd.setFullScreenWindow(Window);
//if (gd.isFullScreenSupported()) {
Window.setVisible(true);
//}
createBufferStrategy(2);
bstrategy = getBufferStrategy();
requestFocus();
}
private void PaintWorld() {
Menu m = new Menu();
IButton bu = m.PaintMenu();
Graphics g = bstrategy.getDrawGraphics();
g.drawImage(sprites.getSprite(bu.returnImagePath()), 300, 400, this);
bstrategy.show();
/*Graphics g = bstrategy.getDrawGraphics();
g.drawImage(sprites.getSprite(imagepath), 300, 400, this);
g.drawString("SpaceMission v 0.00001", 5, 15);
bstrategy.show();*/
}
public static void main(String[] args) {
SpaceMission NewGame = new SpaceMission();
NewGame.InitSpaceMission();
while (true) {
NewGame.PaintWorld();
try {
Thread.sleep(1000);
} catch (Exception e) {
System.out.println(e);
System.exit(0);
}
}
}
}
IButton.java:
package spacemission;
import java.io.File;
public class IButton {
private int width = 300;
private int height = 100;
private String uppath;
private String downpath;
private boolean isdown;
IButton(String buttonname) {
isdown = false;
uppath = SpaceMission.imagespath + "buttons" + File.separator + "up_" + buttonname;
downpath = SpaceMission.imagespath + "buttons" + File.separator + "down_" + buttonname;
}
IButton(String buttonname, int width, int height) {
this(buttonname);
this.width = width;
this.height = height;
}
public int returnWidth() {
return width;
}
public int returnHeight() {
return height;
}
public boolean returnState() {
return isdown;
}
public void SwitchState() {
if (isdown) isdown = false;
else isdown = true;
}
public String returnImagePath() {
if (isdown) return downpath;
else return uppath;
}
}
Menu.java
package spacemission;
import java.awt.Canvas;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class Menu extends Canvas implements MouseListener, MouseMotionListener {
private IButton button1 = new IButton("exit.jpg");
private int button1x = 30;
private int button1y = 50;
Menu() {
addMouseListener(this);
addMouseMotionListener(this);
}
public IButton PaintMenu() {
return button1;
}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
button1.SwitchState();
System.out.println("saaead");
}
public void mousePressed(MouseEvent e) {
Point p = new Point();
System.out.println("saad");
if ((p.x < button1.returnWidth()+button1x) && (p.y < button1.returnHeight()+button1y) && (p.x > button1x) && (p.y > button1y)) {
button1.SwitchState();
}
}
public void mouseClicked(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {}
}
Mam jeszcze plik Sprites.java, ale on jest sprawdzony wzdłuż i wszerz, zresztą nie tu leży problem. Generalnie chodzi mi o to, że próbuję narysować w okienku wyświetlanym w pliku głównym przycisk (IButton) obsługiwany myszą. Plik Menu odpowiada za przygotowanie do wyświetlenia i obsługę kilku takich przycisków. Jako że zna ona współrzędne każdego przycisku, odpowiadać ma również za mysz. W tym momencie udaje mi się wyświetlić 1 obrazek przycisku, ale nie reaguje on na myszkę (miałby być wyświetlony 2 obrazek i wypisane jakieś bzdury na wyjście ;)). Od razu mówię, że jestem bardzo początkujący w Javie, co zresztą pewnie widać. :)