2010-09-08 174 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

你甚至可能不需要處理加速度,只有在有人碰到球時纔給球發出衝動(即撞擊速度)。

您可能還需要一些阻尼來減慢球速。你可以通過在每一步降低速度來做到這一點