我有一个数组,有两个气球纹理,一个绿色和一个红色。我在app.Basically的开头有12个绿色气球对象,我想要一个随机的绿色气球让每个second.If变成红色,任何人都会非常感激。
init方法
balloonTextures = [NSMutableArray array];
[balloonTextures addObject:[SPTexture textureWithContentsOfFile:@"greenballoon.png"]];
[balloonTextures addObject:[SPTexture textureWithContentsOfFile:@"redballoon.png"]];
[balloonTextures retain];
playFieldSprite = [SPSprite sprite];
[self addChild:playFieldSprite];
[self addBalloon];
添加气球方法
-(void)addBalloon
{
for(int i = 0; i < 12; i++)
{
SPImage *image = [SPImage imageWithTexture:[balloonTextures objectAtIndex:0]];
image.x = 40*i;
image.y = 10 ;
[playFieldSprite addChild:image];
}
}
发布于 2013-05-09 23:28:46
发布于 2013-05-09 23:46:58
您可以使用CADisplayLink而不是NSTimer。原因是CADisplayLink将其绘图与显示器的刷新率同步。
如何设置CADisplayLink:
id displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(changeBalloonTexture)];
[displayLink setFrameInterval:60]; // refresh rate is 60fps, 1=60fps, 60=1fps
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
如何检查特定设备是否支持CADisplayLink:
// code from cocos2d
displayLinkSupported = FALSE;
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
displayLinkSupported = TRUE;
发布于 2013-05-10 00:16:49
为此,您需要跟踪绿色气球&随机将其中一个更改为红色。
将所有气球精灵放在一个NSArray
中,比如balloonArray
&安排一个计时器来每秒运行一个方法。在该方法中,迭代balloonArray
,并将所有绿色气球收集到另一个数组greenBalloonsArray
中。
然后使用arch4random()
方法生成一个从0到greenBalloonsArray
长度的随机数(索引)。使用随机数作为新创建的greenBalloonsArray
的索引,以获取balloonSprite并将其纹理更改为红色。
// Sudo Code
// Add all objects to one array
NSMutableArray *balloonsArray = [[NSMutableArray alloc] initWithObjects: ..... ];
- (void) timerMethod
{
__block NSMutableArray *greenBalloonsArray = [[NSMutableArray alloc] init];
[balloonsArray enumerateObjectsUsingBlock:^(BalloonSprite *object, NSUInteger idx, BOOL *stop) {
if (object.isGreen)
[greenBalloonsArray addObject:object];
}];
int index = arc4random() % greenBalloonsArray.count;
GreenBallonArray * greenBalloon = [greenBalloonsArray objectAtIndex:index];
[greenBallon turnToRed];
}
https://stackoverflow.com/questions/16465293
复制相似问题