python - 如何使用 pygame 在 python 中绘制虚线?

标签 python pygame

我正在使用 pygame 在 python 中创建一个乒乓球游戏,我希望在中间画一条虚线。我认为我有正确的代码来绘制虚线,但它不起作用。

   for i in range(0, HEIGHT, HEIGHT//20):
        if i % 2 == 1:
            continue
        pygame.draw.rect(win, WHITE, (WIDTH//2 - 5, i, 10, HEIGHT//20))

我尝试了这个并期望它画出一条虚线,但它没有。 这是我的完整代码:

import pygame
pygame.init()

WIDTH, HEIGHT = 1200, 800
NAME = "Pong"
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption(NAME)

WHITE = (255,255,255)
BLACK = (0,0,0)

PADDLE_WIDTH, PADDLE_HEIGHT = 10, 200

FPS = 60

class Paddle:
    COLOUR = WHITE
    VEL = 5

    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height

    def draw(self, win):
        pygame.draw.rect(win, self.COLOUR, (self.x, self.y, self.width, self.height))

    def move(self, up):
        if up:
            self.y -= self.VEL
        else:
            self.y += self.VEL


def draw(win, paddles):
    win.fill(BLACK)
    for paddle in paddles:
        paddle.draw(win)

    for i in range(0, HEIGHT, HEIGHT//20):
        if i % 2 == 1:
            continue
        pygame.draw.rect(win, WHITE, (WIDTH//2 - 5, i, 10, HEIGHT//20))


    pygame.display.update()

def handle_paddle_movement(keys, left_paddle, right_paddle):
    if keys[pygame.K_w] and left_paddle.y - left_paddle.VEL > 0:
        left_paddle.move(True)
    if keys[pygame.K_s] and left_paddle.y + left_paddle.VEL + left_paddle.height < HEIGHT:
        left_paddle.move(False)
    if keys[pygame.K_UP] and right_paddle.y - right_paddle.VEL > 0:
        right_paddle.move(True)
    if keys[pygame.K_DOWN] and right_paddle.y + right_paddle.VEL + right_paddle.height < HEIGHT:
        right_paddle.move(False)

def main():
    run = True
    clock = pygame.time.Clock()

    left_paddle = Paddle(PADDLE_WIDTH, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT)
    right_paddle = Paddle(WIDTH - PADDLE_WIDTH*2, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT)

    while run:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                break 

        keys = pygame.key.get_pressed()
        handle_paddle_movement(keys, left_paddle, right_paddle)

        draw(WIN, [left_paddle, right_paddle])
    pygame.quit()


if __name__ == '__main__':
    main()

最佳答案

这是您在每个循环中绘制的矩形:

#    x         y  width  height
(WIDTH//2 - 5, i, 10, HEIGHT//20)

您应该将 HEIGHT//20 替换为较小的值,这样每个矩形就不会那么高。尝试这样的事情:

pygame.draw.rect(win, WHITE, (WIDTH//2 - 5, i, 10, 20))

关于python - 如何使用 pygame 在 python 中绘制虚线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74978204/

相关文章:

python - 特定时间范围内 pandas 数据帧的值的总和

Python 系统参数读取 '&'

python - Kivy ObjectProperty 更新标签文本

python - 通过鼠标移动旋转当前播放的动画

python - pycharm 不识别 pygame 包

python - 我只能检查二维数组的第一列

python - 在单个单词字符串 PYTHON 中查找数字字符

python imaplib - 将电子邮件标记为未读或未看到

python - Pygame轨道模拟问题

python - 如何在 Debian jessie 上安装适用于 Python 3 的 pygame?