我想杀死我的精灵。怎么杀掉它?

发布于 2025-01-10 01:45:05 字数 1314 浏览 6 评论 0原文

    import pygame as pygame , sys,time
    
    pygame.init()
    size = (700,500)
    window_game = pygame.display.set_mode(size)
    
    _run_ = True
    
        
    
    white = (255,255,255) 
    mouse_pos = pygame.mouse.get_pos()
      
    
    
    class mySprite(pygame.sprite.Sprite):
        def __init__ (self,cord_x,cord_y,picture,colorkey):
            super().__init__()
            self.image = pygame.Surface([0,0])
            self.image = pygame.image.load(picture)
            self.image.set_colorkey(colorkey)
            self.rect = self.image.get_rect()
            self.rect.center = [cord_x,cord_y] 
            self.kill()
            
    
    placeSP_group = pygame.sprite.Group()
    Clock = pygame.time.Clock()
    FPS = 500
    while _run_:
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.QUIT
                sys.exit()
        mouse_pos = pygame.mouse.get_pos()
        placeSP = [mySprite(mouse_pos[0],mouse_pos[1],'sp_1.png',white)]
        pygame.display.flip()
        placeSP_group.draw(window_game)
        placeSP_group.add(placeSP[:])
        Clock.tick(FPS)

现在我希望我的精灵被杀死并获得新的鼠标位置 和 window_game.fill('black') 不起作用,你能做些什么来修复它,请告诉我...... 我想要的是每次鼠标移动时我不想杀死最后一个精灵并使用当前精灵位置创建另一个精灵。

    import pygame as pygame , sys,time
    
    pygame.init()
    size = (700,500)
    window_game = pygame.display.set_mode(size)
    
    _run_ = True
    
        
    
    white = (255,255,255) 
    mouse_pos = pygame.mouse.get_pos()
      
    
    
    class mySprite(pygame.sprite.Sprite):
        def __init__ (self,cord_x,cord_y,picture,colorkey):
            super().__init__()
            self.image = pygame.Surface([0,0])
            self.image = pygame.image.load(picture)
            self.image.set_colorkey(colorkey)
            self.rect = self.image.get_rect()
            self.rect.center = [cord_x,cord_y] 
            self.kill()
            
    
    placeSP_group = pygame.sprite.Group()
    Clock = pygame.time.Clock()
    FPS = 500
    while _run_:
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.QUIT
                sys.exit()
        mouse_pos = pygame.mouse.get_pos()
        placeSP = [mySprite(mouse_pos[0],mouse_pos[1],'sp_1.png',white)]
        pygame.display.flip()
        placeSP_group.draw(window_game)
        placeSP_group.add(placeSP[:])
        Clock.tick(FPS)

now i want that my sprite get's killed and get the new mouse position
and window_game.fill('black')
dosen't work is there any thing you can do to fix it pls tell me...
what i wan't is every time my mouse moves i wan't kill the last sprite and create the other one with the current sprite pos.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

窗影残 2025-01-17 01:45:05

您在错误的时刻使用了 kill()

Sprite 位于 Group 内时,kill() 起作用,但您首先创建尝试使用 kill 的 Sprite (),然后将此精灵添加到Group

您应该首先创建 Sprite,然后添加到 Group,然后对 Sprite 中的第一个 Sprite 运行 kill() >Group

placeSP_group.sprites()[0].kill()

但普通的 Group 不必保持精灵有序并更好地使用

placeSP_group = pygame.sprite.OrderedUpdates()

完整的工作代码。它显示 5 个跟随鼠标的精灵。

import pygame
import sys

# --- constants ---  # PEP8: `UPPER_CASE_NAMES` for constants

WHITE = (255, 255, 255)   # PE8: space after `,`
SIZE = (700, 500)
FPS = 50  # there is no need to use `500` because Python can't run so fast,
           # and monitors runs with 60Hz (eventually 120Hz) which can display 60 FPS (120 FPS)

# --- classes ---  # PEP8: `CamelCaseNames` for classes

