1

複数の Ball オブジェクトを画面上に形成して跳ね返そうとしています。1つでは問題なく動作していますが、さらに追加するのに問題があります。理想的には、ボールの量はさまざまですが、今のところ、コードの残りの部分を変更するために、配列に 2 つだけ取得しようとしています。

私の問題は、すべてが正常にコンパイルされて実行されることですが、まだボールが 1 つしかありません。ここで問題が発生すると思われます。

また、viewDidLoadでこれを行うのは間違っているように感じますが、実際にどこに属しているのかわかりません。

viewDidLoad:

- (void)viewDidLoad {
[super viewDidLoad];

balls = [[NSMutableArray alloc] init];
CGPoint newPos = CGPointMake(5,5);

for(int i = 0; i < 2; i++) {
[balls addObject:[[[Ball alloc] init] autorelease]];
}

[[balls objectAtIndex:1] setPosition:newPos];

[NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];

}

- (void)onTimer
{
for(int i = 0; i < [balls count]; i++) {
    Ball *b = [balls objectAtIndex:i];
    [b update];
    [(BallView *)self.view refresh:b];
    }
}


- (void)refresh:(Ball *)aBall {
ball = aBall;
[self setNeedsDisplay];

}

onTimer を追加しました。ボールの作成に遅延を追加するだけで、これは問題にならないと思いました。すべての更新は、加速度計/画面の端との衝突に基づいて速度/方向を変更することです。

4

1 に答える 1

1

実際、両方のボールが表示されるはずです。それらの座標をチェックして、重複しているかどうかを確認します。別の注意として、ball1 および ball2 オブジェクトだけでなく、balls 配列もリークしているようです。それらを初期化しているので、viewDidLoad の最後にそれらを解放する必要があります。または、保持プロパティを使用している場合は、プロパティによって保持されるように、設定時に自動解放するだけです。

コードを配置する場所については、viewDidLoad は問題ありませんが、ViewController を作成するために呼び出す init メソッドにボール配列を配置することを検討してください。配列が設定されていないと ViewController が機能しない可能性があるためです。

于 2011-06-24T17:46:55.087 に答える