在我的游戏中,所有游戏对象都扩展了一个实体类。所有敌人的物体都有自己的类,可以扩展敌人。敌人扩展了实体。 换一种说法, 实体 - >敌人 - > SharkEnemy。
现在,我希望有一个函数让我测试与特定类的碰撞。 也就是说,如果我有一个子弹类,我希望它只测试与扩展Enemy的实体的碰撞。
我已经用Google搜索了,这就是我所拥有的:
public <T> Entity collide(Entity a, Class<T> desiredClass)
{
for (Entity b : entities)
if (b.getClass() == desiredClass && collide(a, b))
return b;
return null;
}
这就是我想要的东西,但我需要知道它是否扩展了desiredClass,而不是如果类等于desiredClass。
答案 0 :(得分:2)
public <T> Entity collide(Entity a, Class<T> desiredClass)
{
for (Entity b : entities)
if (desiredClass.isAssignableFrom( b.getClass() ) && collide(a, b))
return b;
return null;
}
答案 1 :(得分:1)
因为你传递了类对象,
for (Entity b: entities)
{
if (SharkEnemy.class.isInstance(b)...)
答案 2 :(得分:0)
传入(T desiredType)而不是类并使用:
if (b instanceof desiredType)
答案 3 :(得分:0)
也许我没有得到你的确切问题,但你不能只使用接口和多态?如果不使用RTTI,我会看起来更好的设计选择
例如:
abstract class Entity
{
abstract boolean isCollidingWithBullet(Bullet bullet);
.. concrete methods ..
}
class Enemy extends Entity
{
boolean isCollidingWithBullet(Bullet bullet)
{
.. specific implementation
}
}
class NotEnemy extends Entity
{
boolean isCollidingWithBullet(Bullet bullet)
{
return false;
}
}