我目前正在使用Cocoa为OS X开发一款游戏,航天器飞过太空躲避/射击小行星。
小行星出现在屏幕顶部并垂直向下飞行直至它们消失。
到目前为止,我已经为小行星设置了动画,以便在游戏中实现的所有不同形式一次出现,并从屏幕顶部的随机点垂直移动到屏幕底部,直到它们消失为止。 但是我想让它随机小行星类型出现&动画,随机时间,多个数量(我需要在屏幕上飞行的同一类型的多个NSImage / NSImageViews),以及不同的速度/大小。
这是我的动画代码:
// Prepare asteroids.
_asteroiddark = [[NSImageView alloc] init];
[_asteroiddark setImage: [NSImage imageNamed:@"asteroiddark"]];
_asteroidlight = [[NSImageView alloc] init];
[_asteroidlight setImage: [NSImage imageNamed:@"asteroidwhite"]];
[_asteroidlight setFrame: theModel.lightAstRect];
_asteroidsmall = [[NSImageView alloc] init];
[_asteroidsmall setImage: [NSImage imageNamed:@"asteroidsmall"]];
[_asteroidsmall setFrame: theModel.smallAstRect];
_comet = [[NSImageView alloc] init];
[_comet setImage:[NSImage imageNamed:@"comet.tif"]];
[_comet setFrame: theModel.cometRect];
// Set up key Processing timer for fluid spaceship movement.
[NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(processKeys) userInfo:nil repeats:YES];
// Set up key Processing timer for animation.
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(myAnimations) userInfo:nil repeats:YES];
// Start animations.
[self myAnimations];
}
-(void) myAnimations
{
asteroids = [[NSMutableSet alloc] initWithObjects:
_asteroiddark, _asteroidlight, _asteroidsmall,
_comet, nil];
// randomize where the asteroids/comets appear.
int randX;
// So asteroids 'n' such are varying in size.
int randSize;
// Where the asteroids are initially positioned at top of view/window.
CGPoint startPoint;
for (NSImageView *view in asteroids) {
randX = arc4random_uniform(self.bounds.size.width);
randSize = 40 + arc4random() % (120-40+1);
startPoint = CGPointMake(randX, self.bounds.size.height);
// Add each asteroid / comet to the view after setting their respective random start points.
[view setFrame: NSMakeRect(startPoint.x, startPoint.y, randSize, randSize)];
[self addSubview:view];
// Create animation (down y-axis)
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration:2.5];
[context setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
view.animator.frame = CGRectOffset(view.frame, 0, -self.bounds.size.height - 180);
} completionHandler:nil];
}
}
随机化大小和位置不是问题。
我可以获得随机小行星的最有效方法是什么?
我最好使用NSAnimation还是应该使用Core Animation?
目前,在不同的x点出现相同物体的波浪。
我想我可以随机化多个计时器,以便他们改变选择器和间隔,并为选择器提供多种动画方法。
我或许可以让方法一次动画一个,两个,三个,四个不同的小行星类型对象,以及克隆图像视图的方法。
上面的代码是在自定义NSView中实现的。
谢谢!