如何在 sprite-kit 中的 50 点后将新对象添加到产卵方法
How to add new object to spawning method after 50 points in sprite-kit
我的游戏中有 6 种不同的敌人,我想开始生成一个随机的敌人,直到我有 50 分,然后添加一个新的随机的。我想这样做直到所有敌人都在玩。这一刻所有的敌人都从一开始就在玩
我有一个 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;
}
}
现在是:"Expression is not an Integer constant expression"
//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"
我的游戏中有 6 种不同的敌人,我想开始生成一个随机的敌人,直到我有 50 分,然后添加一个新的随机的。我想这样做直到所有敌人都在玩。这一刻所有的敌人都从一开始就在玩
我有一个 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;
}
}
现在是:"Expression is not an Integer constant expression"
//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"