如何使用 cocos2d 的 collision_model
How to use cocos2d's collision_model
最近用cocos2d
和Python
做了个游戏。但是我在 collision_model
上遇到了麻烦。我读了 documentation but I still can't use the CollisionManager
to add the CollidableSprite
as in the 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
才能使 class 起作用。我声明了一个碰撞管理器来添加精灵。但是当我调用函数 CollisionManeger.known_objs()
.
时它 returns None
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()
所以,文档有问题吗?还是我误会了?
看起来该示例确实应该初始化 CollidableSprite
而不是 ActorSprite
。
CollisionManager
class 只是一个接口。它什么都不做。 collision_model中有两个实现:CollisionManagerBruteForce
和CollisionManagerGrid
。所以你可以使用例如:
self.collision_manager = CollisionManagerBruteForce()
但请注意 CollisionManagerGrid
is more efficient.
最近用cocos2d
和Python
做了个游戏。但是我在 collision_model
上遇到了麻烦。我读了 documentation but I still can't use the CollisionManager
to add the CollidableSprite
as in the 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
才能使 class 起作用。我声明了一个碰撞管理器来添加精灵。但是当我调用函数 CollisionManeger.known_objs()
.
None
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()
所以,文档有问题吗?还是我误会了?
看起来该示例确实应该初始化 CollidableSprite
而不是 ActorSprite
。
CollisionManager
class 只是一个接口。它什么都不做。 collision_model中有两个实现:CollisionManagerBruteForce
和CollisionManagerGrid
。所以你可以使用例如:
self.collision_manager = CollisionManagerBruteForce()
但请注意 CollisionManagerGrid
is more efficient.