我的所有游戏对象都扩展了一个名为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包含“Entity”,Java不允许我重载像;
这样的方法onCollide(Player player),
onCollide(Enemy enemy)
等
我想避免使用instanceof
,那么有没有办法利用多态来实现这种效果,或者更好的方法来进行碰撞?
[已解决]现在使用名为“type”的String变量来确定对象之间的差异。