iOS Swift SpriteKit DiEndContact工作不正常
在我的应用程序(游戏)中,当我的节点在水下时,我需要检测与水的接触并运行动作(使用键),我使用iOS Swift SpriteKit DiEndContact工作不正常,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,在我的应用程序(游戏)中,当我的节点在水下时,我需要检测与水的接触并运行动作(使用键),我使用didBeginContact和Update方法来完成。但是当我从水中移动我的节点(通过触摸)时,我会使用didEndContact来检测节点是否出水并停止之前的操作(使用键),这一切都可能很好,但有时didEndContact不会停止操作,也不会检测(使用print(“EndContact”))触点是否结束 检查到节点之间的联系: func didBeginContact(contact: SKPhy
didBeginContact
和Update
方法来完成。但是当我从水中移动我的节点(通过触摸)时,我会使用didEndContact
来检测节点是否出水并停止之前的操作(使用键),这一切都可能很好,但有时didEndContact
不会停止操作,也不会检测(使用print(“EndContact”)
)触点是否结束
检查到节点之间的联系:
func didBeginContact(contact: SKPhysicsContact)
{
if let node1 = contact.bodyA.node
{
let entityNode = node1 as! Entity
entityNode.collideWith(contact.bodyB, contact: contact)
}
if let node2 = contact.bodyB.node
{
let entityNode = node2 as! Entity
entityNode.collideWith(contact.bodyA, contact: contact)
}
}
func didEndContact(contact: SKPhysicsContact)
{
if let node1 = contact.bodyA.node
{
let entityNode = node1 as! Entity
entityNode.collideEndedWith(contact.bodyB, contact: contact)
}
if let node2 = contact.bodyB.node
{
let entityNode = node2 as! Entity
entityNode.collideEndedWith(contact.bodyA, contact: contact)
}
}
Entity
是SKSpriteNode
的子类,我在其中声明物理位掩码等。基于实体
,我获得了玩家
职业和敌人
职业。在我的Player
类中,我得到了当didBeginContact
和didEndContact
触发时运行一些代码的函数
override func collideWith(body: SKPhysicsBody, contact: SKPhysicsContact)
{
if let enemy = body.node as? Enemy
{
contactingWater = true
self.runAction(SKAction.scaleBy(1.1, duration: 0.2), withKey: "action")
}
}
override func collideEndedWith(body: SKPhysicsBody, contact: SKPhysicsContact)
{
if let enemy = body.node as? Enemy
{
contactingWater = false
self.removeActionWithKey("action")
}
}
override func update(delta: CFTimeInterval){
}
此外,我还在update
方法中的“mainsecene”中更新我的“Player”。它似乎工作正常,但正如我所说的,有时didEndContact
不会触发
override func update(currentTime: NSTimeInterval)
{
if lastUpdateTime > 0
{
dt = currentTime - lastUpdateTime
} else {
dt = 0
}
lastUpdateTime = currentTime
player?.update(dt)
}
我注意到这种“有时”会发生
当我把节点移到水里,再移回来时,移开我的手指,我仍然认为我接触到了水。我很乐意接受任何建议,因为我在编程方面很新)thx你能列出一些可以复制问题的代码吗?但是“有时不停止操作”如果操作仅在0.2秒内,你怎么知道呢?因为我正在更新我的播放器类(包含collideWith和collideWith func,缩放动作为0,2秒)主场景中的deltatime,该动作会重复,直到玩家接触到水,当我将玩家从水中移动时,动作会被移除,正如我所说,有时候接触结束时动作不会被移除