Python 如何隔离敌方精灵,使它们在进入新房间时消失?
我尝试过一些方法,比如在room1类中对敌人进行编码,但似乎没有任何效果,当我进入其他房间时,它要么根本不会生成预期的精灵,要么精灵生成但不会消失(除非我与它发生碰撞)。这是我的代码,任何帮助都将不胜感激 顺便说一句,我也试着对每个房间应用不同的背景,但也没有任何运气。要实现这一点,需要做些什么Python 如何隔离敌方精灵,使它们在进入新房间时消失?,python,pygame,background-image,sprite,Python,Pygame,Background Image,Sprite,我尝试过一些方法,比如在room1类中对敌人进行编码,但似乎没有任何效果,当我进入其他房间时,它要么根本不会生成预期的精灵,要么精灵生成但不会消失(除非我与它发生碰撞)。这是我的代码,任何帮助都将不胜感激 顺便说一句,我也试着对每个房间应用不同的背景,但也没有任何运气。要实现这一点,需要做些什么 import pygame import random # Define colours BLACK = (0, 0, 0) WHITE = (255, 255, 255) BLUE = (0,
import pygame
import random
# Define colours
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
PURPLE = (255, 0, 255)
# --- Classes
class Wall(pygame.sprite.Sprite):
def __init__(self, x, y, width, height, color):
super().__init__()
self.image = pygame.Surface([width, height])
self.image.fill(color)
self.rect = self.image.get_rect()
self.rect.y = y
self.rect.x = x
class Player(pygame.sprite.Sprite):
change_x = 0
change_y = 0
def __init__(self, filename, x, y):
super().__init__()
self.image = pygame.image.load(filename).convert()
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
self.rect.y = y
self.rect.x = x
def changespeed(self, x, y):
self.change_x += x
self.change_y += y
def move(self, walls):
self.rect.x += self.change_x
block_hit_list = pygame.sprite.spritecollide(self, walls, False)
for block in block_hit_list:
if self.change_x > 0:
self.rect.right = block.rect.left
else:
self.rect.left = block.rect.right
self.rect.y += self.change_y
block_hit_list = pygame.sprite.spritecollide(self, walls, False)
for block in block_hit_list:
if self.change_y > 0:
self.rect.bottom = block.rect.top
else:
self.rect.top = block.rect.bottom
class Enemy(pygame.sprite.Sprite):
def __init__(self, filename):
super().__init__()
self.image = pygame.image.load(filename).convert()
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
class ProjectileUp(pygame.sprite.Sprite):
def __init__(self, filename):
super().__init__()
self.image = pygame.image.load(filename).convert()
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
def update(self):
self.rect.y -= 5
class ProjectileDown(pygame.sprite.Sprite):
def __init__(self, filename):
super().__init__()
self.image = pygame.image.load(filename).convert()
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
def update(self):
self.rect.y += 5
class ProjectileLeft(pygame.sprite.Sprite):
def __init__(self, filename):
super().__init__()
self.image = pygame.image.load(filename).convert()
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
def update(self):
self.rect.x -= 5
class ProjectileRight(pygame.sprite.Sprite):
def __init__(self, filename):
super().__init__()
self.image = pygame.image.load(filename).convert()
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
def update(self):
self.rect.x += 5
class Room(object):
wall_list = None
enemy_sprites = None
def __init__(self):
self.wall_list = pygame.sprite.Group()
self.enemy_sprites = pygame.sprite.Group()
class Room1(Room):
def __init__(self):
super().__init__()
walls = [[0, 0, 20, 250, BLACK],
[0, 350, 20, 250, BLACK],
[780, 0, 20, 250, BLACK],
[780, 350, 20, 250, BLACK],
[20, 0, 760, 20, BLACK],
[20, 580, 760, 20, BLACK]
]
for item in walls:
wall = Wall(item[0], item[1], item[2], item[3], item[4])
self.wall_list.add(wall)
self.enemy_sprites.add(Enemy("Judas.png"))
class Room2(Room):
def __init__(self):
super().__init__()
walls = [[0, 0, 20, 250, BLACK],
[0, 350, 20, 250, BLACK],
[780, 0, 20, 250, BLACK],
[780, 350, 20, 250, BLACK],
[20, 0, 760, 20, BLACK],
[20, 580, 760, 20, BLACK]
]
for item in walls:
wall = Wall(item[0], item[1], item[2], item[3], item[4])
self.wall_list.add(wall)
class Room3(Room):
def __init__(self):
super().__init__()
walls = [[0, 0, 20, 250, BLACK],
[0, 350, 20, 250, BLACK],
[780, 0, 20, 250, BLACK],
[780, 350, 20, 250, BLACK],
[20, 0, 760, 20, BLACK],
[20, 580, 760, 20, BLACK]
]
for item in walls:
wall = Wall(item[0], item[1], item[2], item[3], item[4])
self.wall_list.add(wall)
def main():
pygame.init()
screen = pygame.display.set_mode([800, 600])
pygame.display.set_caption('Labyrinth')
player = Player("Isaac.png", 50, 50)
all_sprites_list = pygame.sprite.Group()
all_sprites_list.add(player)
enemy_sprites = Enemy("Judas.png")
enemy_list = pygame.sprite.Group()
enemy_list.add(enemy_sprites)
all_sprites_list.add(enemy_sprites)
enemy_sprites.rect.x = 150
enemy_sprites.rect.y = 200
projectile_list = pygame.sprite.Group()
rooms = []
room = Room1()
rooms.append(room)
room = Room2()
rooms.append(room)
room = Room3()
rooms.append(room)
current_room_no = 0
current_room = rooms[current_room_no]
clock = pygame.time.Clock()
# Load background image
background_position = [0, 0]
background_image = pygame.image.load("Floor.png").convert()
done = False
# ---------- MAIN PROGRAM LOOP ---------- #
while not done:
# --- Event Processing ---
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# Controls
elif event.type == pygame.KEYDOWN:
projectile = None
if event.key == pygame.K_UP:
projectile = ProjectileUp("LightningUp.png")
projectile.rect.x = player.rect.x+10
projectile.rect.y = player.rect.y-30
elif event.key == pygame.K_DOWN:
projectile = ProjectileDown("LightningDown.png")
projectile.rect.x = player.rect.x+10
projectile.rect.y = player.rect.y+50
elif event.key == pygame.K_LEFT:
projectile = ProjectileLeft("LightningLeft.png")
projectile.rect.x = player.rect.x-15
projectile.rect.y = player.rect.y+33
elif event.key == pygame.K_RIGHT:
projectile = ProjectileRight("LightningRight.png")
projectile.rect.x = player.rect.x+35
projectile.rect.y = player.rect.y+33
elif event.key == ord('a'):
player.changespeed(-7, 0)
elif event.key == ord('d'):
player.changespeed(7, 0)
elif event.key == ord('w'):
player.changespeed(0, -7)
elif event.key == ord('s'):
player.changespeed(0, 7)
if projectile:
all_sprites_list.add(projectile)
projectile_list.add(projectile)
elif event.type == pygame.KEYUP:
if event.key == ord('a'):
player.changespeed(7, 0)
elif event.key == ord('d'):
player.changespeed(-7, 0)
elif event.key == ord('w'):
player.changespeed(0, 7)
elif event.key == ord('s'):
player.changespeed(0, -7)
# --- Game Logic ---
all_sprites_list.update()
enemy_hit_list = pygame.sprite.spritecollide(player, enemy_list, True)
for projectile in projectile_list:
enemy_hit_list = pygame.sprite.spritecollide(projectile, enemy_list, True)
for enemy in enemy_hit_list:
projectile_list.remove(projectile)
player.move(current_room.wall_list)
if player.rect.x < -15:
if current_room_no == 0:
current_room_no = 2
current_room = rooms[current_room_no]
player.rect.x = 790
elif current_room_no == 2:
current_room_no = 1
current_room = rooms[current_room_no]
player.rect.x = 790
else:
current_room_no = 0
current_room = rooms[current_room_no]
player.rect.x = 790
if player.rect.x > 801:
if current_room_no == 0:
current_room_no = 1
current_room = rooms[current_room_no]
player.rect.x = 0
elif current_room_no == 1:
current_room_no = 2
current_room = rooms[current_room_no]
player.rect.x = 0
else:
current_room_no = 0
current_room = rooms[current_room_no]
player.rect.x = 0
# --- Drawing ---
screen.blit(background_image, background_position)
all_sprites_list.draw(screen)
current_room.wall_list.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
if __name__ == "__main__":
main()
导入pygame
随机输入
#定义颜色
黑色=(0,0,0)
白色=(255,255,255)
蓝色=(0,0255)
绿色=(0,255,0)
红色=(255,0,0)
紫色=(255,0255)
#---班级
类墙(pygame.sprite.sprite):
定义初始值(自、x、y、宽度、高度、颜色):
super()。\uuuu init\uuuuu()
self.image=pygame.Surface([宽度,高度])
self.image.fill(颜色)
self.rect=self.image.get_rect()
自校正y=y
self.rect.x=x
职业玩家(pygame.sprite.sprite):
改变x=0
改变y=0
定义初始化(self,文件名,x,y):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(文件名).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
自校正y=y
self.rect.x=x
def更换速度(自身、x、y):
自我改变_x+=x
自我改变_y+=y
def移动(自身、墙壁):
self.rect.x+=self.change\u x
block\u hit\u list=pygame.sprite.spritecollide(self、walls、False)
对于block_命中列表中的block_:
如果self.change_x>0:
self.rect.right=block.rect.left
其他:
self.rect.left=block.rect.right
self.rect.y+=self.change\u y
block\u hit\u list=pygame.sprite.spritecollide(self、walls、False)
对于block_命中列表中的block_:
如果self.change_y>0:
self.rect.bottom=block.rect.top
其他:
self.rect.top=block.rect.bottom
职业敌人(pygame.sprite.sprite):
def uuu init uuu(self,文件名):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(文件名).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
类projectleup(pygame.sprite.sprite):
def uuu init uuu(self,文件名):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(文件名).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
def更新(自我):
自校正y-=5
类ProjectleDown(pygame.sprite.sprite):
def uuu init uuu(self,文件名):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(文件名).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
def更新(自我):
自校正y+=5
类projectleft(pygame.sprite.sprite):
def uuu init uuu(self,文件名):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(文件名).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
def更新(自我):
自校正x-=5
类投射器权限(pygame.sprite.sprite):
def uuu init uuu(self,文件名):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load(文件名).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
def更新(自我):
自校正x+=5
教室(实物):
墙列表=无
敌人精灵=无
定义初始化(自):
self.wall\u list=pygame.sprite.Group()
self.敌方精灵=pygame.sprite.Group()
教室1(房间):
定义初始化(自):
super()。\uuuu init\uuuuu()
墙壁=[[0,0,20250,黑色],
[0350,20250,黑色],
[780,0,20250,黑色],
[780350,20250,黑色],
[20,0760,20,黑色],
[2058076020,黑色]
]
对于墙中的项目:
墙=墙(项目[0],项目[1],项目[2],项目[3],项目[4])
self.wall\u list.add(墙)
self.敌军_精灵.add(敌军(“Judas.png”))
二级教室(房间):
定义初始化(自):
super()。\uuuu init\uuuuu()
墙壁=[[0,0,20250,黑色],
[0350,20250,黑色],
[780,0,20250,黑色],
[780350,20250,黑色],
[20,0760,20,黑色],
[2058076020,黑色]
]
对于墙中的项目:
墙=墙(项目[0],项目[1],项目[2],项目[3],项目[4])
self.wall\u list.add(墙)
3班教室(房间):
定义初始化(自):
super()。\uuuu init\uuuuu()
墙壁=[[0,0,20250,黑色],
[0350,20250,黑色],
[780,0,20250,黑色],
[780350,20250,黑色],
[20,0760,20,黑色],
[2058076020,黑色]
]
对于墙中的项目:
墙=墙(项目[0],项目[1],项目[2],项目[3],项目[4])
self.wall\u list.add(墙)
def main():
pygame.init()
screen=pygame.display.set_模式([800600])
pygame.display.set_标题('迷宫')
player=player(“Isaac.png”,50,50)
所有精灵列表=pygame.sprite.Group()
所有精灵列表。添加(玩家)
敌人的精灵=敌人(“Judas.png”)
敌人列表=pygame.sprite.Group()
敌人列表。添加(敌人精灵)
所有精灵列表。添加(敌人精灵)
敌人的精灵。rect.x=150
敌方精灵。矩形y=200
投射物列表=pygame.sprite.Group()
房间=[]
房间=房间1()
房间。附加(房间)
房间=房间2()
房间。附加(房间)
房间=房间3()
房间。附加(房间)
当前房间号=0
当前房间=房间[当前房间编号]
clock=pygame.time.clock()
#加载背景图像
背景位置=[0,0]
background\u image=pygame.image.load(“Floor.png”).convert