我是Java新手,我有基本的编程知识。我最近开始开发一个游戏(在教程的帮助下)。游戏是一款RPG游戏。它的设置使得玩家的头像始终位于屏幕的中心,但后台会滚动。我知道这已经被问过,但没有一个答案对我有意义。基本上,我如何为多个对象创建碰撞检测?我希望它能够让我的球员在撞墙时停止移动。我目前已经设定了边界的碰撞,但是如何设置房屋,墙壁等的碰撞?我的代码副本如下。先谢谢你。另外,我正在使用Slick2D。碰撞检测
package javagame;
import org.newdawn.slick.*;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.state.*;
//Need "extends etc." for creating basic screen/state
public class Play extends BasicGameState{
public Rectangle lake1;
Animation avatar, movingUp, movingDown, movingLeft, movingRight;
Image worldMap;
boolean quit = false;
int[] duration = {200,200};
float avatarPositionX = 0;
float avatarPositionY = 0;
float shiftX = avatarPositionX + 250;
float shiftY = avatarPositionY + 180;
public Play(int state){
}
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
worldMap = new Image("res/WaterMap.png");
Image[] walkUp = {new Image("res/CharBack.png"), new
Image("res/CharBack.png")};
Image[] walkDown = {new Image("res/CharFront.png"), new
Image("res/CharFront.png")};
Image[] walkLeft = {new Image("res/CharLeft.png"), new
Image("res/CharLeft.png")};
Image[] walkRight = {new Image("res/CharRight.png"), new
Image("res/CharRight.png")};
movingUp = new Animation(walkUp, duration, false);
movingDown = new Animation(walkDown, duration, false);
movingLeft = new Animation(walkLeft, duration, false);
movingRight = new Animation(walkRight, duration, false);
avatar = movingDown;
}
//Takes gc and StateBasedGame and Graphics
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws
SlickException{
lake1 = new Rectangle(132, 277, 87, 54);
worldMap.draw(avatarPositionX, avatarPositionY);
avatar.draw(shiftX, shiftY);
g.drawString("Your X: "+avatarPositionX+"\nYour Y: "+avatarPositionY, 350,
20);
if(quit==true){
g.drawString("Resume (R)", 200, 100);
g.drawString("Main Menu (M)", 200, 150);
g.drawString("Quit (Q)", 200, 200);
if(quit==false){
g.clear();
}
}
}
//Updates images on screen; creates animation
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws
SlickException{
Input input = gc.getInput();
//up
if(input.isKeyDown(Input.KEY_UP)){
avatar = movingUp;
avatarPositionY += delta * .1f;
//+= changed to -=
if(avatarPositionY>180){
avatarPositionY -= delta * .1f;
}
}
//down
if(input.isKeyDown(Input.KEY_DOWN)){
avatar = movingDown;
avatarPositionY -= delta * .1f;
if(avatarPositionY<-497){
avatarPositionY += delta * .1f;
}
}
//left
if(input.isKeyDown(Input.KEY_LEFT)){
avatar = movingLeft;
avatarPositionX += delta * .1f;
if(avatarPositionX>249){
avatarPositionX -= delta * .1f;
}
}
//right
if(input.isKeyDown(Input.KEY_RIGHT)){
avatar = movingRight;
avatarPositionX -= delta * .1f;
if(avatarPositionX<-433){
avatarPositionX += delta * .1f;
}
}
//escape
if(input.isKeyDown(Input.KEY_ESCAPE)){
quit = true;
}
//when menu is up
if(quit == true){
if(input.isKeyDown(Input.KEY_R)){
quit = false;
}
if(input.isKeyDown(Input.KEY_M)){
sbg.enterState(0);
}
if(input.isKeyDown(Input.KEY_Q)){
System.exit(0);
}
}
}
public int getID(){
return 1;
}
}
这是基于瓦片的? – Cruncher
@Cruncher到目前为止,它并不是基于瓷砖的。将来,我希望它成为现实。如果您有任何建议,请成为我的客人。我很想创造这个游戏,所以任何和所有的帮助是值得欢迎的! – user3495101
作为参考,我正在构想像Tibia。本质上,当你移动时,你不能停止移动,直到它移动整个瓷砖。然后在那一刻,你只需要一个2d的Tile对象数组。如果你正在移动的瓷砖有tile.passable()为真,那么允许散步,否则失败 – Cruncher