首页 > 解决方案 > 如何在pygame中改变蛇头方向?

问题描述

我想要它,这样当我按下左箭头键(例如)时,蛇头会向左移动。我一直在使用 pygame.display.flip 命令,但这意味着如果我继续单击左键,它会不断地左右翻转。

if event.key == K_LEFT:  
                block = pygame.transform.flip(block, True, False) 
                block_x -= 20

(如果有帮助,我的其余代码)

        import pygame
from pygame.locals import *

def draw_block():   
    surface.fill((44, 250, 150))
    surface.blit(block, (block_x, block_y))
    pygame.display.update

def change_direction():
    block = pygame.display.flip


pygame.init()

WND_RES = (800, 600)

surface = pygame.display.set_mode(WND_RES)
surface.fill((44, 250, 150))

block_x = 100
block_y = 100

block = pygame.image.load("resources/pogchamp.jpg").convert()

surface.blit(block,(block_x,block_y))

pygame.display.update()

running = True

while running:
    
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            pass
            if event.key == K_ESCAPE:
                running = False 
            if event.key == K_UP:
                block_y -= 20
                draw_block()
            if event.key == K_DOWN:
                block_y += 20
                draw_block()
            if event.key == K_LEFT:  
                block = pygame.transform.flip(block, True, False) 
                block_x -= 20
                draw_block()
            if event.key == K_RIGHT:
                block_x += 20
                block = pygame.transform.flip(block, True, False)
                draw_block()
        elif event.type == QUIT:
            running = False

    pygame.display.update()

标签: pythonpygame

解决方案


好吧,从我看到的每次你进入活动时,你都会像这样翻转你的形象。

    if event.key == K_LEFT:  
                block = pygame.transform.flip(block, True, False) 
                block_x -= 20
                draw_block()

所以我添加了条件来知道头部何时必须右转或左转

    if event.key == K_LEFT:
                if flip_left is False and flip_right is True: ## HERE ##
                    block = pygame.transform.flip(block, True, False)
                    flip_left, flip_right = True, False ## HERE ##
                block_x -= 20
                draw_block()
                
            if event.key == K_RIGHT:
                if flip_right is False and flip_left == True:## HERE ##
                    block = pygame.transform.flip(block, True, False)
                    flip_left, flip_right = False, True ## HERE ##

所以这是你的其余代码,我用“## HERE ##”标记了更改

import pygame
from pygame.locals import *

def draw_block():   
    surface.fill((44, 250, 150))
    surface.blit(block, (block_x, block_y))
    pygame.display.update

def change_direction():
    block = pygame.display.flip


pygame.init()

WND_RES = (1080, 960)

surface = pygame.display.set_mode(WND_RES)
surface.fill((44, 250, 150))

block_x = 100
block_y = 100

block = pygame.image.load("pogchamp.jpg").convert()


surface.blit(block,(block_x,block_y))

pygame.display.update()

running = True



flip_left = False  ## HERE ##
flip_right = True ## HERE ##  He starts to look to the right

while running:
    
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            pass
            if event.key == K_ESCAPE:
                running = False 
            if event.key == K_UP:
                block_y -= 20
                draw_block()
            if event.key == K_DOWN:
                block_y += 20
                draw_block()


            if event.key == K_LEFT:
                if flip_left is False and flip_right is True: ## HERE ##
                '''when you click to look on the left, it checks if it is not 
                already done and if it is not it exchanges the status'''
    
                    block = pygame.transform.flip(block, True, False)
                    flip_left, flip_right = True, False ## HERE ##
                block_x -= 20
                draw_block()
                
            if event.key == K_RIGHT:
                if flip_right is False and flip_left == True: ## HERE ##
                    block = pygame.transform.flip(block, True, False)
                    flip_left, flip_right = False, True ## HERE ##

                block_x += 20
                draw_block()
        elif event.type == QUIT:
            running = False

    pygame.display.update()

推荐阅读