[英]Pygame in python
My game was working before I added lines 7 and 8. what happened in the game was the red sprites that fall down the screen would hit the main character sprite which is green and the game would stop just as I need it to.在我添加第 7 行和第 8 行之前,我的游戏正在运行。游戏中发生的事情是从屏幕上掉下来的红色精灵会撞到绿色的主角精灵,游戏会在我需要的时候停止。
import pygame
import random
from os import path
img_dir = path.join(path.dirname(__file__),'PNG')
background = pygame.image.load(path.join(img_dir,'Space-Background.png')).convert()
background_rect = background.get_rect()
WIDTH = 480
HEIGHT = 600
FPS = 60
WHITE = (255,255,255)
BLACK = (0,0,0)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50,40))
self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH/2
self.rect.bottom = HEIGHT-10
self.speedx = 0
def update(self):
self.speedx = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.speedx = -5
if keystate[pygame.K_RIGHT]:
self.speedx = 5
self.rect.x += self.speedx
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
def shoot(self):
bullet = Bullet(self.rect.centrex,self.rect.top)
all_sprites.add(bullet)
bullets.add(bullet)
class Mob(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((30,40))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.x = random.randrange(0, WIDTH - self.rect.width)
self.rect.y = random.randrange(-100,-40)
self.speedy = random.randrange(1,8)
def update(self):
self.rect.y += self.speedy
if self.rect.top > HEIGHT +10:
self.rect.x = random.randrange(0, WIDTH - self.rect.width)
self.rect.y = random.randrange(-100,-40)
self.speedy = random.randrange(1,8)
class Bullet(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((10,20))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.bottom = y
self.rect.centrex = x
self.speedy = -10
def update(self):
self.rect.y += self.speedy
if self.rect.bottom < 0:
self.kill()
# player_img = pygame.image.load(path.join(img_dir,"spaceShips_003.png")).convert()
# bullet_img = pygame.image.load(path.join(img_dir,"spaceMissile_006.png")).convert()
# mob_img = pygame.image.load(path.join(img_dir,"SpaceMeteor_004.png")).convert()
all_sprites = pygame.sprite.Group()
mobs = pygame.sprite.Group()
bullets = pygame.sprite.Group()
player = Player()
for i in range(8):
m = Mob()
all_sprites.add(m)
mobs.add(m)
all_sprites.add(player)
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
player.shoot()
all_sprites.update()
hits = pygame.sprite.groupcollide(mobs,bullets,True,True)
for hit in hits:
m = Mob()
all_sprites.add(m)
hits = pygame.sprite.spritecollide(player,mobs,False)
if hits:
running = False
screen.fill(BLACK)
# screen.split(background.background_rect)
all_sprites.draw(screen)
pygame.display.flip()
pygame.quit()
After I added the two lines for the images there was an error message.在我为图像添加两行之后,出现了一条错误消息。 I am not sure what happened and I need some help fixing it.我不确定发生了什么,我需要一些帮助来修复它。
>>> %Run trial.py
pygame 2.1.2 (SDL 2.0.18, Python 3.7.9)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "C:\Users\Mish Mash\Documents\School File\trial.py", line 7, in <module>
background = pygame.image.load(path.join(img_dir,'Space-Background.png')).convert()
pygame.error: cannot convert without pygame.display initialized
The meaning of the following error: pygame.error: cannot convert without pygame.display initialized
is that you are trying to use a method of pygame.display
(the convert
method) without initializing pygame
first. The meaning of the following error: pygame.error: cannot convert without pygame.display initialized
is that you are trying to use a method of pygame.display
(the convert
method) without initializing pygame
first. To fix this, simply move pygame.init()
to below the import statements.要解决此问题,只需将pygame.init()
移至导入语句下方。
import pygame
import random
from os import path
pygame.init()
pygame.mixer.init()
img_dir = path.join(path.dirname(__file__), 'PNG')
background = pygame.image.load(path.join(img_dir, 'Space-Background.png')).convert()
background_rect = background.get_rect()
WIDTH = 480
HEIGHT = 600
FPS = 60
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 40))
self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH / 2
self.rect.bottom = HEIGHT - 10
self.speedx = 0
def update(self):
self.speedx = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.speedx = -5
if keystate[pygame.K_RIGHT]:
self.speedx = 5
self.rect.x += self.speedx
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
def shoot(self):
bullet = Bullet(self.rect.centrex, self.rect.top)
all_sprites.add(bullet)
bullets.add(bullet)
class Mob(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((30, 40))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.x = random.randrange(0, WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 8)
def update(self):
self.rect.y += self.speedy
if self.rect.top > HEIGHT + 10:
self.rect.x = random.randrange(0, WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 8)
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((10, 20))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.rect.bottom = y
self.rect.centrex = x
self.speedy = -10
def update(self):
self.rect.y += self.speedy
if self.rect.bottom < 0:
self.kill()
# player_img = pygame.image.load(path.join(img_dir,"spaceShips_003.png")).convert()
# bullet_img = pygame.image.load(path.join(img_dir,"spaceMissile_006.png")).convert()
# mob_img = pygame.image.load(path.join(img_dir,"SpaceMeteor_004.png")).convert()
all_sprites = pygame.sprite.Group()
mobs = pygame.sprite.Group()
bullets = pygame.sprite.Group()
player = Player()
for i in range(8):
m = Mob()
all_sprites.add(m)
mobs.add(m)
all_sprites.add(player)
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
player.shoot()
all_sprites.update()
hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
for hit in hits:
m = Mob()
all_sprites.add(m)
hits = pygame.sprite.spritecollide(player, mobs, False)
if hits:
running = False
screen.fill(BLACK)
# screen.split(background.background_rect)
all_sprites.draw(screen)
pygame.display.flip()
pygame.quit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.