2016-04-09 2 views
0

Я тестирую, чтобы перемещать разные объекты на экране, но независимо друг от друга, проблема в том, что когда я перемещаю один объект поверх другого, последний исчезает, хотя я все время нахожусь на каждом из них экран. Почему это происходит и как я могу сделать это лучше?Pygame перемещение отдельных объектов

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() 

ответ

1

Проблема с этой линии:

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

В основном, все они в положении мыши. Если вы дадите каждому квадрату имя и напечатаете имя и выберете консоль, вы можете это увидеть. Когда мышь находится над квадратом, который вы установили, установите его на мышь pos, и, в конце концов, все квадраты расположены друг над другом на мышиной панели. Я не уверен, что именно вы пытаетесь это сделать, я не могу сказать, что вы должны сделать, чтобы изменить это, поскольку это зависит от того, чего вы пытаетесь достичь. Дайте мне знать, если вам нужны дополнительные советы, и я постараюсь помочь.

Вот код, который печатает их:

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()