我做了一些补充和修改,使您的代码工作。 在每个帧(循环迭代)中,您必须清除屏幕并重新绘制桨。这是为了确保在按下左/右箭头时用新坐标重新绘制桨。 请注意,当按下LEFT时,我更改了p1Paddle.left而不是p1Paddle.right。
import pygame, sys
from pygame import *
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Paddle Movement')
PADDLE_WIDTH = 50
PADDLE_HEIGHT = 10
paddleSpeedX = 0
p1Paddle = pygame.Rect(10, 430, PADDLE_WIDTH, PADDLE_HEIGHT)
PADDLE_COLOR = pygame.color.Color("red")
while True:
# clear screen with black color
screen.fill((0,0,0))
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_LEFT:
p1Paddle.left = p1Paddle.left + paddleSpeedX - 10
if event.key == K_RIGHT:
p1Paddle.left = p1Paddle.left + paddleSpeedX + 10
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
# draw the paddle
screen.fill(PADDLE_COLOR, p1Paddle);
pygame.display.update()
更好的解决方案将是一个通知下面
import pygame, sys
from pygame import *
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Paddle Movement')
PADDLE_WIDTH = 50
PADDLE_HEIGHT = 10
paddleSpeedX = 0
p1Paddle = pygame.Rect(10, 430, PADDLE_WIDTH, PADDLE_HEIGHT)
PADDLE_COLOR = pygame.color.Color("red")
# clock object that will be used to make the game
# have the same speed on all machines regardless
# of the actual machine speed.
clock = pygame.time.Clock()
while True:
# limit the demo to 50 frames per second
clock.tick(50);
# clear screen with black color
screen.fill((0,0,0))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
keys = pygame.key.get_pressed()
if keys[K_LEFT]:
p1Paddle.left = p1Paddle.left + paddleSpeedX - 5
if keys[K_RIGHT]:
p1Paddle.left = p1Paddle.left + paddleSpeedX + 5
# draw the paddle
screen.fill(PADDLE_COLOR, p1Paddle);
pygame.display.update()
,我检查使用pygame.key.get_pressed()
的按键。当我们检查关键状态并且不等待事件发生时,它允许平滑移动。 我添加了一个时钟对象来限制帧速率为50 FPS(每秒帧数)。
请尝试这两种方法。
你的'if event.type == QUIT'部分似乎对齐错了。它不应该与'if event.type == KEYDOWN'处于同一级别吗? – 2012-07-06 15:34:25
我已发布解决您的问题的完整工作代码。看到我的答案。 – 2012-07-06 15:58:18
对于pygame,您可以通过两种方法获得输入** [1]键事件**或** [2]键轮询** - 您正在使用第一种(事件)方法。为此,你需要第二种方法。有关代码,请参阅http://stackoverflow.com/a/11365418/341744。 - 如果这是一个FPS,你想要投票WASD运动,并为mousedown事件。 – ninMonkey 2012-07-07 17:59:06