2017-06-23 266 views
0

我在SpriteKit项目中有许多SKActions。 SKActions的默认timingMode是“线性”。是否可以使用扩展名覆盖此定时模式默认为“easeInEaseOut”所以所有的SKActions都有timingMode = easeInEaseOut?扩展SKAction以覆盖timingMode

我已经尝试过各种“扩展”风格,但没有一个会编译 - 通常返回在其自身类型中使用的''timingMode''或'初始化'init()'Objective-C选择器'init'与隐式初始化' init()'具有相同的Objective-C选择器“

该文档似乎没有给出任何示例,但肯定这将是一个有用的事情能够做到?特别是当你在游戏中有数百个SKActions时?

回答

2

选择你的毒药,一个扩展动作,让你快速调用.easeInEaseOut定时模式,另一个扩展SKNode让你运行使用特定的定时模式。

没有办法改变默认行为,唯一的另一种方法是为每个存在的操作创建自己的静态方法,这可能会变得非常麻烦。

extension SKAction 
{ 
    //e.g. SKAction.move(to: CGPoint.zero, duration: 10).easeInEaseOut() 
    func easeInEaseOut() -> SKAction 
    { 

     self.timingMode = .easeInEaseOut 
     return self 
    } 


} 
extension SKNode 
{ 
    func runWithEaseInEaseOut(action:SKAction,withKey key: String = "") 
    { 
     action.timingMode = .easeInEaseOut 
     if key != "" 
     { 
      self.run(action,withKey:key) 
     } 
     else 
     { 
      self.run(action) 
     } 
    } 

} 
+0

真的很感谢你的时间。是的,这是一个帮助。我喜欢第一个,很容易添加到在动作序列中创建的动作等。你不能简单地扩展和/或覆盖全球是非常无益的Swift。 –

+1

它是静态的,它有助于提高效率 – Knight0fDragon