python和pygame图像移动器

2024-09-27 04:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我的代码如下,现在我是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()

Tags: 图像eventifmaindisplaywidthsurfacepygame
2条回答

每次迭代while循环时,都会创建一个新的playerbj,这样就不会看到它移动(因为它每次都将其“y”值设置为半个高度)。将playerObj定义移出while循环。在

必须在进入while循环之前创建playerObj,然后每次只将其绘制到DISPLAY_SURFACE。另外,增加字典的键y也没有帮助,必须改为修改rect。微创解决方案是:

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))

    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']) )

    while True:
        DISPLAY_SURFACE.fill(COLOR)
        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['rect'].y -= movement
            print("moving up")

        else:
            print('stopped')

        pygame.display.update()
        FPS_CLOCK.tick(FPS)

if __name__ == '__main__':
    main()

很管用,我自己试过了。但是你应该重构你的代码,不需要在你的字典中携带初始的x,y等值。在

编辑 在所有四个方向移动时,这将是:

^{pr2}$

相关问题 更多 >

    热门问题