如何使用cocos2d的collision_model

时间:2015-06-10 14:18:02

标签: python cocos2d-python

最近,我使用cocos2dPython来制作游戏。但我对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()

那么,文档有问题吗?或者我以某种方式误解了它?

1 个答案:

答案 0 :(得分:2)

看起来该示例应该确实初始化CollidableSprite而不是ActorSprite

CollisionManager类只是一个接口。它没有做任何事情。 collision_model中有两个实现:CollisionManagerBruteForceCollisionManagerGrid。所以你可以使用例如:

self.collision_manager = CollisionManagerBruteForce()

但请注意CollisionManagerGrid is more efficient