python - 如何在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()
解决方案
好吧,从我看到的每次你进入活动时,你都会像这样翻转你的形象。
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()
推荐阅读
- angular - 如何为 Async Pipe 编写 jasmine 测试用例
- unit-testing - 用 mockk 一次只模拟一个电话
- python - 在内存范围查询中执行 geohash
- c++ - 为什么 malloc() 返回一个高地址?
- debugging - VS 2017 xamarin android项目中未命中断点
- css - CSS阴影真棒效果
- angular - 服务工作者服务器图像缓存
- java - 即使 Appnext SDK 不在 AndroidManifest.xml 中,它如何为它的广告启动自己的活动?
- javascript - 当我使用webpack的externals属性分隔大型库(如React)时,浏览器报错
- phabricator - Phabricator:源文件 ManiphestEditAssignCapability.php 未能加载