我在这里浏览了一个教程-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)
他到底做了什么?他为什么这样做?
答案 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,您需要调整该宽度和高度坐标。
顺便说一句,似乎在此行中添加32
和26
会导致旋转问题。
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)