2010-09-08 131 views
3

我想开发一个简单的足球比赛,包括点球中,我不得不从玩家动画一个门柱...前面我已经使用使用计时器简单的动画添加到轴被球的图像,以便它从1点移动到另一个..但我没有期望的结果,因为动画不是那么流畅...所以我想用游戏引擎 ...因为我是新程序员我不知道关于游戏引擎,我也没有找到任何有关像引擎box2d或花栗鼠或麻雀 ..我也想用UIView动画而不是早期的动画,因为我认为可以实现更好的动画,而不会抓挠我的头试图在游戏引擎上工作....我不会去这个地方,所以如果有人可以提出一些光这个问题我的?开发一款不使用游戏引擎的简单游戏?

+5

这里** ** box2d **引擎**手册:http://www.box2d.org/manual.html ...在什么**方式**这是不适当的**文件**? – FrustratedWithFormsDesigner 2010-09-08 13:26:33

+1

如果你不使用游戏引擎,你将不得不实施游戏引擎。这将比使用游戏引擎更难,除非你知道你在图形,输入等方面的表现相当出色。 – LarsH 2010-09-09 03:21:10

回答

2

使用UIView的动画,像:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.3]; // or whatever time 
object.center=CGPointMake(object.center.x+2, object.center.y+4); 
// or whatever 
[UIView commitAnimations]; 

您还应该使用一个NSTimer与在同一时段,这样就可以顺利地调用动画。

NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:0.3 target: self 
selector:@selector(animation) userInfo: nil repeats: YES]; 

然后,实施方法:

- (void)animation { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; // or whatever time 
    object.center=CGPointMake(object.center.x+5, object.center.y+7); 
    // or whatever 
    [UIView commitAnimations];  
} 

这应该对任何简单的游戏做的。

+0

NSTimers尽最大的努力,但不是确切的,当计时器被解雇时,你应该记录当前时间在一个变量中并读出前一次。使用这两个时间来获得delta.if你想每0.3秒移动5帧,你会用5/0.3 * delta来计算距离。 – MCannon 2010-11-29 23:43:11

+0

实际上从来没有这样做过,因为NSTimers,尽管它们可能会被触发得很晚(我们在这里只谈几毫秒,如果你的应用程序是内存有效的),它们会精确地触发。使用重复计时器时千万不要改变距离。 – GSchv 2010-11-30 14:32:25

0

当你用cocos2d标记问题时,我想你正在使用它,或者正在计划。动画CCSprites很容易,你可以看到例如在这个游戏中https://github.com/haqu/tweejump

在你onEnter实现,只需拨打 [自scheduleUpdate]

这将调用常规的update:在那里你可以做你的绘图

- (void)update:(ccTime)dt { 
    ball_pos.x += ball_velocity.x * dt; 
    ball_pos.y += ball_velocity.y * dt; 
    ball_velocity.x += ball_acc.x * dt; 
    ball_velocity.y += ball_acc.y * dt; 

    //game logic goes here (collision, goal, ...) 

    ball.position = ball_position; 
} 

这会处理球的运动平稳。 ball_posball_velocityball_accvvCertex2F

你甚至可能不需要处理加速度,只有在有人碰到球时才给球发出冲动(即撞击速度)。

您可能还需要一些阻尼来减慢球速。你可以通过在每一步降低速度来做到这一点