如何检查飞船精灵和外星精灵是否在同一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
最佳答案
如果您想知道它们是否位于完全相同的x位置(例如在《太空侵略者》游戏中),则可以使用以下方法:
int enemyPosX = (int)enemy.position.x;
int shipPosX = (int)_ship.position.x;
if( enemy2.position.x < _ship.position.x)
{
// Do Something
}
您会注意到,浮点值已强制转换为“ ints”。这是因为一旦开始在操作中使用它们,很难获得完全相同的两个浮点数。最低位可能关闭,然后它们不相等。
您还可以检查它们是否彼此“真正接近”,其中“接近度”由游戏中的公差值定义:
if(fabs(enemy2.position.x - _ship.position.x) < NEAR_IN_X)
{
// Do Something
}
请注意,这是检查它们是否在x维度中“重叠”的检查。根据它们每次移动的距离,它们可能会在第一次之后继续重叠,因此您可能需要跟踪类似碰撞的事物的“状态”(例如{NOT_OVERLAPPING,BEGIN_OVERLAPPING,OVERLAPPING,END_OVERLAPPING})。这与使用物理引擎碰撞对象几乎一样。
即使您采用第一个解决方案仅执行“ int”转换,您仍可能必须处理多个“重叠”状态。
这个有帮助吗?