1

我试图让多个 Ball 对象在屏幕上形成并弹跳。我有一个工作正常,但我在添加更多时遇到问题。理想情况下,球的数量会有所不同,但现在我试图将两个放入数组中以更改其余代码。

我的问题是一切都编译并运行良好,但我仍然只有一个球。这就是我怀疑问题出现的地方。

我也觉得在 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

事实上,两个球都应该显示。检查它们的坐标以查看它们是否重叠。另一方面,您似乎正在泄漏 balls 数组以及 ball1 和 ball2 对象。您正在分配初始化它们,因此您必须在 viewDidLoad 结束时释放它们,或者,如果您使用保留属性,只需在设置它们时自动释放它们,以便它们被属性保留。

至于代码应该放在哪里,viewDidLoad 应该没问题,但考虑将 balls 数组放入您调用以创建 ViewController 的 init 方法中,因为如果没有设置该数组,您的 ViewController 可能无法工作。

于 2011-06-24T17:46:55.087 回答