すべてのゲーム オブジェクトは というクラスを拡張し、すべてのインスタンスは作成時に にEntity
挿入されます。ArrayList<Entity>
私の理論は、画面上のすべてのオブジェクトをループして更新し、ネストされたループ内から他のオブジェクトと衝突しているかどうかを確認できるというものでした。衝突している場合は、衝突しているオブジェクトをメソッド onCollide に渡すことができます。このメソッドは、オブジェクトが何であるかに応じて衝突を処理します。すなわち;
//Update Game Objects
if(gameObjects.size() > 0){
for(int counter = 0; counter < gameObjects.size(); counter ++){
//Update every object.
gameObjects.get(counter).update(gc, sbg, delta, gameObjects);
//If the object is colliding with another object,
for(int collisionCounter = 0; collisionCounter < gameObjects.size(); collisionCounter ++){
if(gameObjects.get(counter).isColliding(gameObjects.get(collisionCounter))){
//Execute collision code for both objects.
gameObjects.get(counter).onCollide(gameObjects.get(collisionCounter));
gameObjects.get(collisionCounter).onCollide(gameObjects.get(counter));
}
}
}
}
ただし、私のArrayListは「エンティティ」で構成されているため、Javaでは次のようなメソッドをオーバーロードできません。
onCollide(Player player),
onCollide(Enemy enemy)
等
の使用を避けたいinstanceof
ので、ポリモーフィズムを利用してこの効果を達成する方法、または一般的に衝突を行うためのより良い方法はありますか?
[解決済み] 「type」と呼ばれる文字列変数を使用して、オブジェクト間の違いを判断するようになりました。