如何检查船只精灵和外星精灵是否在同一个x轴上?我做了以下事情。他们的x位置在某些时候没有达成。注意:敌人从右向左移动,船从左向右移动。
if(enemy2.visible) {
NSLog(@"enemy x %f", enemy2.position.x);
NSLog(@"ship x %f", _ship.position.x);
if( enemy2.position.x < _ship.position.x)
{
CCSprite *laser = [_enemiesLasers objectAtIndex:_nextEnemyLaser];
if (_nextEnemyLaser >= _enemiesLasers.count) _nextEnemyLaser = 0;
_nextEnemyLaser++;
[laser stopAllActions];
laser.position=enemy2.position;
// laser.rotation=45;
laser.visible=YES;
[laser runAction:[CCSequence actions:[CCMoveTo actionWithDuration:5 position:ccp(_ship.position.y, laser.position.x)], [CCCallFuncN actionWithTarget:self selector:@selector(setInvisible:)] , nil]];
}
}
这是NSLog输出:
2013-12-26 23:54:24.300 SpaceGame[3559:907] enemy x 540.000000
2013-12-26 23:54:24.301 SpaceGame[3559:907] ship x 291.999969
2013-12-26 23:54:27.301 SpaceGame[3559:907] enemy x 540.000000
2013-12-26 23:54:27.302 SpaceGame[3559:907] ship x 109.999985
2013-12-26 23:54:30.366 SpaceGame[3559:907] enemy x 540.000000
2013-12-26 23:54:30.366 SpaceGame[3559:907] ship x 269.999969
答案 0 :(得分:2)
如果你想知道他们是否处于完全相同的x位置,就像游戏太空入侵者一样,你可以使用这样的东西:
int enemyPosX = (int)enemy.position.x;
int shipPosX = (int)_ship.position.x;
if( enemy2.position.x < _ship.position.x)
{
// Do Something
}
您将注意到浮点值已转换为“整数”。这是因为一旦在操作中开始使用它们,就很难得到完全相同的两个浮点数。最低位可能是关闭的,然后它们不相等。
您还可以检查它们是否“彼此”非常接近,其中“亲密度”由游戏中的公差值定义:
if(fabs(enemy2.position.x - _ship.position.x) < NEAR_IN_X)
{
// Do Something
}
请注意,这是检查它们是否在x维度中“重叠”。根据他们移动每次更新的距离,它们可能会在第一次之后继续重叠,因此您可能需要跟踪类似碰撞事物的“状态”(例如{NOT_OVERLAPPING,BEGIN_OVERLAPPING,OVERLAPPING,END_OVERLAPPING})。这与物理引擎碰撞对象几乎相同。
即使您采用第一个只进行“int”转换的解决方案,您仍可能需要处理多个“重叠”状态。
这有用吗?