Почему не работает клавиатура управления? Правая и левая мышь - PullRequest
0 голосов
/ 01 июля 2018

Файл alien_invasion.py является основным файлом приложения. Почему управляющая мышь не работает? Как сделать контрольную клавиатуру для этого примера и управлять кораблем с левой и правой площадкой?

файл, в котором находится управляющая мышь / клавиатура

файл: game_functions.py

import sys
import 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_right = True
            elif event.key == pygame.K_LEFT:
                 ship.moving_left = True

        elif event.type == pygame.KEYUP :
            if event.key == pygame.K_RIGHT:
                ship.moving_right = False
            elif event.key == pygame.K_LEFT:
                ship.moving_left = False

настройки для корабля

файл: ship.py

import pygame

class Ship():
    def __init__(self, ai_settings, screen):
        self.screen = screen
        self.ai_settings = ai_settings

        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

        self.moving_right = False
        self.moving_left = False

        self.center = float(self.rect.centerx)


    def blitme(self):
        self.screen.blit(self.image, self.rect)

    def update(self):


        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.ship_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.ship_speed_factor

        self.rect.centerx = self.center

основной файл, в котором запускается приложение

файл: alien_invasion.py

import sys
import pygame
from settings import Settings
from ship import Ship
import game_functions as gf

def run_game():
    pygame.init()
    pygame.display.set_caption("Inwazja obcych")
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    ship = Ship(ai_settings, screen)
    gf.update_screen(ai_settings, screen, ship)
    gf.check_events(ship)
    ship.update()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        screen.fill(ai_settings.bg_color)
        ship.blitme()
        pygame.display.flip()

run_game()

1 Ответ

0 голосов
/ 02 июля 2018

Поскольку вы вызываете функцию check_events только один раз; затем вы входите в цикл while True: и никогда больше не проверяете события клавиатуры.

Что вам действительно поможет, так это изучение методов отладки. Либо попробуйте использовать отладчик, либо используйте простые операторы print, чтобы узнать, что делает ваша программа.

...