如何让精灵出现在这个 space 入侵者游戏中?

How do you get sprites to appear within this space invader game?

我目前正在制作一个 space 入侵者游戏,当我 运行 程序是解释器说 "processed finished with error code 0" 时,我创建的精灵没有出现另外我用的是pycharmIDE。你能帮忙解决这个问题吗?

import pygame
import sys
from pygame.locals import *


class Launcher(pygame.sprite.Sprite):
def __init__(self):
    super().__init__()
    self.image = pygame.image.load('LaserBase.png')
    self.rect = self.image.get_rect()

    self.rocketXPos = 512

    self.rect.x = self.rocketXPos
    self.rect.y = 650

def update(self, gametime):
    keys = pygame.key.get_pressed()
    if keys[pygame.K_RIGHT]:
        self.rocketXPos += 4
    elif keys[pygame.K_LEFT]:
        self.rocketXPos -= 4

    self.rect.x = self.rocketXPos
    self.rect.y = 650


class Invader(pygame.sprite.Sprite):

def __init__(self):
    super().__init__()
    self.image = pygame.image.load('inv12.png')
    self.rect = self.image.get_rect()
    self.__alienPosX = 0
    self.__alienPosY = 0
    self.__listPos = 0
    self.alienSpeed = 4
    self.alienDirection = -1

def setPosX(self, x):
    self.__alienPosX = x
    self.rect.x = x

def setPosY(self, y):
    self.__alienPosY = y
    self.rect.y = y

def setListPos(self, pos):
    self.__listPos = pos

def update(self, gametime):
    self.__alienPosX += self.alienSpeed * self.alienDirection

    if self.__alienPosX < 100 + (self.__listPos * 32):
        self.alienDirection = +1
        self.__alienPosY += 4
    elif self.__alienPosX > 924 - ((10 - self.__listPos) * 32) :
        self.alienDirection = -1
        self.__alienPosY += 4

    self.rect.x = self.__alienPosX
    self.rect.y = self.__alienPosY


class Missile(pygame.sprite.Sprite):
    def __init__(self, xInitialPos, yInitialPos):
    super().__init__()
    self.image = pygame.image.load('bullet.png')
    self.rect = self.image.get_rect()

    self.__missilePosY = yInitialPos

    self.rect.x = xInitialPos
    self.rect.y = self.__missilePosY

def update(self, gametime):
    self.__missilePosY -= 4
    self.rect.y = self.__missilePosY


class Game:
def __init__(self):
    pygame.init()
    pygame.key.set_repeat(1, 1)

    self.width = 1024
    self.height = 768
    self.screen = pygame.display.set_mode((self.width, self.height))

    self.caption = "Space Invaders!!"
    pygame.display.set_caption(self.caption)

    self.framerate = 60

    self.clock = pygame.time.Clock()
    self.starfieldImg = pygame.image.load('Starfield1024x768.png')

    self.allsprites = pygame.sprite.Group()
    self.launcher = Launcher()
    self.allsprites.add(self.launcher)
    self.aliens = pygame.sprite.Group()
    self.missileFired = None

    xPos = 512
    for i in range(11):
        invader = Invader()
        invader.setPosX(xPos)
        invader.setPosY(100)
        self.allsprites.add(invader)
        self.aliens.add(invader)
        xPos += 32

def update(self, gametime):
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                self.missileFired = Missile(self.launcher.rocketXPos, 650)
                self.allsprites.add(self.missileFired)

    self.allsprites.update(gametime)

def draw(self):
    self.screen.blit(self.starfieldImg, (0, 0))
    self.allsprites.draw(self.screen)
    pygame.display.flip()

您需要无限循环(称为 "mainloop")来处理事件、move/update 对象、在屏幕上绘制对象。

您可以添加到游戏中 class

def run(self):

    while True:
        self.update()
        self.draw()
        self.clock.tick(self.framerate)

然后使用它

g = Game()
g.run()

Game().run()

--

顺便说一句:"error code 0" 表示 "program finished without problem"。