python - 我的 pygame 角色在我移动时会留下痕迹

标签 python pygame

<分区>

我一直在尝试用 Python 制作游戏,但当我移动我的角色时,它会留下痕迹。我知道它并没有显示出那么多,但如果你靠近你就可以看到踪迹,这真的让我很困扰。

Screenshot

这是我的代码:

import pygame
import os
from pygame import mixer

pygame.init()
mixer.init()

width = 800
height = 600

black = (0,0,0)
white = (255,255,255)

ship_width = 56
ship_height = 64

disp = pygame.display.set_mode((width,height))

pygame.display.set_caption("space_game")

clock = pygame.time.Clock()

background = pygame.image.load(os.path.join("Backgrounds", "Space.png"))

Ship00 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship00.png"))
Ship01 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship01.png"))
Ship02 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship02.png"))
Ship03 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship03.png"))
Ship04 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship04.png"))
Ship05 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship05.png"))
Ship06 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship06.png"))
Ship07 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship07.png"))
Ship08 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship08.png"))
Ship09 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship09.png"))
Ship10 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship10.png"))
Ship11 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship11.png"))
Ship12 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship12.png"))
Ship13 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship13.png"))
Ship14 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship14.png"))
Ship15 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship15.png"))
Ship16 = pygame.image.load(os.path.join("Images", "Animations", "Ship 
Animation", "Ship16.png"))

images = [Ship00, Ship01, Ship02, Ship03, Ship04, Ship05, Ship06, Ship07, 
Ship08, Ship09, Ship10, Ship11, Ship12, Ship13, Ship14, Ship15, Ship16]

mixer.music.load(os.path.join("Music", "space_song.wav"))
mixer.music.play()

def gameLoop():
    x = (width * 0.45)
    y = (height * 0.8)

    x_ch = 0
    y_ch = 0

    x_bg = 0

    index = 0

    gameExit = False

    while not gameExit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True

            if event.type == pygame.KEYDOWN:
                if event.key == ord("a"):
                    x_ch = -5

                elif event.key == ord("d"):
                    x_ch = 5

                elif event.key == ord("w"):
                    y_ch = -5

                elif event.key == ord("s"):
                    y_ch = 5

            if event.type == pygame.KEYUP:
                if event.key == ord("a") or event.key == ord("d"):
                    x_ch = 0

                if event.key == ord("w") or event.key == ord("s"):
                    y_ch = 0

        x += x_ch
        y += y_ch

        if x > width - ship_width or x < 0:
            x_ch = 0

        if y > height - ship_height or y < 0:
            y_ch = 0

        x_loop = x_bg % background.get_rect().height
        disp.blit(background, (0, x_loop - background.get_rect().height))

        if x_loop < height:
            disp.blit(background, (0, x_loop))

        x_bg += 5

        index += 1
        index %= len(images)
        current_image = images[index]
        disp.blit(current_image, (x,y))

        pygame.display.update()

        clock.tick(60)

gameLoop()
pygame.quit()
quit()

我该如何解决这个问题? (我知道轨迹几乎是看不见的,但我希望我的游戏表现出色)我有一个循环向下移动的背景,为什么轨迹不随之移动?

最佳答案

在翻转显示之前,您需要对背景进行 blit 处理。这将“删除”踪迹。然后绘制当前图像并翻转显示。

    disp.blit(background, (0,0)) # or whatever location you need
    disp.blit(current_image, (x,y))
    pygame.display.flip()

关于python - 我的 pygame 角色在我移动时会留下痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685256/

相关文章:

python - 使用循环创建同一图像的多个实例,我可以独立移动图像的每个实例吗?

python - 如何确定我制作的随机 2D 地牢中正确的墙 block ?

python-3.x - python - add() 不会将类的实例添加到组中,因为它不可迭代,但它正在迭代

python - 删除 gtk.button 的边框

python - 使用 matplotlib 在对数刻度上绘制连接线到零坐标点?

python - set_param SimulationCommand 启动时出错 - "memory allocation failed or you have no X connection"

python - 音乐Y或音乐N

python - 访问Python对象指针数据

python - SQLAlchemy,清除数据库内容但不删除架构

python - 需要在 Pygame 中的表面上进行 blit 透明度