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;        
  }
}

このコードをゲームに入れてもエラーはなくなりましたが、より大きな問題が発生しました。このコードではエラーは発生しませんが、何もしません。つまり、ゲームを開始しても衝突は発生しません。 2 つの長方形が交差しても何も起こらないので、誰か助けてください。

ありがとうございました。

4

1 に答える 1

0
  • ゲーム エンティティに対して一意のデータ型を維持することをお勧めします
  • [クラス ゲームの] 更新は、別のスレッドで定期的に呼び出す必要があります
  • 定期的に別スレも描く

ゲーム ロジックは次のようになります (ほぼ完全な 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 に答える