如何移动pygame rect?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何移动pygame rect?相关的知识,希望对你有一定的参考价值。

当我运行下面的代码时,pygame rect不会移动。它设置为在每个左箭头按下时沿x方向移动-7,但没有任何反应。我试图打印矩形的位置,看起来它的位置从初始位置300更新到293,尽管屏幕上没有移动。任何帮助深表感谢!

import sys
import pygame

PINK = (255, 102, 255)
BLACK = (0, 0, 0)

pygame.init()
clock = pygame.time.Clock()
pygame.display.init()

font = pygame.font.SysFont("impact", 20)


screen = pygame.display.set_mode(750, 550)

class Paddle:
    def __init__(self):
        self.paddle = pygame.Rect(300, 730,
                                  10,
                                  52)

    def draw_paddle(self):
        # Draw paddle
        pygame.draw.rect(screen, PINK,
                         self.paddle)

    def move_paddle_left(self):
        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]:
            self.paddle.left -= 7
            if self.paddle.left < 0:
                self.paddle.left = 0
            print(self.paddle)


class Game:
    def __init__(self):
        self.run()
        Paddle()
        # Levels().draw_level_one()
    def run(self):
        while 1:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
            # fps lock, screen fill and method call for input
            clock.tick(60)
            screen.fill(BLACK)
            Paddle().draw_paddle()
            Paddle().move_paddle_left()
            pygame.display.flip()
# Creates instance of the game class, and runs it
if __name__ == "__main__":
    Game()
    Game().run()
答案

虽然我无法让您的代码实际绘制桨,但我注意到您在循环的每次迭代中都创建了一个新的Paddle实例,因此每次位置重置为300。

试试这个:

def run(self):
    paddle = Paddle()
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        # fps lock, screen fill and method call for input
        clock.tick(60)
        screen.fill(BLACK)
        paddle.draw_paddle()
        paddle.move_paddle_left()
        pygame.display.flip()

这样你就可以创建一个paddle对象,然后在每次迭代中重复使用它的值,它将继续向左移动直到它达到0。

以上是关于如何移动pygame rect?的主要内容,如果未能解决你的问题,请参考以下文章

Sprite比右侧pygame移动得更快

如何在Pygame中给pygame.sprite.rect矩形分配一个 "rect "属性?

使用Rect函数参数的Pygame类型错误

Pygame 不允许我将 float 用于 rect.move,但我需要它

为什么pygame rect不在正确的位置?

Pygame的矩形没有移动?