你如何在这个太空入侵者游戏中出现精灵?

时间:2015-12-01 22:35:15

标签: python pygame sprite pycharm

我正在制作一个太空入侵者游戏,我创建的精灵并没有出现在我运行程序时发生的唯一事情是解释器说"处理完成时出现错误代码0"另外我使用的是pycharm IDE。你能帮忙解决这个问题吗?。

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

1 个答案:

答案 0 :(得分:0)

你需要无限循环(称为&#34; mainloop&#34;)来处理事件,移动/更新对象,在屏幕上绘制对象。

您可以添加到游戏类

def run(self):

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

然后使用它

g = Game()
g.run()

Game().run()

-

BTW:"error code 0"表示&#34;程序完成没有问题&#34;。