首页 > 解决方案 > 如何将对象移动到特定坐标python pygame?

问题描述

我有一堆单独的线条,它们构成了“狗”的一个“形状”。

我希望能够将此形状放在屏幕上的任何位置。

例如,我的游戏会生成狗。如果玩家只有一条狗,我希望第一条生成的狗在顶部。如果他们有两个,我希望新的位于第一个之下。等等。

我正在使用 Python 和 PyGame,但我可以导入不同的模块。

到目前为止,这是我的游戏代码:

#initialise 
import pygame
pygame.init()

#colours
black = (0, 0, 0)
white = (255, 255, 255)


gameDisplay = pygame.display.set_mode((800, 600))
gameDisplay.fill(white)

#lines (dog)
pygame.draw.line(gameDisplay, black, (195, 250), (500, 250), 5) #back
pygame.draw.line(gameDisplay, black, (500, 250), (580, 450), 5) #tail
pygame.draw.line(gameDisplay, black, (580, 450), (480, 330), 5) #tail
pygame.draw.line(gameDisplay, black, (480, 330), (480, 500), 5) #back leg
pygame.draw.line(gameDisplay, black, (480, 500), (450, 500), 5) #back paw
pygame.draw.line(gameDisplay, black, (450, 500), (450, 350), 5) #back leg
pygame.draw.line(gameDisplay, black, (450, 350), (200, 350), 5) #belly
pygame.draw.line(gameDisplay, black, (200, 350), (200, 500), 5) #front leg
pygame.draw.line(gameDisplay, black, (200, 500), (170, 500), 5) #front paw
pygame.draw.line(gameDisplay, black, (170, 500), (170, 300), 5) #front leg
pygame.draw.circle(gameDisplay, black, (150, 260), 50, 5) #head

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

    pygame.display.update()

标签: pythonpython-3.xpygamedrawingshapes

解决方案


使用pygame.draw.lines而不是pygame.draw.lines. pygame.draw.lines绘制多个连续的直线段。

例如:

points = [(195, 250), (500, 250), (580, 450), (480, 330)]
pygame.draw.lines(gameDisplay, black, False, points, 5) 

使用列表推导生成一个带有翻译坐标的新列表:

def draw_lines(surf, color, trans_x, trans_y, points, width=0):
    trans_points = [(trans_x + p[0], trans_y + p[1]) for p in points]
    pygame.draw.lines(surf, color, False, trans_points, width) 
draw_lines(gameDisplay, black, False, 100, 100, points, 5)

推荐阅读