Ios 使用spriteKit进行错误的浮点计算,总是得到相同的结果
我正在做一个方法,创建一个定制的精灵,它有一个平台图像和许多不可见的盒子来做物理身体。在这种方法中,我制作了三个主要对象:精灵图像(平台)、两个带有物理实体的“墙”(一个在精灵的左上角,一个在精灵的右上角)和地面,这是沿着墙之间的地面移动的盒子 我想把重点放在一行代码上,这会带来麻烦。 如图所示,无论“totalCajas”的值是多少,我都得到了0.600000024的结果。在这种情况下,变量“totalCajas”等于10,minaPek.size.width值在这种情况下始终为300,因此通常情况下Ios 使用spriteKit进行错误的浮点计算,总是得到相同的结果,ios,objective-c,xcode,sprite-kit,Ios,Objective C,Xcode,Sprite Kit,我正在做一个方法,创建一个定制的精灵,它有一个平台图像和许多不可见的盒子来做物理身体。在这种方法中,我制作了三个主要对象:精灵图像(平台)、两个带有物理实体的“墙”(一个在精灵的左上角,一个在精灵的右上角)和地面,这是沿着墙之间的地面移动的盒子 我想把重点放在一行代码上,这会带来麻烦。 如图所示,无论“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。这样可以帮助编译器优化代码,而且不会发生整数除法;)我不知道这个窍门,但从现在起我就这么做了,非常感谢!