Python Pygame:我的一些精灵卡在屏幕的右侧

Python Pygame:我的一些精灵卡在屏幕的右侧,python,pygame,Python,Pygame,我的游戏差不多完成了!不幸的是,我需要解决一些小细节。最主要的一点是,在你播放一段时间后,一些精灵会卡在屏幕的前面。谁能帮帮我吗 import pygame, random from pygame.locals import ( K_UP, K_DOWN, K_LEFT, K_RIGHT, KEYDOWN, QUIT, ) print('Use the window above to play') pygame.init() pygame.font

我的游戏差不多完成了!不幸的是,我需要解决一些小细节。最主要的一点是,在你播放一段时间后,一些精灵会卡在屏幕的前面。谁能帮帮我吗

import pygame, random
from pygame.locals import (
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    KEYDOWN,
    QUIT,
)
print('Use the window above to play')
pygame.init()
pygame.font.init()
clock = pygame.time.Clock()

score = 0
display_width = 800
display_height = 600
X = 400
Y = 400
SCREEN_WIDTH = display_width
SCREEN_HEIGHT = display_height
screen = pygame.display.set_mode((display_width,display_height))

def death():
    global alive
    print('You died')
    myfont = pygame.font.SysFont('Comic Sans MS', 100)
    textsurface = myfont.render('You Died.', False, (0, 0, 0))
    screen.blit(textsurface,(0,0))
    

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super(Player, self).__init__()
        self.surf = pygame.image.load("Plane.png").convert()
        self.rect = self.surf.get_rect(topleft = (x, y))

    def update(self, pressed_keys):
        if pressed_keys[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_keys[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_keys[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_keys[K_RIGHT]:
            self.rect.move_ip(5, 0)

        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > SCREEN_WIDTH:
            self.rect.right = SCREEN_WIDTH
        if self.rect.top <= 0:
            self.rect.top = 0
        if self.rect.bottom >= SCREEN_HEIGHT:
            self.rect.bottom = SCREEN_HEIGHT

class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super(Enemy, self).__init__()
        self.surf = pygame.Surface((20, 10))
        self.surf = pygame.image.load("Missile.png").convert()
        self.rect = self.surf.get_rect(
            center=(
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT),
            )
        )
        self.speed = random.randint(5, 10)

    def update(self):
        self.rect.move_ip(-self.speed, 0)
        if self.rect.right < 0:
            global score
            score += 1
            self.kill()

class Bomb(pygame.sprite.Sprite):
    def __init__(self):
        super(Bomb, self).__init__()
        self.surf = pygame.Surface((50, 25))
        self.surf = pygame.image.load("Bomber.png").convert()
        self.rect = self.surf.get_rect(
            center=(
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT),
            )
        )
        self.speed = random.randint(2, 5)

    def update(self):
        self.rect.move_ip(-self.speed, 0)
        if self.rect.right < 0:
            global score
            score += 2
            self.kill()

class Blimp(pygame.sprite.Sprite):
    def __init__(self):
        super(Blimp, self).__init__()
        self.surf = pygame.Surface((75, 35))
        self.surf = pygame.image.load("Blimp.png").convert()
        self.rect = self.surf.get_rect(
            center=(
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT),
            )
        )
        self.speed = random.randint(1, 3)

    def update(self):
        self.rect.move_ip(-self.speed, 0)
        if self.rect.right < 0:
            global score
            score += 3
            self.kill()

ADDENEMY = pygame.USEREVENT + 1
pygame.time.set_timer(ADDENEMY, 950)

player = Player(display_width // 2, display_height // 2)

enemies = pygame.sprite.Group()
bomb = pygame.sprite.Group()
blimp = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)

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

        elif event.type == ADDENEMY:
            new_enemy = Enemy()
            new_bomb = Bomb()
            new_blimp = Blimp()
            spawn = random.randint(1,3)
            if spawn == 1:
                enemies.add(new_enemy)
            if spawn == 2:
                enemies.add(new_blimp)
            if spawn == 3:
                enemies.add(new_bomb)
            all_sprites.add(new_enemy)
            all_sprites.add(new_bomb)
            all_sprites.add(new_blimp)

    pressed_keys = pygame.key.get_pressed()
    player.update(pressed_keys)

    enemies.update()

    screen.fill((50,50,160))

    for entity in all_sprites:
        screen.blit(entity.surf, entity.rect)

    if pygame.sprite.spritecollideany(player, enemies):
        player.kill()
        alive = False
        death()

    screen.blit(player.surf, player.rect)

    pygame.display.flip()

    pygame.display.update()
    clock.tick(60)
