0

我有一个 NSMutableArray 的 NSNumbers。我枚举了数组,对于其中的每个“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
                }

因为我在数组的零位置有一个“1”,所以我的 switch 语句除了数字 1 永远不会去任何地方。我该如何解决这个问题?如何检查数组单元格中东西的位置?

为什么我需要这个以及为什么我这样做。我正在做一个井字游戏。我将字段存储在 NSMutableArray 中,容量为 9。因此数组中的每个数字都是游戏场上的一个单元格。如果单元格为空,则该位置的数组保持为零,如果有 x - 数组中有 1 个值,如果单元格中有 0 - 数组保持 2。当绘制时间到来时,我遍历数组并检查什么我看到的价值。如果值为零,我什么也不做,但如果是一,我在某个位置绘制。也许有更简单的方法可以做到这一点,如果没有办法解决我的问题,你可以指出我的方向。

编辑:工作解决方案是将枚举更改为通常的循环。

 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 回答