最近,我使用cocos2d
和Python
来制作游戏。但我对collision_model
遇到了麻烦。我阅读了documentation但我仍然无法使用CollisionManager
添加CollidableSprite
example。
事实上,我必须将ActorSprite
更改为CollidableSprite
以避免错误。问题是什么?
import cocos.euclid as eu
import cocos.collision_model as cm
class CollidableSprite(cocos.sprite.Sprite):
def __init__(self, image, center_x, center_y, radius):
super(ActorSprite, self).__init__(image)
self.position = (center_x, center_y)
self.cshape = cm.CircleShape(eu.Vector2(center_x, center_y), radius)
class ActorModel(object):
def __init__(self, cx, cy, radius):
self.cshape = cm.CircleShape(eu.Vector2(center_x, center_y), radius)
文档显示了这个例子初始化可碰撞的精灵。但是ActorSprite
来自哪里?我必须将其更改为CollidableSprite
才能使课程正常运行。我说一个碰撞管理器来添加精灵。但是当我调用函数None
时,它会返回CollisionManeger.known_objs()
。
def __init__(self):
super(page,self).__init__()
self.collision_manager = CollisionManager()
self.collision_manager.add(self.sprite1)
self.collision_manager.add(self.sprite2)
print self.collision_manager.known_objs()
那么,文档有问题吗?或者我以某种方式误解了它?
答案 0 :(得分:2)
看起来该示例应该确实初始化CollidableSprite
而不是ActorSprite
。
CollisionManager
类只是一个接口。它没有做任何事情。 collision_model中有两个实现:CollisionManagerBruteForce
和CollisionManagerGrid
。所以你可以使用例如:
self.collision_manager = CollisionManagerBruteForce()
但请注意CollisionManagerGrid
is more efficient。