我的 Pygame 精灵不会出现。我的代码有什么问题?

My Pygame sprite won't appear. What's wrong with my code?

我一直在尝试使用 Pygame 制作一个小游戏。这是我第一次使用 Pygame 并且我已经看了很多教程,但是我的精灵仍然不会出现。它只显示一条黑线。我该如何解决?

Xcord = 0
grey = (192,192,192)

import pygame, random, time

pygame.init()

import time

Color_line=(0,0,0)
screen = pygame.display.set_mode([1000, 500])
all_sprites_list = pygame.sprite.Group()

import pygame

grey = (192,192,192)
playerWidth = 50
playerHeight = 50
all_sprites_list = pygame.sprite.Group()

class Player(pygame.sprite.Sprite):
    def __init__(self, grey, playerWidth, playerHeight):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface([50, 50])
        self.image.fill(grey)
        self.image.set_colorkey(grey)
        pygame.draw.rect(self.image, grey, [0, 0, playerWidth, playerHeight])
        self.rect = self.image.get_rect()

player = Player(grey, 50, 50)
player.rect.x = Xcord
player.rect.y = 400

def update(Player):
        pygame.sprite.Sprite.update(Player)
        player.rect.x = Xcord
        player.rect.y = 400

all_sprites_list.add(player)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((255, 255, 255))

    all_sprites_list.update()

    pygame.draw.line(screen,Color_line,(0,500),(1000,500), 75)

    all_sprites_list.draw(screen)

    pygame.display.flip()

    Xcord =+ 50
    if Xcord == 400:
        Xcord == 0

pygame.quit()

我正在尝试制作类似于 Google Chrome 的 no Wi-Fi dinosaur game

你有一些错误。

首先:fill sprite 与 GRAY 并且你在 GRAY 上使用 set_key,所以 sprite 是透明的而且根本看不到精灵。

其次: 代码 运行 非常快,精灵离开 window 并且你看不到精灵。

第三: 在代码 if Xcord == 400: Xcord == 0 中,你需要 = 0 而不是 == 0 - 这就是精灵离开 window 永远不会回到位置 (0, 400)


另一个问题是代码中的大混乱 - 你甚至 运行 一些代码两次。


我的版本有很多变化。

# PEP8: all imports at start.
# PEP8: every module on a separate line
import pygame
import random
import time

# --- constants ---  # PEP8: `UPPER_CAS_NAMES`

GRAY = (192, 192, 192)
RED  = (255,   0,   0)

# --- classes ---  # PEP8: `CamelCaseName`

class Player(pygame.sprite.Sprite):

    def __init__(self, color, x, y, width, weight):  # you don't need prefix `player` in variables in class `Player`
        super().__init__()   # Python 3 method for running a function from the original class
        self.color = color

        self.image = pygame.Surface([width, weight])
        self.image.fill(color)
        #self.image.set_colorkey(color)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

    def update(self):
        self.rect.x += 5

        if self.rect.x >= 400:
            self.rect.x = 0

# --- main ---

color_line = (0,0,0)  # PEP8: spaces around `=`, space after `,`

pygame.init()
screen = pygame.display.set_mode([1000, 500])

all_sprites_list = pygame.sprite.Group()

player_width  = 50
player_weight = 50

player = Player(RED, 50, 400, 50, 50)  # color, x, y, width, height
all_sprites_list.add(player)

clock = pygame.time.Clock()

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # - only updates -

    all_sprites_list.update()

    # - only draws -

    screen.fill((255, 255, 255))

    pygame.draw.line(screen, color_line, (0, 500), (1000, 500), 75)

    all_sprites_list.draw(screen)

    pygame.display.flip()

    clock.tick(30)  # Slow down to 30 FPS (frames per seconds)

pygame.quit()

PEP 8 -- Style Guide for Python Code