【发布时间】:2017-06-22 15:22:34
【问题描述】:
我正在为我的 A Level 项目使用 python 和 pygame 模块(创建一个非常基本的像素化游戏 - 想想早期的口袋妖怪),我使用 event.type 函数是代码的两个谨慎部分,使用不同的键完全。第一部分在代码的主要部分中工作,但第二部分在函数中并且不显示任何输出。
我尝试在程序结束时将这两个部分放在一个不同的条件下,以使它们成为真的,但我所做的似乎没有任何效果。它目前被放入一个函数中:
#variable that causes Combat Mode, generates 'random encounter'
PlayerStep = 5
while True:#while the screen is up and the program is running
for event in pygame.event.get():
if event.type == KEYDOWN and PlayerSprite.canMove:
#actions based on which key is pressed
if event.key == K_w:#sprite moves up
PlayerSprite.moveup()
elif event.key == K_s:#sprite moves down
PlayerSprite.movedown()
elif event.key == K_a:#sprite moves right
PlayerSprite.moveright()
elif event.key == K_d:#sprite moves left - no diagonal movement
PlayerSprite.moveleft()
PlayerStep = PlayerStep - 1
pygame.event.pump()
print(KEYDOWN)
pygame.display.update()
if event.type == KEYDOWN and CombatMode() == True:
if KEYDOWN == K_w or KEYDOWN == K_a or KEYDOWN == K_s or KEYDOWN == K_d:
event.key = KEYUP #stops the WASD keys affecting the Combat Mode function
#use the number buttons to attack
if KEYDOWN == K_1:#'attack' option
ClearMsg()
TextBox("You attack!", (60, 50), 32)
MonsterHP = MonsterHP - 2
print(MonsterHP)
if KEYDOWN == K_2:#heal option
PlayerHP = PlayerHP + 10
print(PlayerHP)
if KEYDOWN == K_3:#'item's option
#add square to display list of items
BoxOption((255,250,191), (204,200,153), 150, 50, 400, 300, 4)
if KEYDOWN == K_4:#'flee' option - ends Combat Mode and returns to main screen
break
return
pygame.event.pump()
#gives Player warning when PlayerStep is low
if PlayerStep < 5 and PlayerStep != 0:
TextBox("Wait!", (255,50), 32)
pygame.event.pump()
elif PlayerStep <= 0:#causes Combat Mode when PlayerStep is 0
PlayerSprite.nomove()
Combat_Mode()
pygame.display.update()
就上下文而言,代码分为两部分:探索模式和战斗模式。探索模式是游戏的主屏幕,精灵在其中移动,战斗模式是回合制战斗系统:满足条件时调用的函数。
WASD 键仍然可以正常工作,但是当按下 1234 键并调用 Combat Mode 函数时没有任何反应。
我对使用 pygame 非常陌生,但我已经使用 python 几年了(仍然不是很好,但相当称职)。非常感谢任何帮助!
【问题讨论】:
-
不是
KEYDOWN == K_w而是even.key == K_w- 与KEYDOWN == K_a、KEYDOWN == K_s等相同。KEYDOWN和KEYUP是event.type -
如果你有
for event in pygame.event.get(),那么你就没有pygame.event.pump() -
顺便说一句:我们使用
lower_case变量、函数、实例的名称,即。player_sprite(或更短的player)player_step。而CamelCase名称仅适用于类。查看更多:PEP 8 -- Style Guide for Python Code -
@furas 它是唯一让代码首先工作的东西。我试过没有 pygame.event.pump() 的代码,没有任何变化
-
您的主要问题在于我的第一条评论-您以错误的方式使用
KEYDOWN。看你的第一部分 - 你有event.key == K_s,但在第二部分你使用KEYDOWN == K_1,但正确的是event.key == K_1