2013-10-12 87 views
0

我剛開始使用SpriteKit,我正在發現API。我有一個物體在按下按鈕時在屏幕上移動。所以我所做的就是設置NSTimer,而用戶仍然持有並持續調用相同的方法每0.1秒移動一次對象。該對象確實會移動,但在移動某個點時它不會水平地顯示平滑過渡。所以我用NSLog來查看對象的位置,我發佈它減去10點而不是0.5。這裏是代碼:從浮點數中減去的精度

SKAction *moveLeft = [SKAction moveToX:((CGFloat)[[self childNodeWithName:@"Hero"] frame].origin.x)-0.5 duration:0.1]; 
[[self childNodeWithName:@"Hero"] runAction:moveLeft]; 

我該如何解決這個問題?此外,我在控制檯中意識到座標是150.000000而不是150或150.0。這可能是問題嗎?

對於那些與SpriteKit合作過的人的另一個問題! 在遊戲場景中,你想添加一個按鈕,將其添加到場景類或視圖控制器中?

+1

每個帖子有一個問題。 – uchuugaka

+0

如果將括號內的-0.5移到括號內,會發生什麼情況?還要確保在減號後有一個空格,以免使用一元 - – uchuugaka

回答

0

我找到了解決辦法,現在,我使用這個權利:

SKAction *moveLeft = [SKAction moveByX:1 y:0 duration:0]; 

它提供了更精確的結果。

+1

您正在做的是等同於更改x位置。 'hero.position = CGPointMake(hero.position.x + 1,hero.position.y);'是不需要SKAction的等價物。 – prototypical

0

這聽起來像是你在複製SKAction補間,在舊的完成之前設置一個新的補間。你也有可能創造計時器而不是殺死它們?不能確定沒有看到實施。

解決此問題的一種方法是在觸摸開始時沿期望的方向設置SKAction,然後在觸摸結束時移除動作。所以你一次只能運行一個SKAction。

如果沒有看到創建NSTimer的代碼以及它如何處理它們,很難確定究竟發生了什麼,所以我將根據您提供給我們的信息做出答案。這是一種可能的情況。