Изменение спрайта при нажатии клавиши - PullRequest
0 голосов
/ 26 сентября 2018

Я следовал учебному пособию по YouTube, чтобы начать с python и pygmae, но начал вносить изменения до его завершения (https://www.youtube.com/watch?v=dX57H9qecCU&index=5&list=PLQVvvaa0QuDdLkP8MrOXLe_rKuf6r80KO). Я хотел добавить то же самое «изменение спрайта при нажатии» ( как изменитьспрайт на экране после нажатия клавиши в pygame ) для моего кода, но я ничего не получаю. Игра просто запускается, как будто для этого вообще не было кода.

import pygame
import time

pygame.init() #as important as import pygame, always init pygame 
display_width = 600
display_height = 900

black = (0,0,0)
white = (255,255,255)
red = (255,0,0)

starship_width = 60

gameDisplay = pygame.display.set_mode((display_width,display_height)) #sets window size. Put between () so it's seen as a single parameter
pygame.display.set_caption("Starship") #changes window title display
clock = pygame.time.Clock() #sets clock as frames per second

ship_image_names = ["starship", "move_right", "move_left"]
ship_sprites = dict(((img_name, pygame.image.load(img_name + ".png"))
                        for img_name in ship_image_names))
starshipImp = ship_sprites["starship"]

def starship(x,y):  #sets image position
    gameDisplay.blit(starshipImp,(x,y))

def text_objects(text,font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def kb_disable():
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT or pygame.K_RIGHT or pygame.K_UP or pygame.K_DOWN:
                pass

def message_display(text):
    largeText = pygame.font.Font("theboldfont.ttf",70)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2), (display_height/2-170))
    gameDisplay.blit(TextSurf,TextRect)

def message_display1(text):
    largeText = pygame.font.Font("theboldfont.ttf",70)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2), (display_height/2-100))
    gameDisplay.blit(TextSurf,TextRect)
    pygame.display.update() 

    while not kb_disable(): 
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_y:
                    game_loop()
                elif event.key == pygame.K_n:
                    pygame.quit()
                    quit()


def replay():
    message_display("You Crashed")
    message_display1("Replay? (Y)(N)")


def game_loop():

    x = (display_width * 0.5 - 45)    
    y = (display_height * 0.8)

    x_change = 0
    y_change = 0

    game_Exit = False # beginning game loop

    while not game_Exit: 
        for event in pygame.event.get():
            if event.type == pygame.QUIT: 
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x_change = -5
                elif event.key == pygame.K_RIGHT:
                    x_change = 5    
                if event.key == pygame.K_UP:
                    y_change = -5
                elif event.key == pygame.K_DOWN:
                    y_change = 5

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    x_change = 0 
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                    y_change = 0




        x += x_change           
        y += y_change


        gameDisplay.fill(white) #background
        starship(x,y) #shows starship image
        if x_change == 0:
            starshipImp = ship_sprites["starship"]
        if x_change > 0:
            starshipImp = ship_sprites["move_right"]
        if x_change < 0:
            starshipImp = ship_sprites["move_left"]

        if x > display_width  - starship_width or x < 0:  #setting boundaries to left and right border
                replay()




        pygame.display.update() #update the screen
        clock.tick(120)


game_loop()
pygame.quit()
quit()

Я также добавилкакая-то функция воспроизведения, но она глючит, когда я нажимаю назначенную клавишу, она не всегда работает, не знаю почему.

Любая помощь будет принята с благодарностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...