Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame->;在类方法中移动rect_Python_Class_Pygame - Fatal编程技术网

Python Pygame->;在类方法中移动rect

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,

我有一个名为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,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()创建实例时才可以。谢谢你:)