我要使其子精灵跟随其相应的父精灵。子级精灵具有一个物理实体,该实体不应与父级的物理实体混淆。我试图在父子对象的子类中重写这些功能,如下所示:
file.py --word 'Hello world!'
但是没有成功:(
我专门用SKActions移动父级精灵。
结果是这些精灵不会粘在一起。
public override func run(_ action: SKAction) {
super.run(action)
physicsSprite.run(action)
}
public override func run(_ action: SKAction, withKey key: String) {
super.run(action, withKey: key)
physicsSprite.run(action, withKey: key)
}
public override func removeAllActions() {
super.removeAllActions()
physicsSprite.removeAllActions()
}
在这种情况下,physicsSprite是SKSpriteNode子类中的childNode。预先感谢
答案 0 :(得分:0)
很多方法可以做到这一点。定期比较节点(领导者/跟随者)的位置并相应地更新位置。示例:领导者转到某些位置>位置不匹配>将跟随者移动到领导者的位置。
代码示例
class GameScene: SKScene {
private var leader: SKSpriteNode!
private var follower: SKSpriteNode!
override func didMove(to view: SKView) {
self.leader = SKSpriteNode(color: UIColor.red, size: CGSize(width: 30, height: 30))
self.follower = SKSpriteNode(color: UIColor.green, size: CGSize(width: 30, height: 30))
self.addChild(leader)
self.addChild(follower)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches {
let target = t.location(in: self)
// Move the leader to the touch location
leader.run(SKAction.move(to: target, duration: 1), withKey: "moving")
}
}
override func update(_ currentTime: TimeInterval) {
// Check positions
if follower.position != leader.position {
// Check if the follower has a 'following' action already
if follower.action(forKey: "following") == nil {
// Move the follower
follower.run(SKAction.move(to: leader.position, duration: 1), withKey: "following")
}
}
}
}
请注意,每帧调用一次更新操作,这可能太多了。根据您的情况,您可以创建一种每秒调用一次的循环。
另一种方法是始终在下一个节点上运行相同的操作(持续时间较长,这样您就可以实际看到下一个节点)。
编辑: 有关冲突的更多信息:Can't understand how collision bit mask works(只需确保它们具有不同的接触位掩码-即0b01和0b10且彼此之间没有冲突位掩码)
答案 1 :(得分:0)
您可以尝试使用SKConstraint
对象,该对象描述了对节点位置或方向的数学约束。
从文档中
将一个节点保持在另一个节点或场景中某个点的指定距离内。
请参见https://developer.apple.com/documentation/spritekit/skconstraint
答案 2 :(得分:-1)
尝试一下:
<div class="reviewwrapper">
text
<div id="reviewhover1">
text
</div>
</div>
<div class="reviewwrapper">
text
<div id="reviewhover2" style="background: red;">
text
</div>
</div>
<div class="reviewwrapper">
text
<div id="reviewhover3" style="background: blue;">
text
</div>
</div>
<div class="reviewwrapper">
text
<div id="reviewhover4" style="background: pink;">
text
</div>
</div>
有关更多信息,请检查documentation