Ios 使用spriteKit进行错误的浮点计算,总是得到相同的结果

Ios 使用spriteKit进行错误的浮点计算,总是得到相同的结果,ios,objective-c,xcode,sprite-kit,Ios,Objective C,Xcode,Sprite Kit,我正在做一个方法,创建一个定制的精灵,它有一个平台图像和许多不可见的盒子来做物理身体。在这种方法中,我制作了三个主要对象:精灵图像(平台)、两个带有物理实体的“墙”(一个在精灵的左上角,一个在精灵的右上角)和地面,这是沿着墙之间的地面移动的盒子 我想把重点放在一行代码上,这会带来麻烦。 如图所示,无论“totalCajas”的值是多少,我都得到了0.600000024的结果。在这种情况下,变量“totalCajas”等于10,minaPek.size.width值在这种情况下始终为300,因此通

我正在做一个方法,创建一个定制的精灵,它有一个平台图像和许多不可见的盒子来做物理身体。在这种方法中,我制作了三个主要对象:精灵图像(平台)、两个带有物理实体的“墙”(一个在精灵的左上角,一个在精灵的右上角)和地面,这是沿着墙之间的地面移动的盒子

我想把重点放在一行代码上,这会带来麻烦。 如图所示,无论“totalCajas”的值是多少,我都得到了0.600000024的结果。在这种情况下,变量“totalCajas”等于10,minaPek.size.width值在这种情况下始终为300,因此通常情况下

(minaPek.size.width/500==0.6)-(10/100==0.1)
应等于0.5

所以我不明白为什么我会犯这个错误。任何帮助都将不胜感激

让我来解释两件关于这个方法的简单事情,参数pos(position)是度,它和精灵的x位置完全一样

参数
distMoon
y
位置。实际上是半径。 大小显然就是精灵的大小。提前非常感谢您的LearnCos2D,因为他总是跑得更快

    -(void)plataformaCustom:(CGFloat)pos Altura:(CGFloat)distMoon size:(CGSize)Size
{

XYZCajas *minaPek = [[XYZCajas alloc]crearMinaMed];
[minaPek setSize:Size];
[minaPek setDistanciaLuna:distMoon];
[self.world addChild:minaPek];
NSArray *temp = [NSArray arrayWithObjects:minaPek, nil];
[objetosMovimiento addObjectsFromArray:temp];
[superCaja setObjectsMovimiento:objetosMovimiento];

    //A CONTINUACION creo un int con el numero total de cajas. Me servirá para posteriormente posicionarlas en los extremos/saber cuantos grados tienen
    int totalCajas = minaPek.size.width / 20;
    //A CONTINUACION Creo un bool que me hará saber cuando tengo colocada la pared izquierda
    bool paredIzquierda = NO;
    bool paredDerecha = NO;
    for (totalCajas; totalCajas >=0; totalCajas--)
    {

        //APUNTE Cada 100 de ancho de la mina = 0.2 grados de distancia de la pared
        // la distancia entre caja y caja es de 0.1


        //A CONTINUACION
        //coloco la pared izquierda.
        if (paredIzquierda == NO)
        {
            XYZCajas *paredIzq =[[XYZCajas alloc]crearParedSinImagen];
            [paredIzq setGrados:-1*(minaPek.size.width/500)];
            [paredIzq setDistanciaLuna:distMoon+5];
            [paredIzq setName:@"paredIzqPrueba"];
            [self.world addChild:paredIzq];
            NSArray *temp2 = [NSArray arrayWithObjects:paredIzq, nil];
            [objetosCajas addObjectsFromArray:temp2];
            [superCaja setObjects:objetosCajas];
            paredIzquierda = YES;
            totalCajas --;
        }

        //A CONTINUACION
        //coloco la pared derecha
        if (paredDerecha == NO)
        {
            XYZCajas *paredDer =[[XYZCajas alloc]crearParedSinImagen];
            [paredDer setGrados:minaPek.size.width/500];
            [paredDer setDistanciaLuna:distMoon+5];
            [self.world addChild:paredDer];
            NSArray *temp2 = [NSArray arrayWithObjects:paredDer, nil];
            [objetosCajas addObjectsFromArray:temp2];
            [superCaja setObjects:objetosCajas];
            paredDerecha = YES;
            totalCajas --;
        }

        //A CONTINUACION
        //creamos cajas
        XYZCajas *caja22 =[[XYZCajas alloc]crearCajaSinImagen];
        float gradosCaja = ((minaPek.size.width/500) - (totalCajas/100));
        [caja22 setGrados:gradosCaja];
        [caja22 setDistanciaLuna:distMoon+20];
        [self.world addChild:caja22];
        NSArray *temp2 = [NSArray arrayWithObjects:caja22, nil];
        [objetosCajas addObjectsFromArray:temp2];
        [superCaja setObjects:objetosCajas];
    }

totalCajas是int,因此10/100将是0。用500.f和100.f试试。一般来说,如果你使用浮点数,最好在每个浮点数后加上.f。这样可以帮助编译器优化代码,而且不会发生整数除法;)我不知道这个窍门,但从现在起我就这么做了,非常感谢!