gpt4 book ai didi

ios - Sprite-Kit:移动 SKSpriteNode

转载 作者:搜寻专家 更新时间:2023-11-01 06:30:38 24 4
gpt4 key购买 nike

我知道移动一个物体并不难,但我的不一样,我尝试了各种方法都没有用..

我想达到什么目的?

  • 如果用户点击屏幕左侧,球会向左移动
  • 如果用户点击屏幕右侧,球会向右移动

所以我直接去了 touchesBegan 并写了以下内容:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
ball?.removeAllActions()
for touch in touches {

let moveBY = SKAction.moveTo(x: touch.location(in: view).x, duration: 1.0)
self.ball?.run(moveBY)
}
}

我尝试了四种不同的方法,我无法克服它,也供您引用,这是我的球的照片信息:

info

最佳答案

为了将节点移动到你想要的方向,你首先必须知道三件事

  1. 要移动的节点的anchorPoint
  2. 要移动的节点的父节点的anchorPoint
  3. 要移动的节点的位置

节点的 anchorPoint 属性以从 (0, 0) 到 (1, 1) 的规范化方式存储其值。 SPSpriteNode

默认为 (0.5, 0.5)

节点的 position 属性将其位置存储为正交坐标系中的 (x, y) 坐标 其中点 (0, 0) 位于 anchor 的位置父级是。

所以你的场景的 anchorPoint 是 (0.5, 0.5) 这意味着如果你在坐标 (0, 0) 处放置一个直接的 child , child 将被定位以便它的 anchorPoint 位于 (0, 0),它将始终与其父节点的 anchorPoint 匹配。

当你在 SKSceneSKNodes 中使用这些重载 touchesBegan、touchesMoved 等时,如果你想获得触摸的位置场景(sknode)的所有直接子节点所在的坐标系,你应该做类似的事情

class GameScene: SKScene {

override func didMove(to view: SKView) {
super.didMove(to: view)
let rect = SKSpriteNode(color: .green, size: CGSize(width: 100, height: 100))
addChild(rect)
rect.name = "rect"

// don't pay attention to these two i need them because i dont have .sks file
size = CGSize(width: 1334, height: 750)
anchorPoint = CGPoint(x: 0.5, y: 0.5)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let moveAction = SKAction.move(to: touch.location(in: self), duration: 1)
childNode(withName: "rect")?.run(moveAction)
}
}

希望对您有所帮助,您可能遇到的其他问题是您的球不是场景的直接子元素,并且您的坐标错误

关于ios - Sprite-Kit:移动 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47927884/

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