我做了一些補充和修改,使您的代碼工作。 在每個幀(循環迭代)中,您必須清除屏幕並重新繪製槳。這是爲了確保在按下左/右箭頭時用新座標重新繪製槳。 請注意,當按下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