0

私はiPhone用のプログラミングを学び、プラットフォーム上でボールが上向きに跳ね返る単純なボールバウンスゲームを作成しています。ゲームは動作し、ボールが画面の上部1/4に達するとボールが上に移動するように見えます(Doodle Jumpと同様に、画面のプラットフォームが下に移動します)が、スコアカウンターを実装しようとすると問題が発生します。ボールが画面の上部1/4に到達したら、スコアに追加して、次の2行のコードを実行します。

NSString *nssScore = [NSString stringWithFormat:@"%i", score];
lblScore.text = nssScore;

lblScoreはUILabelであり、ビュー内のテキストラベルにリンクされています。画面上のテキストが更新されるたびに、ボールとすべてのプラットフォームが開始位置に戻りますが、ボールはその速度を維持します。デバッガーを1行ずつ実行すると、両方のコード行をエラーなしで実行できます。問題は、次の更新で画面上のテキストが変更されたときに発生します。メインのゲームループとフレームレートは、次のコード行で実行されます。

[NSTimer scheduledTimerWithTimeInterval:1.0/60 
   target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];
4

1 に答える 1

0

これは、レイアウトの制約に関する問題です。問題は実際にはラベルとは何の関係もありません。ラベルの値を設定すると再描画がトリガーされるだけです(またはレイアウト、どのメソッドが呼び出されるかは正確にはわかりません)。最も簡単な解決策は、IBの自動レイアウトをオフにすることです(画面の右側にある左端のタブから)。または、フレームを設定するのではなく、制約をアニメートしてボールを移動することもできます。

于 2013-02-27T04:12:20.730 に答える