class MySprite(pygame.sprite.Sprite):
    
    def __init__(self, x, y, picture, colorkey):
        super().__init__()
        
        # you need one of them
        
        # load image
        #self.image = pygame.image.load(picture)
        
        # OR

        # create surface        
        self.image = pygame.Surface((10, 10))
        self.image.fill((255, 0, 0))
        
        # ----
        
        self.rect = self.image.get_rect()
        self.rect.center = (x, y)

        self.image.set_colorkey(colorkey)

# --- main ---

pygame.init()
window_game = pygame.display.set_mode(SIZE)

#placeSP_group = pygame.sprite.Group()
placeSP_group = pygame.sprite.OrderedUpdates()  # Group which keep order

sprite1 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite2 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite3 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite4 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite5 = MySprite(0, 0, 'sp_1.png', WHITE)
placeSP_group.add([sprite1, sprite2, sprite3, sprite4, sprite5])

clock = pygame.time.Clock()   # PEP8: `lower_case_names` for variables

running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            #running = False
            pygame.quit()
            exit()
            
    # create new Sprite
    x, y = pygame.mouse.get_pos()
    new_sprite = MySprite(x, y, 'sp_1.png', WHITE)
    
    # add new Sprite at the end of OrderedUpdates()
    placeSP_group.add([new_sprite])
    
    # remove Sprite at the beginning of OrderedUpdates()
    placeSP_group.sprites()[0].kill()  

    # ---

    pygame.display.flip()
    
    window_game.fill('black') 
    placeSP_group.draw(window_game)
    
    clock.tick(FPS)

You use kill() in wrong moment.

kill() works when Sprite is inside Group but you first create Sprite which try to use kill() and later you add this sprite to Group.

You should first create Sprite, next add to Group and later run kill() for first Sprite in Group

placeSP_group.sprites()[0].kill()

but normal Group doesn't have to keep sprites in order and better use

placeSP_group = pygame.sprite.OrderedUpdates()

Full working code. It display 5 sprites which follow mouse.

import pygame
import sys

# --- constants ---  # PEP8: `UPPER_CASE_NAMES` for constants

WHITE = (255, 255, 255)   # PE8: space after `,`
SIZE = (700, 500)
FPS = 50  # there is no need to use `500` because Python can't run so fast,
           # and monitors runs with 60Hz (eventually 120Hz) which can display 60 FPS (120 FPS)

# --- classes ---  # PEP8: `CamelCaseNames` for classes

class MySprite(pygame.sprite.Sprite):
    
    def __init__(self, x, y, picture, colorkey):
        super().__init__()
        
        # you need one of them
        
        # load image
        #self.image = pygame.image.load(picture)
        
        # OR

        # create surface        
        self.image = pygame.Surface((10, 10))
        self.image.fill((255, 0, 0))
        
        # ----
        
        self.rect = self.image.get_rect()
        self.rect.center = (x, y)

        self.image.set_colorkey(colorkey)

# --- main ---

pygame.init()
window_game = pygame.display.set_mode(SIZE)

#placeSP_group = pygame.sprite.Group()
placeSP_group = pygame.sprite.OrderedUpdates()  # Group which keep order

sprite1 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite2 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite3 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite4 = MySprite(0, 0, 'sp_1.png', WHITE)
sprite5 = MySprite(0, 0, 'sp_1.png', WHITE)
placeSP_group.add([sprite1, sprite2, sprite3, sprite4, sprite5])

clock = pygame.time.Clock()   # PEP8: `lower_case_names` for variables

running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            #running = False
            pygame.quit()
            exit()
            
    # create new Sprite
    x, y = pygame.mouse.get_pos()
    new_sprite = MySprite(x, y, 'sp_1.png', WHITE)
    
    # add new Sprite at the end of OrderedUpdates()
    placeSP_group.add([new_sprite])
    
    # remove Sprite at the beginning of OrderedUpdates()
    placeSP_group.sprites()[0].kill()  

    # ---

    pygame.display.flip()
    
    window_game.fill('black') 
    placeSP_group.draw(window_game)
    
    clock.tick(FPS)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文