首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在用Java为MenuScreen制作按钮时需要帮助

在用Java为MenuScreen制作按钮时需要帮助
EN

Game Development用户
提问于 2016-10-28 03:21:01
回答 1查看 140关注 0票数 0

我正在为我的游戏做一个菜单,我制作了MenuState(类)和MouseManager(类,实现了MouseListener和MouseMotionListener),它们在不同的文件夹中是不同的类。这是我的问题,通常人们把他们的按钮作为我的绘制矩形,并添加字体,并使他们的按钮。但我没那么做。我用Photoshop做了一个按钮,我把它放进我的雪碧单子里,裁剪它,然后把它变成我的按钮。现在我想让它,如果我点击我的‘播放’按钮图片,它发送到我的GameState,如果我点击我的‘退出’按钮图片,它关闭我的窗口

MyMenuState(class)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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);
}
}

MouseManager(class)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
	}

}
EN

回答 1

Game Development用户

回答已采纳

发布于 2016-11-10 08:10:48

您所需要做的就是验证鼠标是否在图像中,如果您想正确地执行此操作,您应该有一个由您自己的按钮类组成的数组,这些类具有检查冲突的方法。检查这些按钮的实际碰撞是很简单的,只需验证鼠标弦是否在sprite覆盖的坐标范围内,就可以验证鼠标坐标是否大于x和y位置,但不大于x和y位置加上宽度和高度,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ((mouseX > PlayButtonX && mouseX < (PlayButtonX + ButtonWidth)) && (mouseY > PlayButtonY && mouseY < (PlayButtonY + ButtonHeight)) {
     //play button has been clicked
票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/132207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文