0

開発中のゲーム用に数百のレベルを作成しようとしているので、明らかに for ループを使用し、各ボタンを個別に作成したくありません。

私はこれをすべてうまくやっていますが、現在使用しているコードでは、各ボタンの呼び出しブロックが同じになるようにしています。明らかに、異なるレベルのボタンを異なるレベルに移動させる場合、呼び出しブロックはそれぞれ異なる必要があります。

自分がどのレベルにいるのかを区別するために[[LevelManager sharedInstance] nextLevel]、レベル番号に対応する回数を呼び出します。ボタンに触れるユーザーのタッチ位置を取得し、行/列番号を取得してから、上記のコードを特定の回数実行することで、この番号を変更しようとしました。ただし、ボタンに触れた後、呼び出しブロック全体を実行する前にタッチ位置を更新していなかったため、明らかにコードが機能しません。

呼び出しブロックが終了する前に、タッチ位置を手動で更新する方法はありますか? 何らかの方法ですべてのボタンを配列に格納し、それぞれに異なる呼び出しブロックを確立する方法はありますか? 問題を解決するための最善の方法がわかりません。ありがとう、私のコードは以下です。

初期化時に呼び出される

for (int l = 0; l < NUMBER_OF_WORLDS; l++) {
        for (int j = 0; j < 4; j++) {
            for (int k = 0; k < 5; k++) {
                NSString *tempTitle = [NSString stringWithFormat:@"%i",(k+1)+(l*5)];
                CCButton *tempButton;
                tempButton = [CCButton buttonWithTitle:tempTitle]
                tempButton.block = ^(id sender) {
                    int row = floorf(touchLocation.y/(screenBounds.size.height/6)) + 1;
                    int column = floorf(touchLocation.x/(screenBounds.size.width/4)) + 1;
                    int buttonIndex = row*column;
                    for (int m = 1; m < buttonIndex; m++) {
                        [[LevelManager sharedInstance] nextLevel];
                    }
                    CCScene *gameplayScene = [CCBReader loadAsScene:@"LevelScene"];
                    [[CCDirector sharedDirector] replaceScene:gameplayScene];
                    levelNumber = i;
                };
                tempButton.position = ccp((screenBounds.size.width/4)*j + levelImagePlaceholder.contentSize.width*tempButton.scale, screenBounds.size.height/6*k + 50 + l*screenBounds.size.height);
                [self addChild:tempButton];
                i++;
            }
        }
}

タッチ位置の取得方法

-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CCLOG(@"touch ran");
    touchLocation = [touch locationInNode:self];
}
4

1 に答える 1

1

行/列はすでに利用可能です。jとkです。これらの変数は、ボタンの「押された」ブロックで参照できます。

于 2014-06-23T01:10:38.960 に答える