更改循环中的代码 - 目标C.

时间:2013-12-31 04:38:28

标签: c++ objective-c loops optimization cocos2d-iphone

我正在使用cocos2d为iOS编写一个二维游戏,每个游戏图层类都有很多精灵对象。

因此,对于游戏层中这些精灵的初始化,我有很多代码对每个对象都做了几乎相同的事情。我想知道的是,而不是在初始化代码中执行30次:

    self.sprite1 = [InteractiveSprite spriteWithSpriteFrameName:@"herospriteB04.png"];
    self.sprite1.spriteCode = 1;

    self.sprite1.orientation = 3;
    if (self.hero.sprite1_Orientation)
    {
        self.sprite1.orientation = self.hero.sprite1_Orientation;
    }
    if (self.sprite1.orientation == 1)
    {
        [self.sprite1 setDisplayFrame:[[spriteBWalkDown frames] objectAtIndex:0]];
    }
    else if (self.sprite1.orientation == 2)
    {
        [self.sprite1 setDisplayFrame:[[spriteBWalkUp frames] objectAtIndex:0]];
    }
    else if (self.sprite1.orientation == 3)
    {
        [self.sprite1 setDisplayFrame:[[spriteBWalkRight frames] objectAtIndex:0]];
    }
    else
    {
        [self.sprite1 setDisplayFrame:[[spriteBWalkLeft frames] objectAtIndex:0]];
    }

    [self schedule:@selector(updateSprite1) interval:(2.0f)];

    if (self.hero.sprite1position.x != 0)
    {
        self.sprite1.position = self.hero.sprite1position;
    }
    else
    {
        NSMutableDictionary *sprite1start = [objects objectNamed:@"spriteStart1"];
        double x1 = [[sprite1start valueForKey:@"x"]floatValue];
        double y1 = [[sprite1start valueForKey:@"y"]floatValue];
        self.sprite1.position = ccp(x1,y1);
    }

    [self.theHKMap addChild:sprite1 z:self.bgLayer.zOrder];

    CGPoint tileCoord1 = [self tileCoordForPosition:sprite1.position];    
    int tileGID1 = [self.bgLayer tileGIDAt:tileCoord1];
    [self.bgLayer removeTileAt:tileCoord1];
    [self.bgLayer setTileGID:(tileGID1 + 1) at:tileCoord1];

以上是非常漫长而且笨拙的,我不喜欢在每个单独的地图类中拥有30倍的代码。

所以我的问题是:经验丰富的程序员如何将这样的东西放到循环中,以便字符串sprite1的每个实例都可以用sprite2等替换?

据我所知,即使你可以在循环中“创建”代码,在编译时也无关紧要,这当然比代码长度更重要。除非在编译代码中有显着的优化,否则我可能不会改变它,即使它确实减少了代码的长度,从而使XCode语法突出显示更少的延迟。无论哪种方式,我都很好奇人们想到的一些变通方法。感谢

0 个答案:

没有答案