Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SKSpriteNode:在SKP操作期间处理碰撞_Ios_Swift_Sprite Kit_Skspritenode_Skaction - Fatal编程技术网

Ios SKSpriteNode:在SKP操作期间处理碰撞

Ios SKSpriteNode:在SKP操作期间处理碰撞,ios,swift,sprite-kit,skspritenode,skaction,Ios,Swift,Sprite Kit,Skspritenode,Skaction,我正在做一个小游戏,现在我遇到了以下问题 我正在特定节点上运行操作(followPath类型): let followTrack: SKAction = SKAction.followPath(ballPath!.CGPath, duration: ACTION_SPEED) movingBall.runAction(followTrack) 但是在动画过程中,如果节点与另一个节点碰撞(例如墙),动画将停止,并且没有碰撞动画 我试过一些东西,比如: func didBeginContact(c

我正在做一个小游戏,现在我遇到了以下问题

我正在特定节点上运行操作(followPath类型):

let followTrack: SKAction = SKAction.followPath(ballPath!.CGPath, duration: ACTION_SPEED)
movingBall.runAction(followTrack)
但是在动画过程中,如果节点与另一个节点碰撞(例如墙),动画将停止,并且没有碰撞动画

我试过一些东西,比如:

func didBeginContact(contact: SKPhysicsContact) {
    var firstBody: SKPhysicsBody = contact.bodyA
    var secondBody: SKPhysicsBody = contact.bodyB

    firstBody.node?.removeAllActions()
    secondBody.node?.removeAllActions()
}
但也没有碰撞(我想那是因为速度是(0,0))


有没有办法处理这个案子?(我并不特别需要一个快速的答案,一个客观的C或一般的答案也会很好!)

你不能将移动动作和物理结合在一起-要么用物理移动节点,要么用动作移动节点,你不能两者兼而有之。当物理试图补偿外部运动(将节点移动到碰撞外部)时,按动作移动将忽略物理特性(即碰撞、力)。最后你会有奇怪的行为。如果仅使用物理来确定接触(碰撞检测),但不允许物理引擎提供碰撞反馈,则只能在物理节点上混合移动动作。@LearnCos2D是的,我使用的是
SKAction
,因为我没有找到另一种使节点遵循特定路径的好方法。所以我希望有一个很酷的技巧来处理这个问题:)你发布的是联系人处理。接触只是两个物理实体相互相交的通知。另一方面,碰撞是两个基于体积的物理体根据物理模拟相互作用的地方。为了使用followPath,您需要远离物理并创建自己的机制来显示碰撞动画。@ZeMoon事实上,使用自定义机制意味着更改接触时的速度向量。但是在
followPath
过程中,节点上没有速度,因此即使在这种情况下,我也不知道如何处理碰撞。