2012-12-27 98 views
0

我正在做一個小遊戲,在這個遊戲中我有兩個menuitem按鈕,一個是跳轉,一個是滾動,我實現了使用ccjump的跳轉功能,但我無法實現滾動功能,爲此我使用了ccrotate函數,誰能幫助我對這個問題...提前在cocos2d中滾動一個精靈?

這裏感謝是我的滾動碼

id action= [CCRotateBy actionWithDuration: 0.2 angle:-130]; 
[mysprite runAction:action]; 

誰能給我精確解????????

+0

你是什麼意思'部分'?當你選擇滾動的菜單按鈕時,你能否確認上述代碼實際上得到執行? – YvesLeBorg

+0

感謝YvesLeBorg,部分在我意識到當我點擊滾動菜單按鈕時,精靈旋轉了-130度並回到原來的位置,而不是這個旋轉我想滾動精靈 – mahesh

+0

然後,我們可能沒有看着正確的代碼行。這應該每次都有效。在此操作完成後,您必須在代碼中的其他位置更改Sprite的旋轉角度。 – YvesLeBorg

回答

1

好的,以模擬精靈「滾動」的影響,你必須結合旋轉和平移。爲了讓人信服,你必須得到適量的翻譯,以便身體似乎不會與翻譯同步,比如移動的速度太快或太慢。您可以通過反覆試驗確定移動的距離,如果精靈幾乎是圓形的,則可以相當精確地計算出它。

對於一個完美的圓(最簡單的情況),當它沿着地面滾動時,滾動的距離等於半徑乘以旋轉的弧度。因此,對於完整的旋轉,移動的水平距離將是2 * pi * r。對於部分旋轉,在你的情況下爲130度,對於圓形精靈來說,行進的水平距離將是-130 *(pi/180)* sprite.contentSize.width/2。 pi/180將從度數轉換爲弧度。對於一個非完美的圓圈,這個公式會讓你接近,但你可能需要調整它才能看起來正確。因此,回顧一下,以及一些示例代碼,你的方法可能會像這樣:

float radius = mySprite.contentSize.width/2; 
float radians = CC_DEGREES_TO_RADIANS(-130); 
float distance = radians * radius; 

CCRotateBy *rotateAction = [CCRotateBy actionWithDuration:0.2 angle: -130]; 
CCMoveBy *moveAction = [CCMoveBy actionWithDuration:0.2 position:ccp(distance, 0)]; 
CCSpawn *spawnAction = [CCSpawn actionOne:rotateAction two:moveAction]; 

[mySprite runAction:spawnAction];