【问题标题】:Pygame creating multiple objects instead of moving only onePygame 创建多个对象而不是只移动一个
【发布时间】:2016-12-29 23:50:57
【问题描述】:

我正在尝试使用键盘控制的方法在 Pygame 中的屏幕上移动单个图像,但它似乎是在这些位置创建副本而不是移动原始图像。为什么会发生这种情况,因为图像是在进入主循环之前创建的?

这是我的代码:

import pygame, sys
from pygame.locals import *
pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()



DISPLAYSURF = pygame.display.set_mode((600, 500), 0, 32)
pygame.display.set_caption('Animation')

posx = 10
posy = 10

class Hero():
    def __init__(self):
        self.x = posx
        self.y = posy

    def appearance(self):
        return pygame.image.load('C:\\Users\\admin\\Desktop\\right.png')

    def move_right(self):
        self.x += 25
        return self.x

    def move_left(self):
        self.x -= 25
        return self.x

    def move_up(self):
        self.y -= 25
        return self.y

    def move_down(self):
        self.y += 25
        return self.y

new_hero = Hero() #create a Hero
item = new_hero.appearance() #create one reference 



while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:

             if event.key == pygame.K_LEFT:
                posx = new_hero.move_left()

             elif event.key == pygame.K_RIGHT:
                posx = new_hero.move_right()

             elif event.key == pygame.K_UP:
                posy = new_hero.move_up()

             elif event.key == pygame.K_DOWN:
                posy = new_hero.move_down()

    DISPLAYSURF.blit(item, (posx, posy)) 



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

【问题讨论】:

  • 在绘制新元素之前必须先清屏。 IE。填充黑色 DISPLAYSURF.fill( (0,0,0) )blit 一些背景,这将删除 DISPLAYSURF 上的所有内容
  • simple template 组织代码。

标签: python class methods pygame


【解决方案1】:

您忘记输入删除所有过去图像的代码。

这是一个 pygame 项目的基本布局。您应该始终(如果您没有背景图片)在更新后用白色填充屏幕。

white = 255, 255, 255
while True:
    DISPLAYSURF.fill(white)
    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             pygame.quit()
             quit()
    pygame.display.update()

【讨论】:

    猜你喜欢
    • 2022-10-02
    • 2013-07-07
    • 2021-09-24
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多