一段时间以来,我一直在用J2ME编程。我想创造“超级”游戏2D现在。首先,拿出最重要的数据:
Soldier
类的对象(继承Sprite
之后的)Bullet
类的弹对象(也可以继承Sprite
之后的)。我在这里遇到麻烦了。是这样的:子弹击中了士兵。如何将士兵的目标转移到子弹的物体上(反之亦然)以降低士兵的HP。
下一个数据一目了然:
Soldier
类具有静态字段HP
Bullet
类获得了静态字段hit
包含关于子弹力的数据我有条件声明,检查球员是否与trpas TiledLayer碰撞。这没什么问题。问题是用子弹检查科里森。collidesWith()
方法检查与Sprite
、TiledLayer
、Layer
的一度对象之间的冲突。子弹的物体会很多。这里是否有这样的选项来检查与特定类型的冲突,而不是与特定类型的特定对象的冲突(不检查与bullet1、bullet2、bullet3作为队列的冲突,以及Bullet
的所有类型)?
我的问题。
1.如果发生碰撞,如何将子弹的数据传送给士兵? 2.如何检测与Bullet
类型的碰撞,而不是对象--x型子弹号?
发布于 2012-04-03 17:35:13
Object
类有一个getClass()方法,它返回给定对象是实例的类的名称。这不是最好的编程实践,但它有效。如果您需要将Bullet
数据“传输”到Soldier
,那么添加一个接受子弹/士兵的碰撞方法:soldierCollisionEvent(Bullet b)
,甚至collision(Soldier s, Bullet b)
。或者,您可以利用面向对象程序设计让对象共享数据和事件,而不必担心(太多)类类型。
发布于 2012-04-03 17:35:24
您在J2ME中没有反射,所以没有Bullet.class
或类似的东西。
即使有,它仍然没有帮助,因为你仍然需要(以某种方式)检查所有的子弹。
但是,您可以尝试做一些更智能的事情,比如跟踪一些您知道离Soldier
更近的子弹。如果您愿意,甚至可以尝试用于空间分区的高级算法/数据结构(k-d树,或BVH),这些算法/数据结构在3D计算机图形学中有很好的文档记录,在2D中使用时要简单得多。
祝好运!
编辑:如果你只有一把子弹(比如10颗子弹),那就不需要所有花哨的东西了。这只会使事情变得复杂,只要检查每颗子弹的碰撞情况就可以了。
https://stackoverflow.com/questions/9997991
复制相似问题