繁体   English   中英

Python / Pygame矢量数学

[英]Python/Pygame Vector Math

我在一个小的“战斗模拟”程序中遇到了一些关于向量和向量数学的麻烦。 屏幕的每一侧有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]

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

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM