0

Xcode/プログラミングは初めてで、既存のコードを変更しようとしています

特定の時間に画面上に大量のオブジェクト (敵) があり、それらの値を再定義できないという小さな問題があります。画面上で敵を 3 から開始するように設定します。

私の目的は、現在のスコアに基づいて敵の数を変更することです。

以下にコードのスニペットを添付しました。

int numberOfEnemies;

if (self.score>=0) {
numberOfEnemies = 3
}

else if (self.score>=100) {
numberOfEnemies = 4
}


// Setup array 

enemyArray = [[NSMutableArray alloc] init];

for(int i = 0; i < numberOfEnemies; i++) {
    [enemyArray addObject:[SpriteHelpers setupAnimatedSprite:self.view numFrames:3
    withFilePrefix:@"enemyicon" withDuration:((CGFloat)(arc4random()%2)/3 + 0.5)
    ofType:@"png" withValue:0]];
}

enemyView = [enemyArray objectAtIndex:0];

numberOfEnemiesスコアが更新されたときにの新しい値を配列に解析するにはどうすればよいですか?

4

1 に答える 1

0

会話が長くなりすぎないように、会話を回答に移します。これは簡単に編集して拡張できます。

これまでのところ、問題が発生している理由は、アプリケーションの最初の起動時に少なくとも 1 回実行される viewDidLoad 関数で上記のコードを実行したことが原因であることがわかりました。これに関する問題は、あなたが知っているように、新しいスコアを確認してから敵の数を更新する機会がないことです.

iOS のゲーム更新ループは通常、次の構造で行われることは知っていますが、オンラインでチュートリアルを見つけて、より効率的で正しい方法を見つけることをお勧めします。

現在の構造から、上記のコードを取得して、そこから新しい関数を作成します。

-(void) updateDifficulty:(NSTimer *)gameTimer
{
    //This can be the code you have above for now
}

その後、viewDidLoad 内に次のコードを配置します。

-(void) viewDidLoad:
{
    gameTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateDifficulty:) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:gameTimer forMode:NSDefaultRunLoopMode];
}

これにより、ゲーム時間を追跡するタイマーが宣言され、宣言された方法で、1 秒ごとに updateDifficulty メソッドが呼び出されます。これはあなたが望む一般的な構造ですが、レイ ウェンダーリッヒのゲーム チュートリアルなどを確認することを強くお勧めします。

それが役立つことを願っています!

于 2012-07-26T08:32:24.553 に答える