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

このためには、緑の風船を追跡し、そのうちの 1 つをランダムに赤に変更する必要があります。

すべてのバルーン スプライトを 1 つのNSArray発言にまとめて、1balloonArray秒ごとにメソッドを実行するようにタイマーをスケジュールします。そのメソッドでは、 を繰り返して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 に答える
0

NSTimer の代わりに CADisplayLink を使用できます。これは、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 に答える