pygame.sprite.LayeredUpdates.move_to_front() 不起作用
pygame.sprite.LayeredUpdates.move_to_front() does not work
所以我想用pygame来开发游戏。我希望我的光标图像位于顶层。我试过这个:
pygame.sprite.LayeredUpdates.move_to_front(cursor_img).
但是它给我这个错误:
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/PythonProjects/pythonProjects/game/main.py", line 50, in <module>
pygame.sprite.LayeredUpdates.move_to_front(cursor_img)
TypeError: move_to_front() missing 1 required positional argument: 'sprite'
我想它也希望我传递 'self' 参数,但我不知道传递什么给它。
有什么帮助吗?谢谢!
pygame.sprite.LayeredUpdates
is a Group object that manages pygame.sprite.Sprite
个对象。
pygame.sprite.LayeredUpdates.move_to_front
is a Method Objects. The argument of pygame.sprite.LayeredUpdates.move_to_front
must be a pygame.sprite.Sprite
个对象包含在 组 :
Brings the sprite to front, changing sprite layer to topmost layer
因此您必须创建一个群组
layered_group = pygame.sprite.LayeredUpdates()
包含pygame.sprite.Sprite
objects. In the following my_sprite
is a pygame.sprite.Sprite
个对象:
layered_group.layered_group.add(my_sprite)
然后你可以将精灵关联到图层并将图层置于最前面:
cursor_layer = 1
layered_sprites.change_layer(my_sprite, cursor_layer)
layered_group.move_to_front(my_sprite)
最小示例:
import pygame
pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
obstacle = pygame.sprite.Sprite()
obstacle.image = pygame.Surface((50, 50))
obstacle.image.fill((128, 128, 128))
obstacle.rect = obstacle.image.get_rect(center = (140, 140))
player = pygame.sprite.Sprite()
player.image = pygame.Surface((50, 50))
player.image.fill((255, 0, 0))
player.rect = obstacle.image.get_rect(center = (160, 160))
layered_sprites = pygame.sprite.LayeredUpdates([player, obstacle])
layered_sprites.change_layer(player, 1)
layered_sprites.change_layer(obstacle, 2)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
layered_sprites.move_to_front(player)
if event.button == 3:
layered_sprites.move_to_front(obstacle)
window.fill(0)
layered_sprites.draw(window)
pygame.display.flip()
pygame.quit()
exit()
所以我想用pygame来开发游戏。我希望我的光标图像位于顶层。我试过这个:
pygame.sprite.LayeredUpdates.move_to_front(cursor_img).
但是它给我这个错误:
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/PythonProjects/pythonProjects/game/main.py", line 50, in <module>
pygame.sprite.LayeredUpdates.move_to_front(cursor_img)
TypeError: move_to_front() missing 1 required positional argument: 'sprite'
我想它也希望我传递 'self' 参数,但我不知道传递什么给它。 有什么帮助吗?谢谢!
pygame.sprite.LayeredUpdates
is a Group object that manages pygame.sprite.Sprite
个对象。
pygame.sprite.LayeredUpdates.move_to_front
is a Method Objects. The argument of pygame.sprite.LayeredUpdates.move_to_front
must be a pygame.sprite.Sprite
个对象包含在 组 :
Brings the sprite to front, changing sprite layer to topmost layer
因此您必须创建一个群组
layered_group = pygame.sprite.LayeredUpdates()
包含pygame.sprite.Sprite
objects. In the following my_sprite
is a pygame.sprite.Sprite
个对象:
layered_group.layered_group.add(my_sprite)
然后你可以将精灵关联到图层并将图层置于最前面:
cursor_layer = 1
layered_sprites.change_layer(my_sprite, cursor_layer)
layered_group.move_to_front(my_sprite)
最小示例:
import pygame
pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
obstacle = pygame.sprite.Sprite()
obstacle.image = pygame.Surface((50, 50))
obstacle.image.fill((128, 128, 128))
obstacle.rect = obstacle.image.get_rect(center = (140, 140))
player = pygame.sprite.Sprite()
player.image = pygame.Surface((50, 50))
player.image.fill((255, 0, 0))
player.rect = obstacle.image.get_rect(center = (160, 160))
layered_sprites = pygame.sprite.LayeredUpdates([player, obstacle])
layered_sprites.change_layer(player, 1)
layered_sprites.change_layer(obstacle, 2)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
layered_sprites.move_to_front(player)
if event.button == 3:
layered_sprites.move_to_front(obstacle)
window.fill(0)
layered_sprites.draw(window)
pygame.display.flip()
pygame.quit()
exit()