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

ステップ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として渡し、それを別のローカル変数にキャストするのですか?私はそれ以上だと思います...

于 2012-08-29T06:02:15.077 に答える