get_rect()在以下程序中做什么?为什么使用它?

时间:2018-07-28 07:54:21

标签: python pygame

我在这里浏览了一个教程-www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python。在第4步中,他使用了以下语句:

# 6.1 - Set player position and rotation
position = pygame.mouse.get_pos()
angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))
playerrot = pygame.transform.rotate(player, 360-angle*57.29)
playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2)
screen.blit(playerrot, playerpos1) 

他到底做了什么?他为什么这样做?

3 个答案:

答案 0 :(得分:0)

我认为get_rect()是获取矩形对象的一种方法,然后他获取其width属性以计算下一个玩家的位置。我猜这个方法是在代码中的某个地方定义的。也许还会看到其余的代码。

答案 1 :(得分:0)

他将其用作计算兔子旋转后移动的方法,方法是获取兔子图像的矩形并将其分成两半,以获取兔子位置的(x,y)变化:

------                                        ---------
|X   |    ---->  Rotate 90 degrees   ---->    |      X|
|    |                                        |       |
------                                        ---------

答案 2 :(得分:0)

您传递给pygame.Surface.blit的坐标是左上角的坐标。我认为第4步中的playerpos应该是图像/表面的中心位置,因此您需要减去表面的一半宽度和一半高度才能获得左上角的坐标(在这里将其钝化) )。作者使用pygame.Surface.get_rect方法获得具有旋转表面宽度和高度的rect,但他也可以使用pygame.Surface.get_width.get_height方法。

每次旋转后,playerrot曲面的大小将有所不同,因此您需要再次调用get_rect方法以获取具有已更新宽度和高度的新rect,您需要调整该宽度和高度坐标。


顺便说一句,似乎在此行中添加3226会导致旋转问题。

angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))

这应该可以正常工作:

angle = math.atan2(position[1]-playerpos[1], position[0]-playerpos[0])

也可以将pygame.Rect用作blit位置,因此您可以执行此操作以创建一个具有旋转曲面大小且以playerpos作为center坐标的矩形:

playerpos1 = playerrot.get_rect(center=playerpos)