Iphone nsarray每秒随机切换图像纹理

Iphone nsarray每秒随机切换图像纹理,iphone,ios,objective-c,Iphone,Ios,Objective C,我有一个数组,有两个气球纹理,一个是绿色,一个是红色。我在应用程序的开头有12个绿色气球对象。基本上我希望每秒钟有一个随机的绿色气球变为红色。如果有人能帮忙,我将不胜感激 初始方法 balloonTextures = [NSMutableArray array]; [balloonTextures addObject:[SPTexture textureWithContentsOfFile:@"greenballoon.png"]]; [balloonTextures a

我有一个数组,有两个气球纹理,一个是绿色,一个是红色。我在应用程序的开头有12个绿色气球对象。基本上我希望每秒钟有一个随机的绿色气球变为红色。如果有人能帮忙,我将不胜感激

初始方法

    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];
      }
  }
-(void)addBalloon
{
对于(int i=0;i<12;i++)
{
SPImage*图像=[SPImage IMAGEWITH纹理:[气球纹理对象索引:0]];
图像x=40*i;
图像y=10;
[playFieldSprite addChild:图片];
}
}

获取随机数:

#include <stdlib.h>

int r = arc4random() % 12;
#包括
int r=arc4random()%12;

使用每秒调用的NSTimer:

您可以使用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;

为此,您需要跟踪绿色气球&随机将其中一个气球更改为红色

将所有气球精灵放在一个
NSArray
say
balloodarray
&安排一个计时器每秒运行一个方法。在该方法中,迭代
气球数组
,&将所有绿色气球收集到另一个数组中,比如
绿色气球数组

然后使用
arch4random()
方法生成一个从0到
greenballosarray
长度的随机数(索引)。使用随机数作为新创建的
greenballosarray
的索引,以获取气球精灵并将其纹理更改为红色

// 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];
}