gpt4 book ai didi

swift - 重复 SKAction 起始位置更改

转载 作者:行者123 更新时间:2023-11-30 10:37:19 25 4
gpt4 key购买 nike

我有一条路径和一个 SKShapeNode,并且希望 SKShapeNode 永远遵循该路径(六边形形状)。

let pathHexagon:SKShapeNode = SKShapeNode()
let player:SKShapeNode = SKShapeNode()

pathHexagon.path = playerHexagonPath(pathHexRadius)
pathHexagon.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))
pathHexagon.strokeColor = UIColor.blackColor()
pathHexagon.lineWidth = 5
addChild(pathHexagon)

player.path = playerPath(playerSize)
player.position = CGPoint(x: CGRectGetMidX(frame), y:CGRectGetMidY(frame))
player.strokeColor = UIColor.blackColor()
player.fillColor = UIColor.blackColor()
addChild(player)

let action = SKAction.followPath(playerHexagonPath(pathHexRadius), speed: CGFloat(300.0))
player.runAction(SKAction.repeatActionForever(action))

它有点工作,但起始位置每个周期都会改变:

http://recordit.co/lEcLxs4DoD

为什么会发生这种情况?

最终我想将此动画链接到用户输入。作为练习,我正在尝试复制 super 六边形。因此,如果您知道更好的方法,请也告诉我。

最佳答案

这就是 asOffset 参数的作用:

@param asOffset If YES, the points in the path are relative offsets to the node’s starting position. If NO, the points in the node are absolute coordinate values.

所以根据我的理解,当我们将其设置为 false 时,路径中的点是节点父节点坐标系中的绝对坐标值。

您可以做两件事来使其发挥作用:

1)创建一个容器并向其中添加一个玩家

2)更改场景的 anchor ,但我怀疑这适合您,因为您必须重新定位所有内容。

可能还有其他方法可以解决这个问题,但我自己没有尝试过。

选项 1:

  let container = SKNode()
player.path = playerPath(playerSize)
player.position = CGPoint(x: 0, y: 0)
player.strokeColor = UIColor.blackColor()
player.fillColor = UIColor.blackColor()
container.addChild(player)
container.position = CGPoint(x:frame.midX, y:frame.midY)
addChild(container)

let action = SKAction.followPath(pathHexagon.path!, asOffset: false, orientToPath: true, speed: CGFloat(300.0))
player.runAction(SKAction.repeatActionForever(action))

或者,选项二:

self.anchorPoint = CGPoint(x:0.5, y:0.5)

mainHexagon.path = hexagonPath(mainHexRadius)
mainHexagon.strokeColor = UIColor.redColor()
mainHexagon.lineWidth = 10
addChild(mainHexagon)

pathHexagon.path = playerHexagonPath(pathHexRadius)
pathHexagon.strokeColor = UIColor.blackColor()
pathHexagon.lineWidth = 5
addChild(pathHexagon)

player.path = playerPath(playerSize)
player.position = CGPoint(x: 0, y: 0)
player.strokeColor = UIColor.blackColor()
player.fillColor = UIColor.blackColor()
addChild(player)

let action = SKAction.followPath(pathHexagon.path!, asOffset: false, orientToPath: true, speed: CGFloat(300.0))
player.runAction(SKAction.repeatActionForever(action))

关于swift - 重复 SKAction 起始位置更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57690795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com