Slick2D Java游戏使用方法重载冲突
我的所有游戏对象都扩展了一个名为Slick2D Java游戏使用方法重载冲突,java,overloading,collision,slick2d,Java,Overloading,Collision,Slick2d,我的所有游戏对象都扩展了一个名为Entity的类,每个实例在创建时都会插入到ArrayList中 我的理论是,我可以循环浏览屏幕上的所有对象,更新它们,还可以检查它们是否与嵌套循环中的任何其他对象发生碰撞。如果它们发生碰撞,我可以将它们碰撞的对象传递到一个方法onCollide中,该方法将根据对象是什么来处理碰撞;ie //Update Game Objects if(gameObjects.size() > 0){ for(int counter = 0; counter < ga
Entity
的类,每个实例在创建时都会插入到ArrayList
中
我的理论是,我可以循环浏览屏幕上的所有对象,更新它们,还可以检查它们是否与嵌套循环中的任何其他对象发生碰撞。如果它们发生碰撞,我可以将它们碰撞的对象传递到一个方法onCollide中,该方法将根据对象是什么来处理碰撞;ie
//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));
}
}
}
}
等等
我想避免使用instanceof
,那么有没有一种方法可以利用多态性来实现这种效果,或者有一种更好的方法来实现冲突呢
[已解决]现在使用一个名为“type”的字符串变量来确定对象之间的差异。您能否详细说明为什么需要一个实体根据被碰撞的对象以不同的方式进行碰撞?不一定是不同的方式,只需执行不同的操作-例如,敌人会移除生命值,而通电会使玩家获得暂时的增益。onCollide会做一些不同的事情,这取决于对象与什么碰撞!不要将您的问题标记为“已解决”,而是将您为解决问题所做的事情写下来作为答案,然后将该答案标记为已接受。对类型使用成员变量与使用
instanceof
基本相同。为什么不使用不太容易出错的内置组件呢?@GoldenDragon使用“instanceof”和使用类标记,甚至class.getName
在耦合方面没有区别。我想说的很简单:当一个敌人与另一个敌人相撞,或者当一个敌人与奖励物品相撞时,你可能对会发生什么不感兴趣。您拥有您的播放器,并将其与其他实体(O(N)循环而不是O(N^2))进行检查。然后让其他实体与播放器发生冲突(冲突逻辑在其他实体中实现)。
onCollide(Player player),
onCollide(Enemy enemy)