Objective c 阵列中的精灵

Objective c 阵列中的精灵,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,所以,对于我的游戏,我将多个精灵添加到一个数组中,我添加的精灵越多,游戏开始运行的速度就越快?我想我的问题是,添加这样的精灵,然后在for循环中调用它们的属性会产生问题吗?或者问题出在别处。我发现添加更多的“地面”精灵会增加跳跃高度、移动速度和滚动速度。我应该切换到平铺来解决这个问题吗 CCSprite *ground = [CCSprite spriteWithFile:@"testlevel 5.png"]; [ground setPosition:ccp(520,

所以,对于我的游戏,我将多个精灵添加到一个数组中,我添加的精灵越多,游戏开始运行的速度就越快?我想我的问题是,添加这样的精灵,然后在for循环中调用它们的属性会产生问题吗?或者问题出在别处。我发现添加更多的“地面”精灵会增加跳跃高度、移动速度和滚动速度。我应该切换到平铺来解决这个问题吗

 CCSprite *ground = [CCSprite spriteWithFile:@"testlevel 5.png"];
            [ground setPosition:ccp(520, 10)];
            [ground setScale:1.0];
            //[ground setScaleX:(2 * ground.contentSize.width)];
            [self addChild:ground z:0];
            [boxes addObject:ground];

            ground = [CCSprite spriteWithFile:@"testlevel 4.png"];
            [ground setPosition:ccp(ground.contentSize.width/2 +400, -50)];
            [ground setScale:1.0];
            //[ground setScaleX:(2 * ground.contentSize.width)];
            [self addChild:ground z:0];
            [boxes addObject:ground];

            ground = [CCSprite spriteWithFile:@"testlevel 3.png"];
            [ground setPosition:ccp(ground.contentSize.width/2 +280, -10)];
            [ground setScale:1.0];
            //[ground setScaleX:(2 * ground.contentSize.width)];
            [self addChild:ground z:0];
            [boxes addObject:ground];
上面这一段是我将图像添加到数组中的地方,当我想检查我的角色精灵和地面之间的交点时,我使用一个for循环,如下所示:

gravity -= 2 ;


for(CCSprite *ground in boxes){

    if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && !jump && (_character.position.y > ground.position.y + ground.contentSize.height/2 -20) && _character.position.x > ground.position.x - ground.contentSize.width/2 && facingLeft)
    {
        _character.position = ccp(_character.position.x, ground.position.y + ground.contentSize.height/2 + _character.contentSize.height/2-.001);
        falling = NO;
        onGround = YES; 
        gravity = 0;
        if(!_moving){
            [_character setDisplayFrame:
             [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"1-1.png"] ];
        }
    }

    else  if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && !jump && (_character.position.y > ground.position.y + ground.contentSize.height/2-20) && _character.position.x < ground.position.x + ground.contentSize.width/2 && !facingLeft)
    {
        _character.position = ccp(_character.position.x, ground.position.y + ground.contentSize.height/2 + _character.contentSize.height/2-.001);
        falling = NO;
        onGround = YES;
        gravity = 0;
        if(!_moving){
            [_character setDisplayFrame:
             [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"1-1.png"] ];
        }
    }

    else if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && (targetX <= 0) && (_character.position.y +_character.contentSize.height < ground.position.y + ground.contentSize.height) && (_character.position.x > ground.position.x) && (gp.isControlling && (gp.controlQuadrant == 2 || gp.controlQuadrant == 3)))
    {
        backgroundX = 0;
        targetX = 0;

    }
    else if(CGRectIntersectsRect(_character.boundingBox, ground.boundingBox) && (_character.position.y +_character.contentSize.height < ground.position.y + ground.contentSize.height) && (_character.position.x < ground.position.x) && (gp.isControlling && (gp.controlQuadrant == 0 || gp.controlQuadrant == 1)))
    {

        backgroundX = 0;
        targetX = 0;
    }

    else
    {
        normalForce = 0;
        jump = NO;
        falling = YES;
        doubleJump = 0;
    }


   // totalForce = normalForce + gravity;
   // [_character setPosition:ccp(_character.position.x, _character.position.y+totalForce)];
       }
 totalForce = normalForce + gravity;
if(gravity == 0) {
    falling = NO;
    NSLog(@"Gravity = 0"); 
}

[_character setPosition:ccp(_character.position.x + targetX, _character.position.y + totalForce)];
gravity -=1;
我把这个值加到我的角色位置上,重力在一个盒子上时被设置为0。玩家的左/右由一个操纵杆控制,该操纵杆仅通过勾号功能更新速度。如果需要更多的信息,请让我知道,但是,由于未知原因,在阵列中添加更多名为地面的精灵会改变速度。任何帮助都将不胜感激

这是跳跃的空位函数

-(void)jumpTapped
{
    NSLog(@"PRESSED");
    if(!falling && onGround){
        doubleJump += 1;
        gravity += 10;
        jump = YES;
        onGround = NO;
        NSLog(@"JUMPING"); 
    }
}
在代码中

} else {
    normalForce = 0;
    jump = NO;
    falling = YES;
    doubleJump = 0;
}

将jump设置为NO,因此如果它在循环中运行的第一个精灵与任何if语句都不匹配,它将默认为该值。然后,下一次运行时,跳转将被设置为“否”,这会从您按下按钮时抛出初始值,因此,使玩家跳转的代码将永远不会运行

您能写出整个for(CCSprite*框中地面)代码吗?我有一种感觉,它与你在其中的代码有关,这应该是所有的事情。因此,在简要查看代码后,我可以告诉你,我猜应该只有一个if语句返回true,对吗?当你在循环中运行时,如果有多个sprite适合任何if语句,它将继续发挥作用。也就是说,如果有两个框的边界框相交,并且您更改了重力或任何其他变量,它将不止一次这样做。所以它看起来像是在改变数组中每个精灵的一个变量。我会在每个if语句中添加一个NSLog,然后运行它来查看何时调用正确,这样我就可以通过将位置更新移到for循环之外来解决速度问题,但是现在,精灵从一开始就掉了下来,因为它是在地上繁殖的,落地很好。问题是一旦他落地,我就不能再跳了。我有一个NSLog告诉我他什么时候在地上,什么时候按按钮,什么时候跳。它报告说,他应该跳,但重力没有得到更新,我将编辑代码,以包括这跳等于否只是检查看看天气或没有按下按钮,我能够通过添加重力<0子句到我的if语句来解决问题。非常感谢你!这让我很头疼,但现在已经好了!不过,我可能很快就会切换到平铺,以节省为可碰撞对象输入坐标的时间。很高兴它成功了,您的if语句也基于跳转变量的碰撞检测。i、 e.在您的if声明中,它说&&!jump&&意味着如果jump设置为NO,那么它将跳过if语句