Как использовать 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 является более эффективным.

Другие вопросы по тегам