0

过去我做了一些线程来寻求碰撞帮助并取得了一些进展,我正在制作一个 2D Java 游戏,屏幕上的玩家随着键盘输入移动,问题是,在我的背景上(地图)有很多障碍,目前我的玩家只是直接穿过它们,到目前为止,在这个论坛的用户的帮助下,我在我的代码中得到了这段代码来检测碰撞:

 public void changeBuckyPos(float deltaX, float deltaY) {
  float newX = buckyPositionX + deltaX;
  float newY = buckyPositionY + deltaY;

  // check for collisions
  Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40);
  Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

  if (!rectOne.intersects(rectTwo)) {
    buckyPositionX = newX;        
    buckyPositionY = newY;        
  }
}

现在我把这段代码放到我的游戏中没有错误,但是出现了一个更大的问题,虽然这段代码没有错误,但它什么也没做,我的意思是当我进入游戏时没有碰撞,当两个矩形相交时什么都没有发生,任何人都可以帮我解决这个问题,我已经坚持了很长时间。

谢谢你。

4

1 回答 1

0
  • 最好为您的游戏实体维护一个唯一的数据类型
  • Update [of class game] 应在单独的线程中定期调用
  • 也定期在另一个线程中绘制

您的游戏逻辑应该类似于(几乎完整的 Java Psydocode):

public class Block{
    int speedX;
    int speedY;
    Rectangle rect;
    public void update(){
         rect.x+=speedX;
         rect.y+=speedY; 
    }
    public void draw(/*Graphics g..or somthing*/){
         //draw this single object
    }
    ..getters and setters..
}

public class Game{
    List<Block> obstacles; 
    Block myBlock();   
    ......
    void update(){
        ...
       myBlock.update();
       for(Block ob: obstacles){               
           if(myBlock.getRect().intersects(ob.getRect())){
                  processCollision(ob);
           }
           ob.update();
       }
       ...
    }
    public void draw(/*Graphics g..or somthing*/){
           //background draw logic
           myBlock.draw(g);
           for(Block ob: obstacles)
               ob.draw(g);
    }
    void processCollision(Rect ob){
          ..
          do whatever you want with ob
          ..
    }
}
于 2012-12-21T11:51:40.077 回答