导入pygame,随机
从pygame.locals导入(
K_UP,
K_下来,
库左,
好的,
KEYDOWN,
退出
)
打印('使用上面的窗口播放')
pygame.init()
pygame.font.init()
clock=pygame.time.clock()
分数=0
显示宽度=800
显示高度=600
X=400
Y=400
屏幕宽度=显示宽度
屏幕高度=显示高度
screen=pygame.display.set_模式((显示宽度、显示高度))
def death():
全球生存
打印(“你死了”)
myfont=pygame.font.SysFont('Comic Sans MS',100)
textsurface=myfont.render('你死了',False,(0,0,0))
屏幕光点(文本表面,(0,0))
职业玩家(pygame.sprite.sprite):
定义初始化(self,x,y):
超级(玩家,自我)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
self.surf=pygame.image.load(“Plane.png”).convert()
self.rect=self.surf.get_rect(左上=(x,y))
def更新(自我,按下_键):
如果按下[K\U UP]键:
自校正移动ip(0,-5)
如果按下按键[K向下]:
自校正移动ip(0,5)
如果按[左]键[左]:
自校正移动ip(-5,0)
如果按下按键[K_RIGHT]:
自校正移动ip(5,0)
如果self.rect.left<0:
self.rect.left=0
如果self.rect.right>屏幕宽度:
self.rect.right=屏幕宽度
如果self.rect.top=屏幕高度:
self.rect.bottom=屏幕高度
职业敌人(pygame.sprite.sprite):
定义初始化(自):
超级(敌人,自己)。\uuuuu init\uuuuuuu()
self.surf=pygame.Surface((20,10))
self.surf=pygame.image.load(“导弹.png”).convert()
self.rect=self.surf.get_rect(
居中=(
random.randint(屏幕宽度+20,屏幕宽度+100),
random.randint(0,屏幕高度),
)
)
self.speed=random.randint(5,10)
def更新(自我):
自校正移动ip(-自校正速度,0)
如果self.rect.right<0:
全球得分
分数+=1
self.kill()
职业炸弹(pygame.sprite.sprite):
定义初始化(自):
超级(炸弹,自我)。\uuuu初始化
self.surf=pygame.Surface((50,25))
self.surf=pygame.image.load(“Bomber.png”).convert()
self.rect=self.surf.get_rect(
居中=(
random.randint(屏幕宽度+20,屏幕宽度+100),
random.randint(0,屏幕高度),
)
)
self.speed=random.randint(2,5)
def更新(自我):
自校正移动ip(-自校正速度,0)
如果self.rect.right<0:
全球得分
分数+=2
self.kill()
职业飞艇(pygame.sprite.sprite):
定义初始化(自):
超级(飞艇,自我)。\uuu初始
self.surf=pygame.Surface((75,35))
self.surf=pygame.image.load(“Blimp.png”).convert()
self.rect=self.surf.get_rect(
居中=(
random.randint(屏幕宽度+20,屏幕宽度+100),
random.randint(0,屏幕高度),
)
)
self.speed=random.randint(1,3)
def更新(自我):
自校正移动ip(-自校正速度,0)
如果self.rect.right<0:
全球得分
分数+=3
self.kill()
ADDENEMY=pygame.USEREVENT+1
pygame.time.set_定时器(ADDENEMY,950)
player=player(显示宽度//2,显示高度//2)
敌人=pygame.sprite.Group()
bomb=pygame.sprite.Group()
blimp=pygame.sprite.Group()
all_sprites=pygame.sprite.Group()
所有精灵。添加(玩家)
活着=真
在世时:
对于pygame.event.get()中的事件:
打印(事件)
如果event.type==pygame.QUIT:
活动=错误
elif event.type==ADDENEMY:
新敌人
新炸弹
new_blimp=blimp()
spawn=random.randint(1,3)
如果spawn==1:
敌人。添加(新敌人)
如果spawn==2:
敌人。添加(新战机)
如果spawn==3:
敌人。添加(新炸弹)
所有精灵。添加(新敌人)
所有精灵。添加(新精灵)
所有精灵。添加(新精灵)
按下按键=pygame.key.get_pressed()
播放机更新(按_键)
更新(
筛选填充((50,50160))
对于所有_精灵中的实体:
screen.blit(entity.surf、entity.rect)
如果pygame.sprite.spriteany(玩家、敌人):
player.kill()
活动=错误
死亡()
screen.blit(player.surf,player.rect)
pygame.display.flip()
pygame.display.update()
时钟滴答(60)
按箭头键移动。文本框(不在新窗口中)将告诉您您的分数


您更新组中的所有敌人
敌人

敌人更新()
然后绘制组中的所有精灵
所有精灵

所有精灵中的实体的
:
screen.blit(entity.surf、entity.rect)
但并非所有在组中的敌人
所有精灵也在组中
敌人

新敌人=敌人() 新炸弹 new_blimp=blimp() spawn=random.randint(1,3) 如果spawn==1: 敌人。添加(新敌人) 如果spawn==2: 敌人。添加(新战机) 如果spawn==3: 敌人。添加(新炸弹) 所有精灵。添加(新敌人) 所有精灵。添加(新精灵) 所有精灵。添加(新精灵)
所有在组
中但不在组
中的敌人
都被吸引但不移动

创建一个随机敌人类型并将其添加到两个Gourp:

alive=True
在世时:
对于pygame.event.get()中的事件:
公共关系