我正在使用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语法突出显示更少的延迟。无论哪种方式,我都很好奇人们想到的一些变通方法。感谢