黑与白的灰 发表于 2021-3-24 11:44:46

关于pygame中,键盘事件的调用一个问题

操作键盘使图片翻转,为什么直接在对应的判断里调用翻转的方法会每一次点击就翻转一次,而调用橘黄色部分的方法多次点击只有第一次生效啊
两个方法都是一样来的

l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    #   获取用户当前动作的事件列表
    for event in pygame.event.get():

      if event.type == pygame.QUIT:
            sys.exit()

      if event.type == KEYDOWN:
            # print(str(event.key))
            if event.key == K_LEFT:
                speed = [-1, 0]
                turtle = l_head
            if event.key == K_RIGHT:
                speed =
                turtle = r_head
                # turtle = pygame.transform.flip(turtle, True, False)
            if event.key == K_UP:
                speed =
            if event.key == K_DOWN:
                speed =

Hoiste 发表于 2021-3-24 12:56:39

代码没有发全吧,前后代码也是很重要的。

黑与白的灰 发表于 2021-3-24 14:35:27

这是全部代码
import pygame
import sys
import os
from pygame.locals import *

#   初始化Pygame
pygame.init()

#   设置帧率
clock = pygame.time.Clock()

size = width, height = 500, 600
#   每次移动的位置
speed =
bg = (255, 255, 255)
data = os.path.dirname(os.path.realpath(__file__))
data_image = os.path.join(data, "image\优领108.png")
#   创建指定大小的窗口
screen = pygame.display.set_mode(size)
#   设置窗口标题
pygame.display.set_caption("(ノ◑ ◑)ノ(。•́︿•̀。)")

#   加载图片
turtle = pygame.image.load(data_image)
#   获取图片矩形位置
position = turtle.get_rect()

l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    #   获取用户当前动作的事件列表
    for event in pygame.event.get():

      if event.type == pygame.QUIT:
            sys.exit()

      if event.type == KEYDOWN:
            # print(str(event.key))
            if event.key == K_LEFT:
                speed = [-1, 0]
                turtle = l_head
            if event.key == K_RIGHT:
                speed =
                turtle = r_head
                # turtle = pygame.transform.flip(turtle, True, False)
            if event.key == K_UP:
                speed =
            if event.key == K_DOWN:
                speed =

    #   移动图像
    position = position.move(speed)

    if position.left < 0 or position.right > width:
      #   翻转图像
      #   需要翻转的图像, 水平翻转的Boolean值, 垂直翻转的Boolean值
      turtle = pygame.transform.flip(turtle, True, False)
      #   反向移动
      speed = -speed

    if position.top < 0 or position.bottom > height:
      speed = -speed

    #   填充背景
    screen.fill(bg)
    #   更新图像
    screen.blit(turtle, position)
    #   更新界面
    pygame.display.flip()
    #   延迟10毫秒
    # pygame.time.delay(0)
    clock.tick(40)

小伤口 发表于 2021-3-24 14:53:50

本帖最后由 小伤口 于 2021-3-24 14:56 编辑

黑与白的灰 发表于 2021-3-24 14:35
这是全部代码
import pygame
import sys


r_head = pygame.transform.flip(turtle, True, False)
这个表明r_head已经是翻转的图片
他并没有进入while循环里
也就表明r_head只是单纯的一张原来图片再翻过来的图片
而在while循环加入
turtle = pygame.transform.flip(turtle, True, False)
意思就表明每点击右键就反转一次
所以两者是有差别的
当然你也可以把
r_head = pygame.transform.flip(turtle, True, False)
加入while循环里面
也就是这样
import pygame
import sys
import os
from pygame.locals import *

#   初始化Pygame
pygame.init()

#   设置帧率
clock = pygame.time.Clock()

size = width, height = 500, 600
#   每次移动的位置
speed =
bg = (255, 255, 255)
data = os.path.dirname(os.path.realpath(__file__))
data_image = os.path.join(data, "image\优领108.png")
#   创建指定大小的窗口
screen = pygame.display.set_mode(size)
#   设置窗口标题
pygame.display.set_caption("(ノ◑ ◑)ノ(。•́︿•̀。)")

#   加载图片
turtle = pygame.image.load(data_image)
#   获取图片矩形位置
position = turtle.get_rect()

l_head = turtle


while True:
    r_head = pygame.transform.flip(turtle, True, False)
    #   获取用户当前动作的事件列表
    for event in pygame.event.get():

      if event.type == pygame.QUIT:
            sys.exit()

      if event.type == KEYDOWN:
            # print(str(event.key))
            if event.key == K_LEFT:
                speed = [-1, 0]
                turtle = l_head
            if event.key == K_RIGHT:
                speed =
                turtle = r_head
                #turtle = pygame.transform.flip(turtle, True, False)
            if event.key == K_UP:
                speed =
            if event.key == K_DOWN:
                speed =

    #   移动图像
    position = position.move(speed)

    if position.left < 0 or position.right > width:
      #   翻转图像
      #   需要翻转的图像, 水平翻转的Boolean值, 垂直翻转的Boolean值
      turtle = pygame.transform.flip(turtle, True, False)
      #   反向移动
      speed = -speed

    if position.top < 0 or position.bottom > height:
      speed = -speed

    #   填充背景
    screen.fill(bg)
    #   更新图像
    screen.blit(turtle, position)
    #   更新界面
    pygame.display.flip()
    #   延迟10毫秒
    # pygame.time.delay(0)
    clock.tick(40)


也会出现同样的问题

欢迎继续提问
有帮助的话请设置最佳吧{:10_254:}

黑与白的灰 发表于 2021-3-24 14:56:50

小伤口 发表于 2021-3-24 14:53
这个表明r_head已经是翻转的图片
他并没有进入while循环里
也就表明r_head只是单纯的一张原来图片再 ...

这么一说我就知道了,谢谢帮忙解决问题{:5_109:}

小伤口 发表于 2021-3-24 14:57:35

黑与白的灰 发表于 2021-3-24 14:56
这么一说我就知道了,谢谢帮忙解决问题

共同学习
有帮助的话请设置最佳吧{:10_254:}
页: [1]
查看完整版本: 关于pygame中,键盘事件的调用一个问题