3

最近,我用cocos2dwithPython来做一个游戏。但我遇到了麻烦collision_model。我阅读了文档,但我仍然无法在示例CollisionManager中使用添加CollidableSpriteas 。

事实上,我不得不改变ActorSpriteCollidableSprite避免错误。问题可能是什么?

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()

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

4

1 回答 1

2

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

CollisionManager类只是一个接口。它什么也没做。在collision_model中有两个实现:CollisionManagerBruteForceCollisionManagerGrid. 因此,您可以使用例如:

self.collision_manager = CollisionManagerBruteForce()

但请注意,CollisionManagerGrid 效率更高

于 2015-06-12T08:55:28.123 回答