我正在为我的游戏做一个菜单,我制作了MenuState(类)和MouseManager(类,实现了MouseListener和MouseMotionListener),它们在不同的文件夹中是不同的类。这是我的问题,通常人们把他们的按钮作为我的绘制矩形,并添加字体,并使他们的按钮。但我没那么做。我用Photoshop做了一个按钮,我把它放进我的雪碧单子里,裁剪它,然后把它变成我的按钮。现在我想让它,如果我点击我的‘播放’按钮图片,它发送到我的GameState,如果我点击我的‘退出’按钮图片,它关闭我的窗口
package com.vescorspel.game.MyFirstGame.states;
import java.awt.Color;
import java.awt.Graphics;
import com.vescorspel.game.MyFirstGame.Handler;
import com.vescorspel.game.MyFirstGame.gfx.Assets;
public class MenuState extends State{
// Resizing my button from 64 pixels to 256 pixels
public static final int ButtonWidth = 256;
public static final int ButtonHeight = 256;
// coordinates where my buttons are placed in pixels ;)
public static final int PlayButtonX = 500;
public static final int PlayButtonY = 100;
public static final int ExitButtonX = 500;
public static final int ExitButtonY = 400;
public MenuState(Handler handler){
super(handler);
}
// My tick method
@Override
public void tick() {
//This If statement tells my game if I LeftClicked anywhere in the MenuScreen, then it send me to my GameState(GameScreen)
if(handler.getMouseManager().isLeftPressed())
State.setState(handler.getGame().gameState);;
}
//My render where i render the button pictures in my MenuScreen
@Override
public void render(Graphics g) {
//PlayButton from my Assets class(this is an image)
g.drawImage(Assets.PlayButton, PlayButtonX, PlayButtonY, ButtonWidth, ButtonHeight, null );
//ExitButton from my Assets class(this is an image)
g.drawImage(Assets.ExitButton, ExitButtonX, ExitButtonY, ButtonWidth, ButtonHeight, null);
//these 2 commands tells my game to make a red cube and follow my mouse in the MenuScreen
g.setColor(Color.RED);
g.fillRect(handler.getMouseManager().getMouseX(), handler.getMouseManager().getMouseY(), 8, 8);
}
}
package com.vescorspel.game.MyFirstGame.input;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class MouseManager implements MouseListener, MouseMotionListener{
private boolean leftPressed;
private int mouseX, mouseY;
public MouseManager(){
}
//Getters
public boolean isLeftPressed(){
return leftPressed;
}
public int getMouseX(){
return mouseX;
}
public int getMouseY(){
return mouseY;
}
// Implemented methods
@Override
public void mousePressed(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1)
leftPressed = true;
}
@Override
public void mouseReleased(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1)
leftPressed = false;
}
@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
发布于 2016-11-10 08:10:48
您所需要做的就是验证鼠标是否在图像中,如果您想正确地执行此操作,您应该有一个由您自己的按钮类组成的数组,这些类具有检查冲突的方法。检查这些按钮的实际碰撞是很简单的,只需验证鼠标弦是否在sprite覆盖的坐标范围内,就可以验证鼠标坐标是否大于x和y位置,但不大于x和y位置加上宽度和高度,如下所示:
if ((mouseX > PlayButtonX && mouseX < (PlayButtonX + ButtonWidth)) && (mouseY > PlayButtonY && mouseY < (PlayButtonY + ButtonHeight)) {
//play button has been clicked
https://gamedev.stackexchange.com/questions/132207
复制相似问题