介绍
我曾经在过去的一个帖子中提到过这个问题,通过这个论坛上其他用户的帮助,我花了很长时间修改我的代码,但最终仍然和我起始的地方一样,所以我采用了不同的方法。
我的目标
我不会让你替我制作游戏,所以我并没有发布所有的游戏代码,而是制作了一个非常简单的版本来说明问题,它只有两个类:主类和游戏类。提供的简单代码如下:有两个矩形,其中一个根据键盘输入移动,就这样,没有背景,没有图像,没有动画,代码也很少。
我的问题/我的疑问
我的问题是在游戏中的碰撞,例如在这个例子中的两个矩形,我需要添加一些代码来防止一个矩形与另一个矩形相交,我已经查看了许多关于此问题的教程和指南,但没有取得任何进展,希望这个论坛的用户能够帮助我解决这个问题。
代码
正如我之前提到的,这个游戏的代码非常简单,只有2个类,没有其他要求,因此如果需要,您可以简单地创建 2 个类(Game 和 Play),并在计算机上运行此游戏。请注意,在使用此代码之前,您需要使用编译器设置 Slick。
主要类(Game)
package javagame;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Game extends StateBasedGame{
public static final String gamename = "Ham Blaster! 2.0";
public static final int play = 1;
public Game(String gamename){//create window on statup
super(gamename);//adds title to screen
this.addState(new Play(play));
}
public void initStatesList(GameContainer gc) throws SlickException{
this.getState(play).init(gc, this);
}
public static void main(String[] args) {
AppGameContainer appgc;//the window for your game
try{
appgc = new AppGameContainer(new Game(gamename));
appgc.setDisplayMode(640, 360,false);
appgc.start();
}catch(SlickException e){
e.printStackTrace();}
}}
播放类
package javagame;
import java.awt.Rectangle;
import org.newdawn.slick.Animation;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class Play extends BasicGameState{
Animation bucky, movingUp, movingDown, movingLeft, movingRight;
Image worldMap;
boolean quit = false;//gives user to quit the game
int[] duration = {200, 200};//how long frame stays up for
int buckyPositionX = 0;
int buckyPositionY = 0;
int shiftX = buckyPositionX + 320;//keeps user in the middle of the screem
int shiftY = buckyPositionY + 160;//the numbers are half of the screen size
Rectangle rectOne = new Rectangle(shiftX, shiftY,90,90);
Rectangle rectTwo = new Rectangle(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);
public Play(int state){
}
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
g.fillRect(shiftX, shiftY,90,90);
g.fillRect(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);
}
public void update(GameContainer gc, StateBasedGame sbg, int delta)throws SlickException{
Input input = gc.getInput();
//up
if(input.isKeyDown(Input.KEY_UP)){buckyPositionY += 2;}
//down
if(input.isKeyDown(Input.KEY_DOWN)){buckyPositionY -= 2;}
//left
if(input.isKeyDown(Input.KEY_LEFT)){buckyPositionX += 2;}
//right
if(input.isKeyDown(Input.KEY_RIGHT)){buckyPositionX -= 2;}
}
public int getID(){
return 1;
}
}
如果您需要任何其他信息,请告诉我,我会尽快回复。
intersects
这样的方法。 - mellamokbRectangle
,因为它具有X+Y坐标(然后您可以使用intersects)。一般编码提示-拥有width
和height
变量,并说width/2
而不是320
。 - Bernhard Barker