我想让程序正常工作,这样当精灵到达迷宫出口(-15&;+780)时,屏幕将切换到阵列房间中的下一个迷宫[]。你知道吗
我尝试使用现有的自身位置虽然这似乎不起作用。我还将4个迷宫添加到一个名为rooms的数组中
import pygame
pos = (0,0)
class Player(pygame.sprite.Sprite):
def __init__(self, image, pos, background):
super().__init__()
self.image = image
self.pos = pygame.Vector2(pos)
self.rect = self.image.get_rect(center=self.pos)
self.background = background
def update(self, events, dt):
pressed = pygame.key.get_pressed()
move = pygame.Vector2((0, 0))
if pressed[pygame.K_w]: move += (0, -1)
if pressed[pygame.K_a]: move += (-1, 0)
if pressed[pygame.K_s]: move += (0, 1)
if pressed[pygame.K_d]: move += (1, 0)
#if move.length() > 0: move.normalise_ip()
new_pos = self.pos + move*(dt/5)
new_rect = self.rect.copy()
new_rect.center = new_pos
new_rect.clamp_ip(self.background.get_rect())
new_pos = new_rect.center
hit_box = self.background.subsurface(new_rect)
for x in range(new_rect.width):
for y in range(new_rect.height):
if sum(hit_box.get_at((x, y))) < 500:
return
self.pos = new_pos
self.rect.center = self.pos
global pos
pos = self.pos
# Scenes
def room1():
background = (pygame.image.load('maze1.jpg'))
background = pygame.transform.rotate(background, -90)
background = pygame.transform.scale(background, (800,600))
def room2():
background = (pygame.image.load('maze2.jpg'))
background = pygame.transform.rotate(background, -90)
background = pygame.transform.scale(background, (800,600))
def room3():
background = (pygame.image.load('maze3.jpg'))
background = pygame.transform.rotate(background, -90)
background = pygame.transform.scale(background, (800,600))
def room4():
background = (pygame.image.load('maze4.jpg'))
background = pygame.transform.rotate(background, -90)
background = pygame.transform.scale(background, (800,600))
def main():
pygame.init()
screen = pygame.display.set_mode((800, 600))
screen_rect = screen.get_rect()
clock = pygame.time.Clock()
sprites = pygame.sprite.Group()
rooms = []
room = room1()
rooms.append(room)
room = room2()
rooms.append(room)
room = room3()
rooms.append(room)
room = room4()
rooms.append(room)
current_room_no = 0
current_room = rooms[current_room_no]
dt = 0
while True:
events = pygame.event.get()
for e in events:
if e.type == pygame.QUIT:
return
if pos < -15:
if current_room_no == 0:
current_room_no = 2
current_room = rooms[current_room_no]
pos = 790
elif current_room_no == 2:
current_room_no = 1
current_room = rooms[current_room_no]
pos = 790
else:
current_room_no = 0
current_room = rooms[current_room_no]
pos = 790
if pos > 801:
if current_room_no == 0:
current_room_no = 1
current_room = rooms[current_room_no]
pos = 0
elif current_room_no == 1:
current_room_no = 2
current_room = rooms[current_room_no]
pos = 0
else:
current_room_no = 0
current_room = rooms[current_room_no]
pos = 0
pimg = pygame.Surface((10, 10))
pimg.fill((200, 20, 20))
sprites.add(Player(pimg, (50, 50), background))
sprites.update(events, dt)
screen.fill(pygame.Color('grey'))
screen.blit(background, (0, 0))
sprites.draw(screen)
pygame.display.flip()
dt = clock.tick(60)
if __name__ == '__main__':
main()
我希望有人能帮助我集成屏幕改变功能,因为目前的代码输出一个错误,关于pos不是一个变量和/或pos被调用后,它需要,但正如你所看到的,我清楚地呼吁pos变量在代码的头部作为一个全局变量。你知道吗
为了使用
pos
,您需要在main
的开头指定global pos
。一般来说,使用全局变量不是一个好的做法,请尝试重构代码,使函数中有pos
。我很担心你想把tuple
和int
作比较。这也会产生一个错误。你知道吗我冒昧修改了你的密码。你知道吗
player.pos
来跟踪玩家精灵的位置player
,因为当游戏中发生事件时,玩家被多次生成room
函数,因为你在做rooms.append(room())
之类的事情,你基本上是附加room
函数的结果,基本上是None
。我不太明白你为什么要那样做完整代码:
相关问题 更多 >
编程相关推荐