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

时间:2014-10-15 10:54:13

标签: ios objective-c xcode sprite-kit

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

我想关注造成麻烦的单行代码。 正如你在图像中看到的那样,我总是得到0.600000024的结果,无论" totalCajas"的价值如何。是。在这种情况下,变量" totalCajas"等于10,minaPek.size.width值在这种情况下总是300,所以通常

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

所以我不明白为什么我会收到这个错误。任何帮助都会被贬低!!

enter image description here

这是整个方法 我非常抱歉,因为评论和变量名称都是西班牙语,但我认为使用直觉或工具进行翻译并不是很难。 让我解释一下这个方法的两个简单的事情,param pos(position)是度 它与精灵的x位置完全一样。 param distMoon是y位置。它实际上是半径。 大小显然是精灵的大小。非常感谢您提前学习learnCocos2D因为他总是更快:)

    -(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];
    }

0 个答案:

没有答案