gpt4 book ai didi

Python/Pygame 向量数学

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:36 25 4
gpt4 key购买 nike

我在小型“战斗模拟”程序中的向量和向量数学方面遇到了一些麻烦。屏幕两侧各有 15 个“家伙”,位于不同的 X/Y 位置。当他们选择要射击的敌人时,我无法让他们以正确的角度射击。目前我用它来确定子弹射击后的路径。此代码与项目符号矩形和目标 X/Y 位置有关。

    diff = (self.startX - self.destX, self.startY - self.destY)
distance = math.sqrt(diff[0]**2 + diff[1]**2)
diff_norm = (diff[0] / distance, diff[1] / distance)
self.rect.x -= diff_norm[0]
self.rect.y -= diff_norm[1]

但这只是让项目符号全部移动到屏幕的左上角。蓝色/白色的大方 block 是随机移动的家伙,白色的小方 block 是子弹。

http://gyazo.com/8f219a6b0b561b72bcccdea7e325c51a(最好点击右上角的“...”来查看mp4格式的gif)

有些不动,有些直接飞起来......这里发生了什么?

最佳答案

问题是 Rect 中的 x 和 y 坐标都是整数,并且您设置的坐标每帧都会向下舍入到最接近的整数值。

因为您正在标准化 start->dest 向量,这意味着 diff_norm 中的所有值都将在 -1.0 到 1.0 的范围内,因此与移动的大小相比,发生的舍入是相当大的,足以完全摆脱它。

要解决这个问题,请将当前位置的值存储在子弹中,在发射子弹时初始化,您可以使用浮点计算进行操作,然后根据每帧的值分配矩形 x 和 y,例如:

self.positionX -= diff_norm[0]
self.positionY -= diff_norm[1]
self.rect.x = int(self.positionX)
self.rect.y = int(self.positionY)

这样,当前位置的小数部分就不会在每一帧中丢失。

关于Python/Pygame 向量数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com