Eujene
@Eujene
Айти или не айти?

Как настроить плавное движение модели?

Коллеги,

изучаю ООП по учебнику Эрик Мэтиз "Изучаем Python". Пишу по нему игру с помощью pygame. И возникла проблема - не получается настроить плавное движение модели. Помогите, пожалуйста, решить проблему.

import  sys, pygame


def check_events(ship):
    for event in pygame.event.get():
        if event.type   ==    pygame.QUIT:
            sys.exit()

        #проверка нажатия клавиши
        elif event.type ==    pygame.KEYDOWN:
            if event.key==    pygame.K_RIGHT:
            #Переместить корабль вправо.
                ship.moving_rignt   =   True
        elif event.type ==    pygame.KEYUP:
            if event.key==    pygame.K_RIGHT:
                ship.moving_rignt   =   False


def update_screen(ai_settings, screen, ship):
    '''обновляет изображение на экране и отображает новый экран
при каждом проходе цикла перерисовывается экран'''
    screen.fill(ai_settings.bg_color)
    ship.blitme()

    #отображание последнего прорисованного экрана


Идея в том, что по умолчанию движение коробля (пока только в право) находится в состоянии False. А когда нажата клавиша, движение переходит в состояние True и позиция модели начинает сдвигаться, пока клавижа не отжата.

import pygame

class Ship():
    def __init__(self, screen):
        self.screen         =   screen
        self.image          =   pygame.image.load('images/ship.png')
        self.rect           =   self.image.get_rect()
        self.screen_rect    =   screen.get_rect()
        self.rect.centerx   =   self.screen_rect.centerx
        self.rect.bottom    =   self.screen_rect.bottom

       <b> self.moving_right   =   False # Flag moving</b>

    def update(self):
        '''update ship`s posicition with flag'''

        if self.moving_right:
            self.rect.centerx   +=  1

    def blitme(self):


Как я понимаю, проблема в модуле check_events(ship)
  • Вопрос задан
  • 621 просмотр
Пригласить эксперта
Ответы на вопрос 1
Eujene
@Eujene Автор вопроса
Айти или не айти?
Я не понял почему, но если переписать код в таком виде, то все заработает.
def check_events(ship):
    for event in pygame.event.get():
        if event.type   ==    pygame.QUIT:
            sys.exit()
        #проверка нажатия клавиш


        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = True

        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = False
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы