2013-05-09 34 views
0

我有一個有2個氣球紋理,一個綠色和一個紅色的數組。我在應用程序的開始處有12個綠色氣球對象。基本上我想要一個隨機的綠色氣球變成紅色每一秒鐘。如果任何人都可以幫助它,將不勝感激。nsarray隨機每秒切換圖像紋理

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

回答

1

爲了得到隨機數:

#include <stdlib.h> 

int r = arc4random() % 12; 

使用的NSTimer被稱爲每秒:How do I use NSTimer?

0

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

爲此,你需要保持綠色氣球&的軌道將其中一個隨機更改爲紅色。

把所有的氣球精靈放在一個NSArrayballoonArray &安排一個計時器來每秒運行一個方法。在該方法中,迭代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]; 
}