1

嗨,伙计们,我想做的是创建 6 个精灵并将它们均匀地隔开,我编辑了一些我从书中得到的代码,但目前卡在我需要将精灵均匀隔开的部分

    [groundNode setPosition:CGPointMake(45, 20)];

这会将所有 6 个精灵堆叠在哪里?我怎样才能让它变成这样

    [groundNode setPosition:CGPointMake(45*x, 20)];

其中 x 是从 for 循环中获取的 int。我的代码列在底部。太感谢了!!

-(id)init{
    self = [super init];
    if(self !=nil){
        for(int x=0;x<6;x++){
            [self createGround];
        }   
    }
    return self;
}

-(void) createGround{
    int randomGround = arc4random()%3+1;
    NSString *groundName = [NSString stringWithFormat:@"ground%d.png", randomGround];
    CCSprite *groundSprite = [CCSprite spriteWithFile:groundName];
    [self addChild:groundSprite];
    [self resetGround:groundSprite];
}

-(void) resetGround:(id)node{
    CGSize screenSize =[CCDirector sharedDirector].winSize;
    CCNode *groundNode = (CCNode*)node;
    [groundNode setPosition:CGPointMake(45, 20)];

}
4

1 回答 1

1

第一步是构建这些方法以获取 offsetIndex 参数:

-(void) createGroundWithOffsetIndex: (int) offsetIndex {
-(void) resetGround: (CCNode *) node withOffsetIndex: (int) offsetIndex {

然后,在 createGround 中,将其传递:

[self resetGround:groundSprite withOffsetIndex: offsetIndex];

并从循环中传入:

for(int x=0;x<6;x++){
  [self createGroundWithOffsetIndex:x];
}       

最后,你知道你会使用的代码位(在 resetGround:withOffsetIndex:) 内:(注意 +1,因为偏移量(按语义)从零开始)

[groundNode setPosition:CGPointMake(45 * offsetIndex+1, 20)];

一些注意事项:

  • 仔细考虑这里需要多少传递,并尝试考虑改进的架构:如果您正在平铺相同的图像,也许 createGround 应该采用 CGRect 并负责填充那么多区域?

  • 这只是水平的;我把它作为一个练习来传递 CGPoints(或类似的 {x,y} 结构)作为 offsetIndex。

  • 你的铸造模式是临界的。为什么将它作为 id 传递,然后将其转换为另一个本地 var,而它一直以另一种类型出现?我会认为那个结束...

于 2012-08-29T06:02:15.077 回答