【问题标题】:How to add new object to spawning method after 50 points in sprite-kit如何在 sprite-kit 中 50 点后将新对象添加到产卵方法
【发布时间】:2016-05-09 07:54:07
【问题描述】:

我的游戏中有 6 种不同的敌人,我想开始生成一个随机的敌人,直到我有 50 分,然后再添加一个新的随机敌人。我想这样做直到所有敌人都在游戏中。在这一刻,所有的敌人都从一开始就在发挥作用。

我有一个名为 wenn 的 arc4random switch 语句,我的移动地面处于某个位置。我读到 NSMutableArray 可能是一个解决方案,但它只能在内部包含对象。

这是我的代码:

// The method that is called to add an random enemy:
-(void)addRandomEnemy {

switch (arc4random() % 12) {
    case 0:
        [self addEnemy1];
        break;
    case 1:
        [self addEnemy2];
        break;
    case 2:
        [self addEnemy3];
        break;
    case 3:
        [self addEnemy4];
        break;
    case 4:
        [self addEnemy5];
        break;
    case 5:
        [self addEnemy6];
        break;
    }
}

// Inside the update method:
if (ground.position.x < 333 && ground.position.x > 328) {

        [self addRandomEnemy];
    }
if (ground.position.x < 666 && ground.position.x > 661) {

        [self addRandomEnemy];
    }

我的问题是,例如,在特定数量的点数之后,如何将一种新的敌人添加到生成周期中?

谢谢大家! (请在objective-c中编写代码)

编辑更新代码:

-(void)addRandomEnemy:(int)number {

// Array
NSArray *numberArray = @[@0, @1, @2, @3, @4 ,@5, @6]; 
NSMutableArray *numbers = [[NSMutableArray alloc] initWithArray:numberArray];

// shuffle
NSUInteger count = [numbers count];
for (NSUInteger i = 0; i < count; ++i) {

    int nElements = count - i;
    int n = (arc4random() % nElements) + i;
    [numbers exchangeObjectAtIndex:i withObjectAtIndex:n];
}

// Here I can't replace the case 0 with numbers[0]
switch (arc4random() % number) {
case 0:
    [self addEnemy1];
    break;
case 1:
    [self addEnemy2];
    break;
case 2:
    [self addEnemy3];
    break;
case 3:
    [self addEnemy4];
    break;
case 4:
    [self addEnemy5];
    break;
case 5:
    [self addEnemy6];
    break;
   }
}

它现在说:“表达式不是整数常量表达式”

【问题讨论】:

    标签: ios objective-c sprite-kit 2d-games


    【解决方案1】:
    //This 2 arrays you should initialize like properties, not in the update method, because otherwise result array will be always with 1 random element 
    NSMutableArray *numberArray = [NSMutableArray arrayWithArray:@[@0,@1,@2,@3,@4,@5]];
    NSMutableArray *resultArr = [[NSMutableArray alloc] initWithCapacity:6];
    
    NSNumber *randomType = [[NSNumber alloc] initWithDouble:(arc4random() % number)];
    
            if ([numberArray containsObject:randomType]) {
                [numberArray removeObject:randomType];
                if (![resultArr containsObject:randomType]) {
                    [resultArr addObject:randomType];
                }
            }
    
            NSNumber *enemyTypeIndex = [[NSNumber alloc] initWithDouble:arc4random() % [resultArr count]];
           [self addSomeEnemy:[resultArr objectAtIndex:[enemyTypeIndex integerValue]]];
    

    这就是你的 adSomeEnemy 方法(取消注释方法调用):

    - (void)addSomeEnemy:(NSNumber *)enemy {
    
        switch ([enemy integerValue]) {
    
            case 0:
                //[self addEnemy1];
                break;
            case 1:
               // [self addEnemy2];
                break;
            case 2:
                //[self addEnemy3];
                break;
            case 3:
               // [self addEnemy4];
                break;
            case 4:
               // [self addEnemy5];
                break;
            case 5:
               // [self addEnemy6];
                break;
            }
        }
    

    只有你现在应该做的——将 2 个第一个数组作为属性,在你想要的地方初始化它们(但在第一次更新调用之前),例如在 initWithSize 方法中,并将“numberArray”/“resultArr”替换为“self. numberArray"/"self.resultArr"

    【讨论】:

    • 这不是我要找的。我已经有了分数和时间。时机已经是我想要的了。我的问题是我不想从一开始就拥有所有敌人,而是慢慢将它们添加到游戏中
    • 我想你不明白我真正在寻找什么。在更新方法中,我首先检查分数然后生成,一切正常,但在我的 addRandomEnemy{} 中,我有 6 种不同类型的可以生成的敌人,但我只想在前 50 和 100 之后生成 1 种想要有 2 个可能的敌人,在 150 个之后我想要 3 个可能的种类,依此类推。不要认为我的问题是产卵限制或类似的东西
    • 得到它。最简单的方法就是把“switch (arc4random() % 12)”换成“(arc4random() % NUMBER)”,NUMBER就是你需要多少种敌人。为此,您需要向函数“addRandomEnemy”添加一个参数。如果你想洗牌你的敌人,你可以做一个数组[0,1,2,3,4,5],洗牌,然后把你的“case 0”,“case 1”等替换为“case arr [0]", "案例 arr[1]"...
    • 哇,你真是个天才,一切顺利。我现在只有“arr [0]”等问题。我用我的数组名称替换了它,但他说:“使用未声明的标识符”。我该如何解决这个问题
    • 好的,谢谢,但我不明白你的意思。你能用这个替代方法更新你的答案吗?只有当你有时间的时候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多