2016-02-08 4 views
0

Я делаю приложение pygamePygame, пытаясь стереть спрайт

С помощью этого приложения я могу поместить синюю точку вокруг экрана правой кнопкой мыши.

Средние мыши должна удалить все точки, но эта функция не работает ....

Любая идея? enter image description here

# -*- coding: utf-8 -*- 

import pygame 
from pygame.locals import * 


def func_circle(x,y): 
    cercle=pygame.sprite.Sprite() 
    pygame.sprite.Sprite.__init__(cercle) 
    cercle.image=pygame.Surface((500,500)) 
    cercle.image.fill((0,0,0)) 
    cercle.image.set_colorkey((0,0,0)) 
    pygame.draw.circle(cercle.image,(0,0,255),(cercle.image.get_rect().centerx,cercle.image.get_rect().centery),25,0) 
    cercle.image.convert_alpha() 
    cercle.rect=cercle.image.get_rect() 
    cercle.rect.centerx=x 
    cercle.rect.centery=y  
    return cercle 


pygame.init() 
fenetre = pygame.display.set_mode((640, 480)) 

background = pygame.Surface(fenetre.get_size()) 
background = background.convert() 
background.fill((250, 250, 250)) 

liste_des_sprites = pygame.sprite.LayeredUpdates() 

continuer = 1 
while continuer: 
    for event in pygame.event.get(): 
     if event.type==MOUSEBUTTONDOWN and event.button==3:       
      my_cicle=func_circle(event.pos[0],event.pos[1])   
      liste_des_sprites.add(my_cicle) 

     if event.type==MOUSEBUTTONDOWN and event.button==2: 
      print "trying to erase the blue dot" 
      my_cicle.kill() 
      liste_des_sprites.empty() 

     if event.type==QUIT: 
      continuer=0 

    liste_des_sprites.draw(fenetre) 


    pygame.display.update() 
+0

Что такое дополнительная запятая, '(x, y,)'? –

+0

исправлено, спасибо, но исходная ошибка все еще существует :( – n0tis

ответ

2

Вы должны очистить экран - например, залейте его черным цветом

fenetre.fill((0,0,0)) # clear screen 

liste_des_sprites.draw(fenetre) # draw circles again 

pygame.display.update() # send screen on monitor 

или нарисовать свой фон, чтобы удалить старые элементы.

fenetre.blit(background, (0,0)) # blit background to clear screen 

liste_des_sprites.draw(fenetre) # draw circles again 

pygame.display.update() # send screen on monitor 
+0

ОК, спасибо, однако у меня есть другая проблема. Если я использую 'my_circle.kill()' и я удаляю строку 'liste_des_sprites.empty()', только последняя bluedot получает стирание и не все точки ... Вы понимаете, почему? – n0tis

+0

'my_circle' хранит только последний созданный круг, поэтому вы убиваете только последний круг. Используйте только' empty', чтобы удалить все круги. – furas

+0

в порядке, но допустим, что я есть много важных вещей в группе, и я не хочу удалять, а затем повторно добавить весь мой спрайт в группу, есть ли способ удалить только те члены, которые называются 'my_circle'? – n0tis

Смежные вопросы