0

我有一个有 2 个气球纹理的数组,一个绿色和一个红色。我在应用程序开始时有 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];
      }
  }
4

3 回答 3

1

获取随机数:

#include <stdlib.h>

int r = arc4random() % 12;

每秒调用一次 NSTimer:如何使用 NSTimer?

于 2013-05-09T15:28:46.210 回答
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;
于 2013-05-09T15:46:57.637 回答
0

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

把你所有的气球精灵放在一个NSArray说中balloonArray并安排一个计时器每秒运行一个方法。在该方法中,迭代balloonArray, & 将所有绿色气球收集到另一个数组greenBalloonsArray中。

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

// 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];
}
于 2013-05-09T16:16:48.897 回答