标签: skcameranode

Swift:像Agar.io一样光滑的SKCameraNode机芯?

如果之前有人玩过Agar.io,你可能会熟悉相机移动的方式.它会滑向鼠标,具体取决于鼠标距离屏幕中心的距离.我正在尝试使用SKCameraNode和touchesMoved重新创建此运动:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
  let pos = touches.first!.location(in: view)
  let center = view!.center
  let xDist = pos.x - center.x
  let yDist = pos.y - center.y
  let distance = sqrt((xDist * xDist) + (yDist * yDist)) * 0.02
  camera?.position.x += xDist * distance * 0.02
  camera?.position.y -= yDist * distance * 0.02
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这看起来并不太糟糕.但是,这有两个问题.

首先,我想为此使用UIPanGestureRecognizer,因为它可以通过多次触摸更好地工作.我无法想象如何做到这一点,因为我无法想到一种方法来使用它来获得从触摸到屏幕中心的距离.

第二个问题是这种运动并不顺利.如果用户停止移动他们的手指一帧,那么由于相机拍摄到绝对停止,因此会有巨大的跳跃.我在数学方面很糟糕,所以我想不出一种方法来实现一个很好的平滑衰减(或攻击).

任何帮助都会很棒!

编辑:我现在这样做:

private var difference = CGVector()

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
  let pos …
Run Code Online (Sandbox Code Playgroud)

touchesmoved touchesbegan ios swift skcameranode

9
推荐指数
1
解决办法
451
查看次数

SpriteKit:如何在跟踪节点但仅在节点移动 Y 像素后平滑地为 SKCameraNode 设置动画?

这个问题和其他问题讨论了如何使用 SKCameraNode 跟踪 SpriteKit 中的节点。

但是,我们的需求各不相同。

其他解决方案,例如更新update(_ currentTime: CFTimeInterval)SKScene 中相机的位置,不起作用,因为我们只想在节点将 Y 像素向下移动到屏幕后调整相机位置。

换句话说,如果节点向上移动 10 个像素,相机应该保持静止。如果节点向左或向右移动,相机应保持静止。

我们尝试随着时间的推移而不是立即对摄像机的位置进行动画处理,但是对内部的摄像机运行 SKActionupdate(_ currentTime: CFTimeInterval)无法执行任何操作。

ios sprite-kit sknode skcameranode

3
推荐指数
1
解决办法
1358
查看次数

SpriteKit:场景中的静态背景与移动的 SKCameraNode

我的目标是在SKScene. 在这个场景中,我经常SKCameraNode根据需要平移。

背景节点必须是静态的,因为它呈现的是远处的天空,预计不会移动。

问题

如果我只是将背景节点作为子节点添加到场景中,则必须以与相机平移相同的方式移动背景,以便背景在相机视口内始终完全可见。我不想这样做,因为背景节点有一些视觉效果和滤镜应用于它,因此移动它会导致性能下降。

我想要的是将背景作为静态节点或视图布置在背景中,而不必移动它来“跟随”相机。

我尝试过什么

我知道可以将节点添加为子节点,SKCameraNode以确保它跟随相机。但正如苹果公司建议的那样,这对于分数标签等 HUD 元素很有用,这些元素通常呈现在所有内容之上。如果您想添加背景,这当然不适用,因为我希望它位于背景中,位于直接作为子节点添加到场景中的节点后面。

尽管如此,我尝试将背景节点作为子节点添加到相机节点并使用 z 位置和类似的东西,但没有任何帮助,正如预期的那样。

我还尝试将背景添加为根的子视图SKView,但由于某种原因我无法将其渲染在场景后面。

提前致谢。

ios sprite-kit skspritenode skscene skcameranode

3
推荐指数
1
解决办法
1011
查看次数