2016-04-09 6 views
0

私は画面上の異なるオブジェクトを動かすことをテストしているが、互いに独立して動くようにテストしている。問題は、あるオブジェクトを別のオブジェクトの上に移動するとき、スクリーン。なぜこれが起こっているのですか?これをどうすればよりうまくできますか?個々のオブジェクトを動かすために

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) 

は基本的に、彼らはマウスの位置ですべてです。各四角形に名前をつけ、名前と矩形をコンソールに表示すると、これを見ることができます。マウスが正方形の上にくると、それをマウスの位置に設定し、最終的にすべての四角形がマウスの位置に重ねられます。私はあなたがしようとしていることを正確には分からないので、達成しようとしていることに依存して、これを変えるために何をすべきかを言うことができません。それ以上のアドバイスが必要な場合は教えてください。ここで

は、それらを出力コードです:

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() 
関連する問題