我发现我只能有一种键输入方法。下面我有两种方法(movementsprite和movementspritevert),我发现我只能有一个工作。如果我同时启动两个,第一个运行,第二个什么也不做。有办法吗?我做错什么了吗?在
----移动文件---
import pygame
import os, sys
from itertools import *
from oryxsprites import *
from oryxdisplay import *
spritex = 320
spritey = 320
screen = pygame.display.set_mode((640, 640))
def movementsprite():
global spritex
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
if spritex == 576:
spritex += 0
else:
spritex += 32
elif event.key == pygame.K_LEFT:
if spritex == 32:
spritex -= 0
else:
spritex -= 32
return spritex
def movementspritevert():
global spritey
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
if spritey == 576:
spritey += 0
else:
spritey += 32
elif event.key == pygame.K_UP:
if spritey == 32:
spritey -= 0
else:
spritey -= 32
return spritey
-----主文件------]
^{pr2}$------显示文件----
def backgroundmain():
spritex = movementsprite()
spritey = movementspritevert()
backdrop = pygame.Rect(0, 0, 640, 640)
screen.fill((50,50,50))
playingfeildwidth = (32, 608)
playingfeildheight = (32, 608)
screen.blit(warrior1, (spritex, spritey))
-主文件----
while running:
backgroundmain()
pygame.display.set_caption('OryxGame')
#pygame.display.set_icon(grasstile)
movementsprite(events)
movementspritevert(events)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
-----显示文件---
def backgroundmain():
events = pygame.event.get()
spritex = movementsprite(events)
spritey = movementspritevert(events)
backdrop = pygame.Rect(0, 0, 640, 640)
screen.fill((50,50,50))
playingfeildwidth = (32, 608)
playingfeildheight = (32, 608)
-----密钥输入文件----------
spritex = 320
spritey = 320
screen = pygame.display.set_mode((640, 640))
def movementsprite(events):
global spritex
keys = pygame.key.get_pressed()
for event in events:
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
if spritex == 576:
spritex += 0
else:
spritex += 32
elif event.key == pygame.K_LEFT:
if spritex == 32:
spritex -= 0
else:
spritex -= 32
return spritex
def movementspritevert(events):
global spritey
keys = pygame.key.get_pressed()
for event in events:
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
if spritey == 576:
spritey += 0
else:
spritey += 32
elif event.key == pygame.K_UP:
if spritey == 32:
spritey -= 0
else:
spritey -= 32
return spritey
---错误---
Traceback (most recent call last):
File "C:\Users\Eric\Dropbox\oryxgame\oryxgame.py", line 12, in <module>
backgroundmain()
File "C:\Users\Eric\Dropbox\oryxgame\oryxdisplay.py", line 11, in backgroundmain
spritey = movementspritevert(events)
TypeError: movementspritevert() takes no arguments (1 given)
----Full Code---
问题是事件.获取()从队列中删除事件(请参见docs)。所以,当你的第二个函数使用事件.获取(),队列中不存在任何事件,除非它们能够在两次调用之间的极短间隔内滑入。在
{{{1>在第二个函数中调用它,然后把它放在第二个函数中。在
解决这个问题的一个方法是
然后在
events
上使用for循环。在编辑:阐明如何实施
很可能您的代码抛出了一个错误,因为在初始化pygame之前调用了
^{pr2}$pygame.event.get()
。你可以用类似的东西然后,从以下位置更改移动功能:
为此:
关键是你每次使用事件.获取(),它将删除事件,因此您的下一个调用将不会获得相同的事件。基本上,如果你想让你所有的移动功能都使用一个按键,那么把事件保存为一个变量,并将其传递给函数。在
相关问题 更多 >
编程相关推荐