Python Pygame->;在类方法中移动rect
我有一个名为Block的类,用于绘制和移动块:Python Pygame->;在类方法中移动rect,python,class,pygame,Python,Class,Pygame,我有一个名为Block的类,用于绘制和移动块: class Block: def __init__(self, pos_x, pos_y, size_x, size_y): self._posX = pos_x self._posY = pos_y self._sizeX = size_x self._r = pygame.draw.rect(gameDisplay, (200,100,100), (pos_x,pos_y,
class Block:
def __init__(self, pos_x, pos_y, size_x, size_y):
self._posX = pos_x
self._posY = pos_y
self._sizeX = size_x
self._r = pygame.draw.rect(gameDisplay, (200,100,100), (pos_x,pos_y,size_x,size_y), 0)
def bMove(self, new_x, new_y):
self._r.left = new_x
self._r.top = new_y
现在,绘图部分工作得很好。问题是我无法使用带有ie的bMove类“Box1.bMove(100100)”来移动矩形。
代码编译时没有任何错误,但在游戏中矩形没有发生任何变化。
即使使用“move(x,y)”或修改类使其看起来像这样:
class Block:
def __init__(self, pos_x, pos_y, size_x, size_y):
self._posX = pos_x
self._posY = pos_y
self._sizeX = size_x
pygame.draw.rect(gameDisplay, (200,100,100), (pos_x,pos_y,size_x,size_y), 0)
def bMove(self, new_x, new_y):
self.left = new_x
self.top = new_y
没有任何好处。
有人知道如何解决这个问题吗?
当您创建一个类的实例时,只会调用一次
\uuuu init\uuuu
您正在尝试更新块的位置并绘制它,因此需要一种可以重复执行该操作的方法
class Block:
def __init__(self, pos_x, pos_y, size_x, size_y):
self._posX = pos_x
self._posY = pos_y
self._sizeX = size_x
self._sizeY = size_y
self._r = pygame.Rect(pos_x,pos_y,size_x,size_y)
def bMove(self, new_x, new_y):
self._r.left = new_x
self._r.top = new_y
pygame.draw.rect(gameDisplay, (200,100,100), self._r)
下面是一些测试代码:
import pygame
pygame.init()
size = [640, 480]
screen = pygame.display.set_mode(size)
pygame.display.set_caption('Block')
clock = pygame.time.Clock()
class Block():
def __init__(self, pos_x, pos_y, size_x, size_y):
self._posX = pos_x
self._posY = pos_y
self._sizeX = size_x
self._sizeY = size_y
self._r = pygame.Rect(pos_x,pos_y,size_x,size_y)
def bMove(self, new_x, new_y):
self._r.left = new_x
self._r.top = new_y
pygame.draw.rect(screen, (200,100,100), self._r)
block = Block(0, 0, 50, 50)
done = False
while done == False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill((255, 255, 255))
x, y = pygame.mouse.get_pos()
block.bMove(x, y)
pygame.display.update()
clock.tick(20)
pygame.quit()
您没有在
bMove
方法中绘制矩形<代码>\uuuu init\uuuuu在创建类实例时只调用一次。因此,正确的方法是在init外部绘制它?如果在init内部绘制它,则无法移动它,所以是的。您能给我一个正确的代码修改作为答案吗,请?这不是每次我想移动它时都会创建一个新的rect实例吗?只有每次通过调用Block()创建实例时才可以。谢谢你:)