2013-02-17 63 views
2

我是Cocos2D的新手,並且遇到問題。我也搜查了很多,但似乎沒有找到我的問題的答案。情況是:將sprite向上移動並將其設置爲起始位置

當遊戲開始時,主精靈應該繼續下去(如計劃崩潰)。如果用戶觸摸屏幕中的任何位置,精靈應該移動到觸摸點的Y座標,當精靈到達該點時,它應該從那一點開始再次下降。想象一下飛機墜毀(下滑),當用戶點擊任何地方時,它會上升(稍微下降),然後再次開始下降。我們不必讓它崩潰在地上。

所以,我已經實現了下行部分。以及上升的部分。 但問題是,當精靈完成向上時,它不會從那裏開始下降,而是從它上升的地方繼續下去。

請幫我實現這個目標。

這是我在init()方法下去代碼:爲touchesBegan方法拔地而起

[plane runAction:[CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-20)], 
                 nil]]]; 

代碼:

[plane runAction:[CCMoveBy actionWithDuration:1 position:ccp(0,20)]]; 

回答

1

的問題是,您使用的是可重複的動作,一旦你申請「向上移動」操作會產生不一致性,因爲這兩個操作都在同一個對象上工作(我不記得上一個操作是否被取消,但這種方法無效)。

所以我會做followng爲init()

. 
. 
[self startDownMovement]; 
. 
. 

然後實現startDownMovement()爲:

[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-plane.potision.y)], 
            [CCCallBlock actionWithBlock: 
            ^{ 
              // Do game over logic. (i.e. plain crashed) 
             }],nil]]; 

而對於touchBegan()

[plane stopAllActions]; 
CGPoint location = [touch locationInView:touch.view]; 
[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,location.y)], 
             [CCCallBlock actionWithBlock: 
             ^{ 
              [self startDownMovement]; 
             }],nil]]; 

我在這裏所做的開始向下移動(我假設y = 0是碰撞點)我通過減去它的y位置來移動精靈。

如果用戶觸摸屏幕的平面y位置將被移動到的觸摸點之後的上下運動將被再次調用(因爲我用CCSequence向下移動僅向上移動動作之後已經完成將發生)

相關問題