好的,我的代码如下,现在我是pygame的新手,正在尝试如何在屏幕上移动图像。根据我对pygame的了解,下面的代码应该将图像向上移动(目前唯一可能的移动)。但是当我向上推时,图像就不动了。Python意识到我在向上推是因为它在系统托盘中打印,但是没有移动,有人能帮忙吗?在
import pygame, sys
from pygame.locals import *
FPS = 30
WIN_WIDTH = 800
WIN_HEIGHT = 600
HALF_WIDTH = int(WIN_WIDTH / 2)
HALF_HEIGHT = int(WIN_HEIGHT / 2)
COLOR = (255, 0, 255)
IMAGE = pygame.image.load('squirrel.png')
STARTSIZE = 25
LEFT = 'left'
def main():
pygame.init()
FPS_CLOCK = pygame.time.Clock()
movement = 1
moveUp = False
DISPLAY_SURFACE = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
while True:
DISPLAY_SURFACE.fill(COLOR)
playerObj = {'surface': pygame.transform.scale(IMAGE, (STARTSIZE, STARTSIZE)),
'facing': LEFT,
'size': STARTSIZE,
'x': HALF_WIDTH,
'y': HALF_HEIGHT}
playerObj['rect'] = pygame.Rect( (playerObj['x'], playerObj['y'], playerObj['size'], playerObj['size']) )
DISPLAY_SURFACE.blit(playerObj['surface'], playerObj['rect'])
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_UP:
moveUp = True
if event.type == KEYUP:
if event.key == K_UP:
moveUp = False
elif event.type == QUIT:
pygame.quit()
sys.exit()
if moveUp:
playerObj['y'] += movement
print("moving up")
else:
print('stopped')
pygame.display.update()
FPS_CLOCK.tick(FPS)
if __name__ == '__main__':
main()
每次迭代while循环时,都会创建一个新的playerbj,这样就不会看到它移动(因为它每次都将其“y”值设置为半个高度)。将playerObj定义移出while循环。在
必须在进入while循环之前创建playerObj,然后每次只将其绘制到
DISPLAY_SURFACE
。另外,增加字典的键y
也没有帮助,必须改为修改rect
。微创解决方案是:很管用,我自己试过了。但是你应该重构你的代码,不需要在你的字典中携带初始的x,y等值。在
编辑 在所有四个方向移动时,这将是:
^{pr2}$相关问题 更多 >
编程相关推荐