首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nsarray随机切换图像纹理

nsarray随机切换图像纹理
EN

Stack Overflow用户
提问于 2013-05-09 23:19:43
回答 3查看 95关注 0票数 0

我有一个数组,有两个气球纹理,一个绿色和一个红色。我在app.Basically的开头有12个绿色气球对象,我想要一个随机的绿色气球让每个second.If变成红色,任何人都会非常感激。

init方法

代码语言:javascript
运行
复制
    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];

添加气球方法

代码语言:javascript
运行
复制
  -(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];
      }
  }
EN

回答 3

Stack Overflow用户

发布于 2013-05-09 23:28:46

获取随机数:

代码语言:javascript
运行
复制
#include <stdlib.h>

int r = arc4random() % 12;

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

票数 1
EN

Stack Overflow用户

发布于 2013-05-09 23:46:58

您可以使用CADisplayLink而不是NSTimer。原因是CADisplayLink将其绘图与显示器的刷新率同步。

如何设置CADisplayLink:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
// code from cocos2d
displayLinkSupported = FALSE;
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
   displayLinkSupported = TRUE;
票数 0
EN

Stack Overflow用户

发布于 2013-05-10 00:16:49

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

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

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

代码语言:javascript
运行
复制
// 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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16465293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档