简介
我过去曾就这个问题做了一个帖子,在这个论坛上花了很长时间在其他用户的帮助下修改我的代码后,我仍然和我开始的地方一样,所以我正在服用不同的方法。
我想做什么
我不会要求你为我制作游戏,所以我没有为我的游戏发布我的所有代码,而是制作了一个非常相似且非常简单的游戏版本,它只有两个类主游戏和游戏类。我提供的简单代码是什么:有两个矩形和一个带键盘输入的动作,就是这样,没有背景,没有图像,没有动画和很少的代码。
我的问题/我的问题
我在游戏中遇到的问题是碰撞,在本例中是两个矩形,我需要在我的游戏中添加一些代码来阻止一个矩形与另一个相交,我看了很多教程,很多指南关于这个问题,但没有取得任何进展,我希望这个论坛的用户能帮我解决这个问题。
守则
正如我上面提到的,这个游戏的代码很少,只有2个类而且没有其他要求,所以如果你需要你可以简单地创建2个类(游戏和游戏)并在你的计算机上运行这个游戏。请注意,在使用此代码之前,您需要使用编译器设置光滑。
主要课程(游戏)
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();}
}}
Play Class
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;
}
}
如果您需要任何其他信息,请告诉我,我会尽快回复。
答案 0 :(得分:0)
我对框架并不熟悉,但据我所知,基元类型提供了一个intersects()方法来确定两个对象是否相互碰撞。您需要手动调用它或找到一些组件,您可以注册您的对象,以便它为您完成。