在Cocoa中为随机对象制作动画的最佳方法是什么?

时间:2015-03-06 00:55:56

标签: objective-c cocoa animation

我目前正在使用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中实现的。

谢谢!

0 个答案:

没有答案