0

NSNumbers の NSMutableArray があります。私は配列を列挙し、そこにある「1」ごとに、配列内の位置を確認し、いくつかのことを行う必要があります。これは私がそれを行う方法です:

for (NSNumber *number in fieldArray) {

    int temp = [number intValue];
    if (temp != 0)
    {
        if (temp == 1)
        {
            switch ([fieldArray indexOfObject:number]) {
                case 0:
                {
                    CCSprite *x = [CCSprite spriteWithFile:@"x.png"];
                    x.position = ccp(53,265);
                    [self addChild:x];
                }   
                    break;
                case 1:
                { 
                 //this code never gets called
                }

配列の位置 0 に「1」があるため、switch ステートメントは 1 以外の場所には移動しません。どうすれば修正できますか? 配列セル内の物の位置を確認するには?

なぜこれが必要なのか、なぜこのようにするのか。三目並べゲームを作っています。フィールドを 9 の容量で NSMutableArray に格納します。したがって、配列内の各数値はプレイ フィールドのセルです。セルが空の場合、配列はその位置にゼロを保持し、x がある場合 - 配列に 1 つの値があり、セルにゼロがある場合 - 配列は 2 を保持します。描画時間が来ると、配列を反復処理して何を確認します値がわかりました。値が 0 の場合は何もしませんが、1 の場合は特定の位置に描画します。これを行う簡単な方法があるかもしれません。問題を解決する方法がない場合は、その方向に向けてください。

編集: 実用的な解決策は、列挙を通常のループに変更することでした。

 for (int i = 0; i < 9; i++) {

        int temp = [[fieldArray objectAtIndex:i] intValue];
        if (temp == 1)
        {
            switch (i) {
                case 0:
                {
                    CCSprite *x = [CCSprite spriteWithFile:@"x.png"];
                    x.position = ccp(53, 265);
                    [self addChild:x z:1];
                    break;
                }

                case 1:
                {
                    CCSprite *x = [CCSprite spriteWithFile:@"x.png"];
                    x.position = ccp(159, 265);
                    [self addChild:x z:1];
                    break;
                }
4

2 に答える 2

2

私はこれを列挙することを避け、最初に配列の位置を見て、次に内容を見たいと思います。positionOfSpriteForIndex:(これはコンパイラではチェックされませんが、アイデアが得られるはずです。正しい値を返すメソッドを書くことは可能だと思いccp()ます。)

for (int idx = 0; idx < [fieldArray count]; idx++) {
    NSNumber *number = [fieldArray objectAtIndex:idx];
    CCSprite *x = nil;
    switch ([number intValue]) {
        case 1:
            x = [CCSprite spriteWithFile:@"x.png"];
            x.position = [self positionOfSpriteForIndex:idx];
            [self addChild:x];
            break;

        case 2:
            x = [CCSprite spriteWithFile:@"o.png"];
            x.position = [self positionOfSpriteForIndex:idx];
            [self addChild:x];
            break;

        default:
            break;
    }
}
于 2012-08-16T17:34:20.730 に答える
0

breakブラケットの中に入れる必要があるようです。

switch ([fieldArray indexOfObject:number]) {
                case 0:
                {
                    CCSprite *x = [CCSprite spriteWithFile:@"x.png"];
                    x.position = ccp(53,265);
                    [self addChild:x];
                break;
                }   
于 2012-08-16T17:32:14.290 に答える