gpt4 book ai didi

ios - 平移时正确定位相机

转载 作者:搜寻专家 更新时间:2023-10-30 23:09:13 24 4
gpt4 key购买 nike

平移后,我很难在我的视野内设置边界和正确定位相机。所以这是我的场景。

我有一个比屏幕大的节点,我想让用户四处平移以查看完整 map 。当 View 为 640 x 1136 时,我的节点为 1000 x 1400。 map 节点内的 Sprite 具有默认 anchor 。然后我向 map 节点添加了一个相机并将其位置设置为 (0.5, 0.5)

enter image description here

现在我想知道当用户平移屏幕时是否应该更改相机或 map 节点的位置?第一种方法似乎有问题,因为我不能简单地将平移添加到相机位置,因为位置被定义为 (0.5, 0.5) 并且平移值比它大得多。所以我尝试将它乘以/除以屏幕尺寸,但这似乎不起作用。第二种方法更好吗?

var map = Map(size: CGSize(width: 1000, height: 1400))

override func didMove(to view: SKView) {
(...)
let pan = UIPanGestureRecognizer(target: self, action: #selector(panned(sender:)))
view.addGestureRecognizer(pan)

self.anchorPoint = CGPoint.zero
self.cam = SKCameraNode()
self.cam.name = "camera"

self.camera = cam
self.addChild(map)
self.map.addChild(self.cam!)

cam.position = CGPoint(x: 0.5, y: 0.5)
}

var previousTranslateX:CGFloat = 0.0

func panned (sender:UIPanGestureRecognizer) {
let currentTranslateX = sender.translation(in: view!).x

//calculate translation since last measurement
let translateX = currentTranslateX - previousTranslateX

let xMargin = (map.nodeSize.width - self.frame.width)/2

var newCamPosition = CGPoint(x: cam.position.x, y: cam.position.y)
let newPositionX = cam.position.x*self.frame.width + translateX

// since the camera x is 320, our limits are 140 and 460 ?
if newPositionX > self.frame.width/2 - xMargin && newPositionX < self.frame.width - xMargin {
newCamPosition.x = newPositionX/self.frame.width
}

centerCameraOnPoint(point: newCamPosition)

//(re-)set previous measurement
if sender.state == .ended {
previousTranslateX = 0
} else {
previousTranslateX = currentTranslateX
}
}

func centerCameraOnPoint(point: CGPoint) {
if cam != nil {
cam.position = point
}
}

最佳答案

您的相机实际上位于中心右侧 0.5 点和中心上方 0.5 点的像素点。在 (0, 0) 处,您的相机位于屏幕的死点。

我认为你犯的错误是概念上的错误,认为场景的 anchor (0.5, 0.5) 与场景的中心坐标相同。

如果您以像素为单位工作(看起来确实如此),则相机位置 (500, 700) 将位于 map 的右上角,(-500, -700) 将位于 map 的左下角.

这假设您使用的是 Xcode SpriteKit 模板默认的中点 anchor 。

这意味着您的问题的答案是:随心所欲地在 map 周围移动相机,因为您现在确信它是像素文字。

有一个警告...

很多游戏都使用约束在相机到达 map 边缘之前将其停止,这样 map 就不会一半在屏幕上,一半在屏幕上。以这种方式显示 map 的边缘,但相机移动的最远距离仅足以显示 map 的边缘。当您有一个玩家/角色可以走到/移动到边缘,但相机并没有一直走到那里时,这就变成了基于约束的努力。

关于ios - 平移时正确定位相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41827586/

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