我是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