2015-03-31 102 views
1

我在SpriteKit中玩了一下,并且试图让棒图运行。由于我缺乏经验,我相信我已经以非常规的方式开始了这个过程。在Sprite Kit中运行棒图动画

我没有画出每个单独的动作帧,而是加载了棒图的单独图像(即头部,膝盖,大腿,身体,手臂等),并让他们相应地移动。到目前为止,除了跑步过程中膝盖的运动和旋转以外,所有东西都可以相互融合。

我的问题是这样的:

当大腿拉回到它的步幅,膝盖变得分离,并遵循直线步幅的结束而转动。

我的问题是这样的:

是否有连接节点大腿到小腿节点的方式,因为如果他们在每说一个“拐点”连接,而在运动?还是有一些更有效的方法?

这是我的代码的片段,它可能比我一直描述更多一点。

func thigh_run(){ 
     //running config 
     //DONT CHANGE! 
     var thigh_rotation = CGFloat(M_PI)*0.8 
     //Can Change :) 
     var run_speed = NSTimeInterval(0.25) 

     // reset the action sequence... basically 
     let pos_nuetralize = SKAction.rotateByAngle(thigh_rotation/2, duration: run_speed) 
     let neg_nuetralize = SKAction.rotateByAngle(-thigh_rotation/2, duration: run_speed)    
     //strides 
     let thigh_pull = SKAction.rotateByAngle(-thigh_rotation, duration: run_speed*2) 
     let thigh_stride = SKAction.rotateByAngle(thigh_rotation/2, duration: run_speed)   
     // for the opposite leg 
     let b_thigh_pull = SKAction.rotateByAngle(-thigh_rotation/2, duration: run_speed) 
     let b_thigh_stride = SKAction.rotateByAngle(thigh_rotation, duration: run_speed*2) 

     //knee movement  
     let stride = SKAction.sequence([thigh_stride, thigh_pull, pos_nuetralize]) 
     let pull = SKAction.sequence([b_thigh_pull, b_thigh_stride, neg_nuetralize]) 
     r_arm.runAction(SKAction.repeatActionForever(stride)) 
     f_leg_thigh.runAction(SKAction.repeatActionForever(stride)) 
     b_leg_thigh.runAction(SKAction.repeatActionForever(pull)) 
     //knee_run(run_speed) 


    } 

    func knee_run(speed: NSTimeInterval){ 

     let knee_stride = SKAction.moveTo(CGPointMake(f_leg_thigh.position.x+f_leg_thigh.size.height, f_leg_thigh.position.y), duration: speed) 
     let knee_reset = SKAction.moveTo(CGPointMake(f_leg_thigh.position.x, f_leg_thigh.position.y-f_leg_thigh.size.height), duration: speed) 
     let knee_pull_rotate = SKAction.rotateToAngle(CGFloat(M_PI)/2, duration: speed, shortestUnitArc: true) 
     let knee_pull_rotate_half = SKAction.rotateToAngle(CGFloat(M_PI)*2, duration: speed, shortestUnitArc: true) 
     let knee_pull_half = SKAction.moveTo(CGPointMake(f_leg_thigh.position.x-f_leg_thigh.size.height, f_leg_thigh.position.y/2), duration: speed) 
     let knee_pull = SKAction.moveTo(CGPointMake(f_leg_thigh.position.x-f_leg_thigh.size.height, f_leg_thigh.position.y), duration: speed) 




     //Grouping of the knee moving and rotating at the same time 
     let knee_pull_group_half = SKAction.group([knee_pull_half, knee_pull_rotate_half]) 
     let knee_pull_group = SKAction.group([knee_pull, knee_pull_rotate]) 

     let f_knee_stride_seq = SKAction.sequence([knee_stride,knee_reset,knee_pull,knee_reset]) 
     let f_knee_pull_seq = SKAction.sequence([knee_pull_group_half, knee_reset, knee_stride, knee_reset]) 


     f_leg_calf.runAction(SKAction.repeatActionForever(f_knee_stride_seq)) 
     b_leg_calf.runAction(SKAction.repeatActionForever(f_knee_pull_seq))   
    } 

我知道这可能很难阅读,我已经记录了它为自己很好。 f_前缀用于“前”支线,而b用于“后”_leg。但将其视为右腿和左腿。

反正!提前致谢!我感谢任何帮助或提示!评论任何进一步的解释! :)

+0

你可以发布一个动画实现的gif? – ZeMoon 2015-03-31 05:35:47

回答

1

更有效的方法是使用SKPhysicsJoint将大腿节点连接到小腿节点。

+0

单独的大腿节点的运动也会移动小腿节点吗? – luckybroman5 2015-03-31 21:18:02

+0

@ luckybroman5 - 会的。运动的类型取决于你使用的关节类型。谷歌“SKPhysicsJoint教程”,你会得到一些好的点击。不确定SWIFT版本。 – sangony 2015-03-31 21:25:19

+0

谢谢!有效!我真的很感谢你的帮助人! – luckybroman5 2015-04-01 22:55:43