PyGame,让坦克炮跟随你的光标,也是很好的碰撞实现实践

2024-09-30 08:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是pygame的新手,我正在尝试制作一款平板游戏。我还计划使用套接字在其中添加多人游戏功能。玩家就像可以跳跃的坦克,你可以移动鼠标将坦克的枪对准光标的方向,然后在你点击时射击

我所做的是画了一条矩形,这是坦克的主体,以及一条从矩形中心到光标位置的线,这应该是坦克的枪。现在,绘制的线不是固定的,如果我将鼠标移离水箱,线的长度将跟随鼠标光标。这就是它的样子: enter image description here

我不知道如何使它成为一个固定长度,我对这个问题做了一些数学说明,可能会有所帮助: enter image description here 其中A是坦克的中心,B是鼠标的位置,R是坦克炮的长度,C是坦克炮的终点。目标是在给定A、B和r的情况下得到C,同时还要考虑到A和B的距离可以小于半径(因为鼠标可以去任何它想去的地方)。虽然我不确定插图是否正确,因为有可能鼠标会进入圆圈,老实说,除此之外我还很困惑

还有最后一件事,是否有实现碰撞的最佳方法?因为我的解决方案是只保存每个平台的坐标,然后按如下方式执行if语句:

如果玩游戏>;平台1Y:停止坠落

如果playerX>;平台2X:停止向左移动

如果游戏性<;平台3Y:停止向上移动

如果playerX<;平台4Y:停止向右移动


Tags: ltgt游戏平台鼠标中心pygame计划
1条回答
网友
1楼 · 发布于 2024-09-30 08:31:14

必须计算从AB的方向向量。计算唯一向量(长度为1的向量)并将其缩放到半径r。将向量添加到点A。结果是点C
在pygame中,这种计算非常简单。使用^{}和操作scale_to_length()获得向量(V)形式AC。最后将V添加到C

def point_on_circle(ax, ay, bx, by, radius):
    if ax == bx and ay == by:
        return ax, ay

    A = pygame.math.Vector2(ax, ay)
    B = pygame.math.Vector2(bx, by)

    V = B - A
    V.scale_to_length(radius)

    C = A + V
    return C.x, C.y  

您已将对象的中心传递给参数(ax, ay)。可以使用^{}计算矩形的中心。例如:

player_rect = pygame.Rect(playerX, playerY, playerWidth, playerHeight)
ax, ay = player_rect.center 

相关问题 更多 >

    热门问题