我正试图在屏幕上形成多个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,我认为添加延迟创建球将足以使这不是一个问题。所有更新都会根据加速度计/与屏幕边缘的碰撞来改变速度/方向。
答案 0 :(得分:1)
确实应该显示两个球。检查它们的坐标,看它们是否重叠。另一方面,看起来你正在泄漏球阵列,以及ball1和ball2对象。您正在为它们分配init,因此您必须在viewDidLoad的末尾释放它们,或者,如果您使用retain属性,只需在设置它们时自动释放它们,以便它们被属性保留。
至于代码的位置,viewDidLoad应该没问题,但是考虑将balls数组放入你调用的init方法中来创建你的ViewController,因为如果没有设置该数组,你的ViewController可能无法工作。