Ios Cocos2d iphone:从外星飞船发射激光

Ios Cocos2d iphone:从外星飞船发射激光,ios,cocos2d-iphone,Ios,Cocos2d Iphone,如何检查飞船精灵和外星人精灵是否在同一个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 *lase

如何检查飞船精灵和外星人精灵是否在同一个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]];
    }
   }

如果您想知道它们是否处于完全相同的x位置,就像在游戏《太空入侵者》中一样,您可以使用如下方法:

int enemyPosX = (int)enemy.position.x;
int shipPosX = (int)_ship.position.x;
if( enemy2.position.x < _ship.position.x)
{
  // Do Something
}
int-enemyPosX=(int)敌方.position.x;
int shipPosX=(int)_ship.position.x;
如果(enemy2.position.x<_ship.position.x)
{
//做点什么
}
您将注意到浮点值已转换为“ints”。这是因为一旦开始在操作中使用两个浮点数,就很难得到完全相同的两个浮点数。最低阶位可能关闭,然后它们不相等

您还可以检查它们是否彼此“非常接近”,其中“接近度”由游戏中的公差值定义:

if(fabs(enemy2.position.x - _ship.position.x) < NEAR_IN_X)
{
   // Do Something
}
if(fabs(enemy2.position.x-\u ship.position.x)
请注意,这是一项检查,以查看它们在x维度中是否“重叠”。根据每次更新移动的距离,它们可能会在第一次更新后继续重叠,因此您可能需要跟踪类似碰撞事件的“状态”(例如,{不重叠、开始重叠、重叠、结束重叠})。这几乎与使用物理引擎处理碰撞对象时所做的相同

即使第一个解决方案只进行“int”转换,也可能需要处理多个“重叠”状态


这有帮助吗?

是的,这很有帮助。谢谢我昨天做的是把检查代码、碰撞代码和发射激光代码放在一个方法中。我把他们分开了,现在一切都好了DU应该考虑使用像BX2D这样的2-D物理引擎。有很多教程,它在基础中构建的形状之间有碰撞检测。
if(fabs(enemy2.position.x - _ship.position.x) < NEAR_IN_X)
{
   // Do Something
}