2016-04-09 19 views
0

Ich teste, um verschiedene Objekte auf dem Bildschirm zu bewegen, aber unabhängig voneinander, das Problem ist, dass, wenn ich ein Objekt auf dem anderen verschiebe das letzte verschwindet, obwohl ich ständig auf bin der Bildschirm. Warum passiert das und wie kann ich das besser machen?Pygame bewegte einzelne Objekte

import pygame 
from pygame.locals import * 
from random import randrange 


class Tst(object): 

    def __init__(self): 
     self.img=pygame.Surface((20,20)) 
     self.img.fill((100,200,0)) 
     self.rect=self.img.get_rect(center=(randrange(780),randrange(480))) 
     #pygame.draw.rect(TV,(0,0,255),self.rect,1) 
     TV.blit(self.img,self.rect) 
    def move(self): 
     mouse_pos=pygame.mouse.get_pos() 
     if pygame.mouse.get_pressed()[0]: 
      if self.rect.collidepoint(mouse_pos): 
       TV.fill((0,0,0),self.rect) 
       self.rect=pygame.Rect(mouse_pos[0]-10,mouse_pos[1]-10,20,20) 
     TV.blit(self.img,self.rect) 


pygame.init() 
TV=pygame.display.set_mode((800,500)) 

tstList=[] 
for _ in range(10): 
    tstList.append(Tst()) 

while 1: 
    for e in pygame.event.get(): 
     if e.type==QUIT: 
     pygame.quit() 

    for tst in tstList: 
     tst.move() 

    pygame.display.flip() 

Antwort

1

Das Problem ist, mit dieser Zeile:

self.rect=pygame.Rect(mouse_pos[0]-10,mouse_pos[1]-10,20,20) 

Grundsätzlich sie alle an der Mausposition sind. Wenn Sie jedem Quadrat einen Namen geben und den Namen und das Rechteck auf die Konsole drucken, können Sie dies sehen. Wenn sich die Maus über einem Quadrat befindet, setzen Sie es auf die Mausposition, und schließlich werden alle Quadrate an der Mausposition übereinander angeordnet. Ich bin mir nicht sicher, was genau Sie versuchen, also kann ich nicht sagen, was Sie tun sollten, um dies zu ändern, da es davon abhängt, was Sie erreichen wollen. Lassen Sie es mich wissen, wenn Sie weitere Ratschläge benötigen und ich werde versuchen zu helfen.

Hier ist der Code, der sie druckt:

import pygame 
from pygame.locals import * 
from random import randrange 


class Tst(object): 

    def __init__(self, name): 
     self.name = name 
     self.img=pygame.Surface((20,20)) 
     self.img.fill((100,200,0)) 
     self.rect=self.img.get_rect(center=(randrange(780),randrange(480))) 
     #print self.rect 
     #pygame.draw.rect(TV,(0,0,255),self.rect,1) 
     TV.blit(self.img,self.rect) 
    def move(self): 
     mouse_pos=pygame.mouse.get_pos() 
     if pygame.mouse.get_pressed()[0]: 
      if self.rect.collidepoint(mouse_pos): 
       TV.fill((0,0,0),self.rect) 
       self.rect=pygame.Rect(mouse_pos[0]-10,mouse_pos[1]-10,20,20) 
       print self.name, 
       print self.rect 
     TV.blit(self.img,self.rect) 


pygame.init() 
TV=pygame.display.set_mode((800,500)) 

tstList=[] 
for x in range(10): 
    print x 
    letters = "abcdefghij" 
    tstList.append(Tst(letters[x])) 

while 1: 
    for e in pygame.event.get(): 
     if e.type==QUIT: 
      pygame.quit() 

    for tst in tstList: 
     tst.move() 
     #print tst.img.get_rect() 
    pygame.display.flip()