Переместить спрайт вдоль определенного направления cocos2d

Я хочу перемещать спрайт в определенном направлении до следующего нажатия клавиши в cocos2d.

Код для обработки нажатия клавиш выглядит следующим образом:

    def on_key_press(self, symbol, modifiers):
    if symbol == key.LEFT:
        DIRECTION="left"
        before=self.player.position
        height=self.player.position[1]
        width=self.player.position[0]-1
        self.player.position=width,height
        self.player.rotation=-90
        if(height>=600 or height<=0):
            print ("you lose)
        if(width>=800 or width<=0):
            print ("you lose)


    elif symbol == key.RIGHT:
        DIRECTION="right"
        before=self.player.position
        height=self.player.position[1]
        width=self.player.position[0]+1
        self.player.position=width,height
        self.player.rotation=90
        if(height>=600 or height<=0):
            print ("you lose)
        if(width>=800 or width<=0):
            print ("you lose")
        ...

Я пробовал эту функцию, которая вызывает вышеупомянутую функцию, чтобы спрайт двигался вдоль направления,

    def keep_going(self,DIRECTION):
        if(DIRECTION=="left"):
            self.on_key_press(key.LEFT,512)
        ...

но спрайт легко выходит за границы экрана. Есть ли способ заставить спрайт двигаться в контролируемом направлении?

1 ответ

Решение

Как вы называете функцию keep_going? Если он находится в простом цикле, он вызывается слишком часто, и спрайт, вероятно, движется так быстро, что мгновенно исчезает.

Я предполагаю, что здесь self в вашем коде есть какой-то слой. Вы можете изменить подпись функции на def keep_going(self, dt, DIRECTION) а затем, например, в конструкторе слоя, вызвать self.schedule_interval(self.keep_going, 0.1, 'left') обновить позицию спрайта 10 раз в секунду.

Другой возможностью является использование функции расписания, которая планирует функцию, которая будет выполняться постоянно, а не через фиксированные интервалы. В этом случае вы должны изменить свою функцию больше. Я предлагаю установить скорость для спрайта на основе ввода, а затем вычислить новую позицию в пикселях. Есть хороший пример в пакете cocos в samples/balldrive_toy_game/balldrive_toy_game.py

Если вы хотите использовать действия, Move Move хорошо подходит для этого.

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