0

Visual Basicでこれを正常に実行しましたが、Javaでこれを実行する簡単な方法があるかどうかを知りたいだけです。

基本クラスコレクションから派生クラスを反復処理するForループが必要です。

public class Game{
    private Collection<GameEntity> entities;

    // Methods would go here to control GameEntity's

    private abstract class GameEntity{
        protected Game owner; //Defines which instance Game owns this Entity

        public GameEntity(Game owner) {
            this.owner=owner;
        }

        public abstract void tick();
    }

    private class Partical extends GameEntity{
        public Partical(Game owner) {
            super(owner);
        }

        public void tick(){
            for (Partical p : owner.entities) { //HERE IS MY PROBLEM
                if(p != this){ //Don't do physics with itself

                }
            }
        }
    }
}

さて、ここにGameEntityのコレクションを持つGameクラスがありますが、GameEntityはひどくBaseクラスです。

ParticalはGameEntityクラスから派生しています。

forループで実行したいのは、GameEntityのコレクションを反復処理し、コレクションからすべてのParticalクラスを選択することです。

私の問題は、「互換性のないタイプ」エラーが発生することです。私はそれらが異なるタイプであることを理解しています。

4

3 に答える 3

1

目的のクラスタイプを繰り返して確認する必要があります。

for (GameEntity e : owner.entities) { //HERE IS MY PROBLEM
    if (e instanceof Partical) {
        Partical p = (Partical)e;
        if(p != this){ //Don't do physics with itself
        }
    }
}
于 2013-03-09T19:44:59.467 に答える
1

試す:

 for(GameEntity entity : owner.entities) {
      if(entity instanceof Partical) {
          Partical partical = (Partical) entity;
      }
 }
于 2013-03-09T19:45:06.203 に答える
1

Javaには型チェックがあり、instanceOfを使用して、型が他のスーパー型のインスタンスであるかどうかを確認できます。次に例を示します。

 if(entity instanceOf Partical) {
   // do smth
 }
于 2013-03-09T19:49:26.173 に答える