为什么比较浮点值这么困难?

EgemenHamutçu

我是Unity平台的新手。我有一个2D游戏,其中包含10个垂直垂直排列的盒子。当框离开屏幕时,我将其位置更改为顶部框上方。因此,链条无限旋转,就像重复视差滚动背景一样。

但是我通过将框的位置与指定的float值进行比较来检查框是否会离开屏幕。我在下面分享我的代码。

void Update () {
    offSet = currentSquareLine.transform.position;
    currentSquareLine.transform.position = new Vector2 (0f, -2f) + offSet;

    Vector2 vectorOne = currentSquareLine.transform.position;
    Vector2 vectorTwo = new Vector2 (0f, -54f);

    if(vectorOne.y < vectorTwo.y) {
        string name = currentSquareLine.name;
        int squareLineNumber = int.Parse(name.Substring (11)) ;
        if(squareLineNumber < 10) {
            squareLineNumber++;
        } else {
            squareLineNumber = 1;
        }
        GameObject squareLineAbove = GameObject.Find ("Square_Line" + squareLineNumber);

        offSet = (Vector2) squareLineAbove.transform.position + new Vector2(0f, 1.1f);
        currentSquareLine.transform.position = offSet;
    }
}

如您所见,当我比较vectorOne.y和vectorTwo.y时,事情变得很丑陋。即使我在上面的代码中给出了准确的矢量值,也有一些盒子会加长,有些盒子会缩短彼此之间的距离。

我已经寻找了一个星期的解决方案,并尝试了很多代码,例如Mathf.rox,Mathf.Round,但是没有一个能够正确比较float值。如果unity从未以我期望的方式比较浮点值,那么我认为我需要改变自己的方式。

我正在等待您的忠告,谢谢!

编辑

这是我的屏幕。我有10条竖线垂直向下。

屏幕结构

当Square_Line10离开屏幕时。我将其位置更新为Square_Line1的上方,但它们之间的距离意外增加。

EgemenHamutçu

好的,我找到了一种像魅力一样的解决方案。

我需要使用一个数组,并在两个循环中检查它们。第一个移动框,第二个检查框是否偏离屏幕,如下所示

public GameObject[] box;
float boundary = -5.5f;
float boxDistance = 1.1f;
float speed = -0.1f;

// Update is called once per frame
void Update () {
    for (int i = 0; i < box.Length; i++) {
        box[i].transform.position = box[i].transform.position + new Vector3(0, speed, 0);
    }

    for (int i = 0; i < box.Length; i++)
    {
        if(box[i].transform.position.y < boundary)
        {
            int topIndex = (i+1) % box.Length;

            box[i].transform.position = new Vector3(box[i].transform.position.x, box[topIndex].transform.position.y + boxDistance, box[i].transform.position.z);
            break;
        }
    }
}

我将其附加到MainCamera。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这是浮点值?

来自分类Dev

为什么“ Sum CPUCreditBalance”的值这么高?

来自分类Dev

为什么我的空值检查这么慢?

来自分类Dev

为什么我的空间哈希值这么慢?

来自分类Dev

为什么PHP不为浮点比较提供Epsilon常数?

来自分类Dev

为什么比较浮点数和无穷大?

来自分类Dev

为什么不能使用memcmp()函数比较浮点类型?

来自分类Dev

为什么有这么多方法可以比较平等?

来自分类Dev

为什么LOOP这么慢?

来自分类Dev

为什么拆分这么慢

来自分类Dev

为什么PTVS这么慢?

来自分类Dev

为什么goroutines这么慢?

来自分类Dev

为什么ping这么慢?

来自分类Dev

为什么解开这么慢

来自分类Dev

为什么mSATA这么贵

来自分类Dev

为什么乳胶这么大?

来自分类Dev

为什么Powershell这么慢?

来自分类Dev

为什么交换这么慢?

来自分类Dev

Python:为什么足够大的浮点值是无限的?

来自分类Dev

为什么从int强制转换为浮点值?

来自分类Dev

为什么浮点值必须声明两次?

来自分类Dev

为什么这些浮点值在Sass中不相等?

来自分类Dev

为什么 javascript 中的 slice() 接受浮点值?

来自分类Dev

为什么在控制器上下文之外获取路由值如此困难?

来自分类Dev

为什么阻止DDoS如此困难?

来自分类Dev

为什么IEEE 754会保留这么多NaN值?

来自分类Dev

为什么神经网络中的激活函数取这么小的值?

来自分类Dev

为什么创建带有引用F#中的大值的字段的记录这么慢?

来自分类Dev

为什么在scala中,将整数和浮点数(例如71 == 71.0)进行比较是正确的?