pygame.key 的问题
Problems with pygame.key
我对这段代码有疑问:
import pygame, sys
from pygame.locals import *
def main():
FPS=30
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
RED=0
GREEN=0
BLUE=0
LAST=None
pygame.key.set_repeat(10,100)
while True:
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_r:
print 'RED:',RED
RED = input('New value for RED: ')
print '='*10,'\n'
if RED>255:
RED=255
if RED<0:
RED=0
LAST='RED'
if event.key==K_g:
print 'GREEN:',GREEN
GREEN = input('New value for GREEN: ')
print '='*10,'\n'
if GREEN>255:
RED=255
if GREEN<0:
GREEN=0
LAST='GREEN'
if event.key==K_b:
print 'BLUE:',BLUE
BLUE = input('New value for BLUE: ')
print '='*10,'\n'
if BLUE>255:
BLUE=255
if BLUE<0:
BLUE=0
LAST='BLUE'
if event.key==K_p:
print RED,GREEN,BLUE
print '='*10,'\n'
if event.key==K_m:
if LAST=='RED':
RED+=1
if LAST=='GREEN':
GREEN+=1
if LAST=='BLUE':
BLUE+=1
if event.key==K_l:
if LAST=='RED':
RED-=1
if LAST=='GREEN':
GREEN-=1
if LAST=='BLUE':
BLUE-=1
if event.key==K_i:
print 'Last modified is:',LAST
print '='*10,'\n'
DISPLAYSURF.fill((RED,GREEN,BLUE))
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
对我来说只是一个玩颜色的笨工具(我知道网上有很多,但我想自己写)。
在我的 Mac 上,除了评估 event.key==K_m
的部分外,一切正常。似乎这个事件被忽略了,当我按下 m
时什么也没有发生。我做错了什么?
编辑:我会尝试重新安装 python 和 pygame,我会 post 会发生什么...
更新:从 K_m
更改为 K_h
,一切正常。然后我的键盘上的 m
键或 pygame 键有问题。我会再尝试一些,如果我找不到任何新的东西,就关闭这个问题。
坏消息:重新安装了 Python 2.7 32 位(64 位与 pygame 不兼容)并重新安装了 pygame 1.9.1。结果:什么都没有改变。 K_m
无论如何都不起作用。我认为我的电脑有问题。感谢那些花了一些时间思考解决方案的人,我希望我能找到一个......
再次感谢,祝大家工作愉快!
今天晚上我尝试使用这个代码
import pygame, sys, os
import numpy as np
from pygame.locals import *
FPS=30
WHITE = (255,255,255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0,255, 0)
BLUE = ( 0, 0,255)
def main():
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
while True:
for event in pygame.event.get():
if event.type==KEYDOWN or event.type==KEYUP:
print event
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN and event.key==K_g:
DISPLAYSURF.fill(GREEN)
if event.type==KEYDOWN and event.key==K_r:
DISPLAYSURF.fill(RED)
if event.type==KEYDOWN and event.key==K_b:
DISPLAYSURF.fill(BLUE)
if event.type==KEYDOWN and event.key==K_m:
DISPLAYSURF.fill(WHITE)
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
m 键不起作用等...
按 m 只会 return
<Event(2-KeyDown {'scancode': 46, 'key': 44, 'unicode': u'm', 'mod': 0})>
<Event(3-KeyUp {'scancode': 46, 'key': 44, 'mod': 0})>
但没有改变任何东西。
天知道为什么我决定将 event.key==K_m
更改为 event.unicode==u'm'
并且代码成功了!我真的很惊讶,我将 event.unicode==u'm'
更改为 event.key==44
并且成功了!
我真的不明白为什么会这样,但它确实有效,这对我来说很重要。我希望这个解决方案可以帮助其他有类似错误的人!
我现在到处都在使用event.unicode,这比找到每个字符的键号更容易。
工作代码
import pygame, sys, os
import numpy as np
from pygame.locals import *
FPS=30
WHITE = (255,255,255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0,255, 0)
BLUE = ( 0, 0,255)
def main():
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
while True:
for event in pygame.event.get():
if event.type==KEYDOWN or event.type==KEYUP:
print event
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN and event.key==K_g:
DISPLAYSURF.fill(GREEN)
if event.type==KEYDOWN and event.key==K_r:
DISPLAYSURF.fill(RED)
if event.type==KEYDOWN and event.key==K_b:
DISPLAYSURF.fill(BLUE)
if event.type==KEYDOWN and event.unicode==u'm':
DISPLAYSURF.fill(WHITE)
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
或
import pygame, sys, os
import numpy as np
from pygame.locals import *
FPS=30
WHITE = (255,255,255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0,255, 0)
BLUE = ( 0, 0,255)
def main():
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
while True:
for event in pygame.event.get():
if event.type==KEYDOWN or event.type==KEYUP:
print event
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN and event.key==K_g:
DISPLAYSURF.fill(GREEN)
if event.type==KEYDOWN and event.key==K_r:
DISPLAYSURF.fill(RED)
if event.type==KEYDOWN and event.key==K_b:
DISPLAYSURF.fill(BLUE)
if event.type==KEYDOWN and event.key==44:
DISPLAYSURF.fill(WHITE)
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
我对这段代码有疑问:
import pygame, sys
from pygame.locals import *
def main():
FPS=30
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
RED=0
GREEN=0
BLUE=0
LAST=None
pygame.key.set_repeat(10,100)
while True:
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_r:
print 'RED:',RED
RED = input('New value for RED: ')
print '='*10,'\n'
if RED>255:
RED=255
if RED<0:
RED=0
LAST='RED'
if event.key==K_g:
print 'GREEN:',GREEN
GREEN = input('New value for GREEN: ')
print '='*10,'\n'
if GREEN>255:
RED=255
if GREEN<0:
GREEN=0
LAST='GREEN'
if event.key==K_b:
print 'BLUE:',BLUE
BLUE = input('New value for BLUE: ')
print '='*10,'\n'
if BLUE>255:
BLUE=255
if BLUE<0:
BLUE=0
LAST='BLUE'
if event.key==K_p:
print RED,GREEN,BLUE
print '='*10,'\n'
if event.key==K_m:
if LAST=='RED':
RED+=1
if LAST=='GREEN':
GREEN+=1
if LAST=='BLUE':
BLUE+=1
if event.key==K_l:
if LAST=='RED':
RED-=1
if LAST=='GREEN':
GREEN-=1
if LAST=='BLUE':
BLUE-=1
if event.key==K_i:
print 'Last modified is:',LAST
print '='*10,'\n'
DISPLAYSURF.fill((RED,GREEN,BLUE))
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
对我来说只是一个玩颜色的笨工具(我知道网上有很多,但我想自己写)。
在我的 Mac 上,除了评估 event.key==K_m
的部分外,一切正常。似乎这个事件被忽略了,当我按下 m
时什么也没有发生。我做错了什么?
编辑:我会尝试重新安装 python 和 pygame,我会 post 会发生什么...
更新:从 K_m
更改为 K_h
,一切正常。然后我的键盘上的 m
键或 pygame 键有问题。我会再尝试一些,如果我找不到任何新的东西,就关闭这个问题。
坏消息:重新安装了 Python 2.7 32 位(64 位与 pygame 不兼容)并重新安装了 pygame 1.9.1。结果:什么都没有改变。 K_m
无论如何都不起作用。我认为我的电脑有问题。感谢那些花了一些时间思考解决方案的人,我希望我能找到一个......
再次感谢,祝大家工作愉快!
今天晚上我尝试使用这个代码
import pygame, sys, os
import numpy as np
from pygame.locals import *
FPS=30
WHITE = (255,255,255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0,255, 0)
BLUE = ( 0, 0,255)
def main():
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
while True:
for event in pygame.event.get():
if event.type==KEYDOWN or event.type==KEYUP:
print event
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN and event.key==K_g:
DISPLAYSURF.fill(GREEN)
if event.type==KEYDOWN and event.key==K_r:
DISPLAYSURF.fill(RED)
if event.type==KEYDOWN and event.key==K_b:
DISPLAYSURF.fill(BLUE)
if event.type==KEYDOWN and event.key==K_m:
DISPLAYSURF.fill(WHITE)
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
m 键不起作用等... 按 m 只会 return
<Event(2-KeyDown {'scancode': 46, 'key': 44, 'unicode': u'm', 'mod': 0})>
<Event(3-KeyUp {'scancode': 46, 'key': 44, 'mod': 0})>
但没有改变任何东西。
天知道为什么我决定将 event.key==K_m
更改为 event.unicode==u'm'
并且代码成功了!我真的很惊讶,我将 event.unicode==u'm'
更改为 event.key==44
并且成功了!
我真的不明白为什么会这样,但它确实有效,这对我来说很重要。我希望这个解决方案可以帮助其他有类似错误的人!
我现在到处都在使用event.unicode,这比找到每个字符的键号更容易。
工作代码
import pygame, sys, os
import numpy as np
from pygame.locals import *
FPS=30
WHITE = (255,255,255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0,255, 0)
BLUE = ( 0, 0,255)
def main():
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
while True:
for event in pygame.event.get():
if event.type==KEYDOWN or event.type==KEYUP:
print event
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN and event.key==K_g:
DISPLAYSURF.fill(GREEN)
if event.type==KEYDOWN and event.key==K_r:
DISPLAYSURF.fill(RED)
if event.type==KEYDOWN and event.key==K_b:
DISPLAYSURF.fill(BLUE)
if event.type==KEYDOWN and event.unicode==u'm':
DISPLAYSURF.fill(WHITE)
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()
或
import pygame, sys, os
import numpy as np
from pygame.locals import *
FPS=30
WHITE = (255,255,255)
BLACK = ( 0, 0, 0)
RED = (255, 0, 0)
GREEN = ( 0,255, 0)
BLUE = ( 0, 0,255)
def main():
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((300,300))
while True:
for event in pygame.event.get():
if event.type==KEYDOWN or event.type==KEYUP:
print event
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN and event.key==K_g:
DISPLAYSURF.fill(GREEN)
if event.type==KEYDOWN and event.key==K_r:
DISPLAYSURF.fill(RED)
if event.type==KEYDOWN and event.key==K_b:
DISPLAYSURF.fill(BLUE)
if event.type==KEYDOWN and event.key==44:
DISPLAYSURF.fill(WHITE)
pygame.display.flip()
FPSCLOCK.tick(FPS)
main()