2016-01-03 23 views
-1

我有這個遊戲我正在製作,並且在遊戲中,玩家通過在這個梁狀地面下移動或移動來避開阻擋。到目前爲止,除了英雄在翻倒時不會翻轉起來的事實之外,我已經擁有了一切。英雄翻轉但不能倒退

這是我使用的代碼:

func flipDown() { 
    isUpsideDown = !isUpsideDown 

    var scale: CGFloat 
    if isUpsideDown { 
    scale = -1.0 
    } else { 
     scale = 1.0 
    } 

    let translate = SKAction.moveByX(0, y: scale * (size.height + kMLGroundHeight), duration: 0.1) 
    let flip = SKAction.scaleYTo(scale, duration: 0.1) 
    runAction(translate) 
    runAction(flip) 
} 
+2

如果是,是應該的代碼,以使「英雄[來]翻轉回來了」 ? – KSFT

+1

'除了英雄不翻轉的事實',爲此,'flipDown()'必須被調用兩次:第一次翻轉,第二次翻轉。你的代碼中的第二個電話是在哪裏? – ankhzet

+0

@KSFT該函數僅被稱爲flip()。它應該做翻轉和翻轉。但是當它不起作用時,我試着做出2個不同的功能。一個翻轉下來,一個翻轉回來 – FreshMinded

回答

0

我的建議(對不起FO我可憐迅速,我真的不知道它):

1)您必須isFlipping屬性添加到算上後續調用,並重新命名isUpsideDownisAtBottom(品味的問題,而是更好地描述其目的):

... blah-blah-blah initialization 

self.isFlipping = false 
self.isAtBottom = true 
self.flipDuration = 0.1 

2)其次,獨立的翻轉和動畫邏輯

... blah-blah-blah implementations 

let flipScale() -> { 
    return self.isAtBottom ? 1.0 : -1 
} 

func makeFlip() { 
    if self.isFlipping then 
     return 

    // first press, can actualy animate 
    self.isFlipping = true 

    self.runFlipAction(self.flipScale(),() -> Void = { 
     // completion block, runs on flip finished 
     self.isFlipping = false 
     self.isAtBottom = !self.isAtBottom 
    }) 
} 

let runFlipAction(scale: CGFloat, after:() -> Void) { 
     let translate = SKAction.moveByX(
      0, 
      y: scale * (size.height + kMLGroundHeight), 
      duration: self.flipDuration 
     ) 
     let flip = SKAction.scaleYTo(scale, duration: self.flipDuration) 

     runAction(
      // must run in a group, in order to properly handle completion anchor time 
      SKAction.group([translate, flip]), 
      completion: after 
     ) 
} 

現在,你可以打電話hero.makeFlip(),它將被翻轉,或者被忽略,如果主人公是半空