Как использовать cocos2d's collision_model
Недавно я использовал cocos2d
с Python
сделать игру. Но у меня были проблемы с collision_model
, Я прочитал документацию, но все еще не могу использовать CollisionManager
добавить CollidableSprite
как в примере.
На самом деле, мне пришлось изменить 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 ответ
Похоже, что пример действительно должен инициализировать CollidableSprite
вместо ActorSprite
,
CollisionManager
класс это просто интерфейс. Это ничего не делает. В collision_model есть две реализации: CollisionManagerBruteForce
а также CollisionManagerGrid
, Так что вы можете использовать, например:
self.collision_manager = CollisionManagerBruteForce()
но обратите внимание, что CollisionManagerGrid
является более эффективным.