gpt4 book ai didi

ios - 如何从NSMutableArray设置实例变量?

转载 作者:行者123 更新时间:2023-12-01 18:01:14 25 4
gpt4 key购买 nike

因此,我正要开始减少意大利面条的代码。

因此,现在,我使用“for”循环将11种不同的恐龙图像放入NSMutableArray中。我还声明了CCSprite实例变量,希望在其中可以将每个恐龙图像设置为,以便可以检查边界框,设置位置等。因此,我将数组中的每个对象都指向了实例变量。此代码:

.h文件:

CCSprite *dinosaur1_c;
CCSprite *dinosaur2_c;
CCSprite *dinosaur3_c;
CCSprite *dinosaur4_c;
CCSprite *dinosaur5_c;
CCSprite *dinosaur6_c;
CCSprite *dinosaur7_c;
CCSprite *dinosaur8_c;
CCSprite *dinosaur9_c;
CCSprite *dinosaur10_c;
CCSprite *dinosaur11_c;

.m文件
NSMutableArray *dinoSprites = [[NSMutableArray alloc] init];

for( int i = 1, j = 0; i <= 11 && j <= 10; i++, j++ )
{
id dino = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"dinosaur%d-c.png", i]];
[dinoSprites addObject:dino];
[sceneSpriteBatchNode addChild:dino];
}


dinosaur1_c = (CCSprite *)[dinoSprites objectAtIndex:0];
dinosaur2_c = (CCSprite *)[dinoSprites objectAtIndex:1];
dinosaur3_c = (CCSprite *)[dinoSprites objectAtIndex:2];
dinosaur4_c = (CCSprite *)[dinoSprites objectAtIndex:3];
dinosaur5_c = (CCSprite *)[dinoSprites objectAtIndex:4];
dinosaur6_c = (CCSprite *)[dinoSprites objectAtIndex:5];
dinosaur7_c = (CCSprite *)[dinoSprites objectAtIndex:6];
dinosaur8_c = (CCSprite *)[dinoSprites objectAtIndex:7];
dinosaur9_c = (CCSprite *)[dinoSprites objectAtIndex:8];
dinosaur10_c = (CCSprite *)[dinoSprites objectAtIndex:9];
dinosaur11_c = (CCSprite *)[dinoSprites objectAtIndex:10];

这段代码确实有效,但是我敢肯定它可以减少。如何使用“for”循环设置每个这些实例变量?

我在其他方法中使用这些实例变量来设置位置,检查碰撞/相交,淡入效果等。

我放置了等效代码以更好地解释我要执行的操作:
NSMutableArray *dinoSprites = [[NSMutableArray alloc] init];

for( int i = 1, j = 0; i <= 11 && j <= 10; i++, j++ )
{
id dino = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"dinosaur%d-c.png", i]];
[dinoSprites addObject:dino];
[sceneSpriteBatchNode addChild:dino];

// Set instance variables
dinosaur%i_c = (CCSprite *)[dinoSprites objectAtIndex:j];
}

有没有办法实现我的要求?经过2.5个小时的搜索,我仍然一无所获。只是找到动画帧的解决方案。

我是否缺少一些小东西,还是应该以其他方式指向数组中的每个图像以设置其位置,淡入,检查边界框等?

任何想法/投入都将不胜感激!感谢您抽时间阅读! :D

最佳答案

而不是拥有11个CCSprite实例变量,您应该只拥有一个NSArray

因此,在您的.h中:

@property (strong) NSArray *dinoSprites;

在您的.m中,执行
@synthesize dinoSprites;

然后将您问题中的代码替换为:
NSMutableArray *newDinoSprites = [[NSMutableArray alloc] init];

for( int i = 1, j = 0; i <= 11 && j <= 10; i++, j++ )
{
id dino = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"dinosaur%d-c.png", i]];
[newDinoSprites addObject:dino];
[sceneSpriteBatchNode addChild:dino];
}

self.dinoSprites = [newDinoSprites copy];

然后,每当需要引用以前调用的内容(例如 dinosaur8_c)时,您只需使用 (CCSprite *)[dinoSprites objectAtIndex:7]即可。

关于ios - 如何从NSMutableArray设置实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com