0

我正在测试在屏幕上移动不同的对象,但彼此独立,问题是当我将一个对象移到另一个对象之上时,最后一个对象消失了,尽管我blit在屏幕上不断地对它们进行处理。为什么会发生这种情况,我怎样才能做得更好?

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

1 回答 1

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()
于 2016-04-10T03:04:55.433 回答