沿 X 轴拖动 SceneKit 节点同时保持速度?雨燕3

2024-01-16

Swift 3、SceneKit:在我的游戏中,屏幕中央有一个 SCNSphere 节点。球体通过重力落到 SCNBox 节点上,一旦与盒子碰撞,就会对其应用 SCNVector3(0,6,0) 的速度。

一个新的盒子被创建并向前(z+)移动到我的相机和球体。球体上升、达到峰值,然后(通过重力)向新盒子落回,当它与新盒子碰撞时,将对其应用 SCNVector(0,6,0) 的速度。这个过程不断重复。基本上是一个在新接近的盒子上反复弹跳的球体。

然而,不是只有一个盒子,而是三个连续的盒子。所有盒子都从球体节点的前面开始,并在创建时朝球体节点移动,盒子排成一排,一个位于球体的左侧,一个位于球体的正前方(中间),第三个位于球体的正前方(中间)。球体的右侧。

我希望能够在屏幕上拖动手指并移动球体,以便它可以落在左侧和右侧的方框上。当我拖动时,我根本不希望改变 y 速度或 y 位置。我只希望球体节点的 x 位置能够反映我的手指相对于屏幕的真实世界 x 位置。我也不希望球体节点仅根据触摸来更改位置.

例如,如果球体的位置位于 SCNVector3(2,0,0),并且用户在 SCNVector3(-2,0,0) 附近点击,我不希望球体“传送”到用户点击的位置。我希望用户将球体从最后的位置拖动。

func handlePan(recognizer: UIPanGestureRecognizer) {

    let sceneView = self.view as! SCNView
    sceneView.delegate = self
    sceneView.scene = scene


    let trans:SCNVector3 = sceneView.unprojectPoint(SCNVector3Zero)
    let pos:SCNVector3 = player.presentation.position
    let newPos = (trans.x) + (pos.x)
    player.position.x = newPos
}

我只希望球体节点的 x 位置能够反映手指相对于屏幕的真实 x 位置

您可以通过使用来做到这一点UIPan手势识别器 https://developer.apple.com/reference/uikit/uipangesturerecognizer并得到翻译 https://developer.apple.com/reference/uikit/uipangesturerecognizer/1621207-translation在视图的坐标系中。

let myPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
let trans2D:CGPoint = myPanGestureRecognizer.translation(in:self.view)
let transPoint3D:SCNVector3 = SCNVector3Make(trans2D.x, trans2D.y, <<z>>)

对于 z 值,请参阅取消项目点 https://developer.apple.com/reference/scenekit/scnscenerenderer/1522631-unprojectpoint讨论,其中说 z 应该指的是您想要相对于视锥体的近剪裁平面和远剪裁平面取消投影的深度。

然后,您可以将平移取消投影到场景的 3D 世界坐标系,这将为您提供球体节点的平移。一些部分示例代码:

let trans:SCNVector3 = sceneView.unProjectPoint(transPoint3D)
let pos:SCNVector3 = sphereNode.presentationNode.position
let newPos:SCNVector3 = // trans + pos
sphereNode.position = newPosition
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

沿 X 轴拖动 SceneKit 节点同时保持速度?雨燕3 的相关文章

  • Flutter - 选择 TextFormField 时键盘不显示

    我目前遇到一个问题 当我选择任何一个时 键盘不会出现TextFormFielda 内的小部件Form小部件 这是表单的代码 位于我的内部CreateAccountForm有状态的小部件 import package flutter mate
  • NSCalendar 返回明年第一周上周一的错误日期

    我使用下面的代码使用随机日期来计算上周一 哪个工作文件但我的代码在明年日期中断 下面是相同的代码 NSDate date NSDate dateWithTimeIntervalSince1970 1483620311 228 NSLog c
  • 如何检测 UISwipeGestureRecognizer 的结束?

    来自苹果文档 滑动是一种离散手势 因此每个手势仅发送一次关联的操作消息 void touchesEnded NSSet touches withEvent UIEvent event 当我使用 UISwipeGestureRecognize
  • Admob 广告无法快速显示

    您好 我正在尝试将 admob 广告添加到已使用 swift 上传到应用商店的应用程序中 我在 admob 中制作了一个应用程序并复制了 appid 和广告 id 并显示了各自的横幅广告和插页式广告 这里的问题是当我写这行时 request
  • 如何在 Swift 中将文件名与文件扩展名分开?

    给定包中文件的名称 我想将该文件加载到我的 Swift 应用程序中 所以我需要使用这个方法 let soundURL NSBundle mainBundle URLForResource fname withExtension ext 无论
  • 无法连接到 iTunes Store(获取应用内购买列表)

    我正在尝试从我的应用程序的应用程序内购买项目商店中获取列表 这是我所做的 安装了新的配置文件并启用了应用内购买 替换配置文件很棘手 但我认为我的设置是正确的 验证税务和银行信息是否正常 该应用程序已在商店出售 创建测试用户 在测试设备上以测
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • iOS 中 NSDecimalNumber 的小数分隔符错误

    我尝试通过以下方式输出具有正确的小数分隔符的十进制数的描述 NSString strValue 9 94300 NSDecimalNumber decimalNumber NSDecimalNumber decimalNumberWithS
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • 用户验证 Facebook 后未调用应用程序打开 Url 方法

    我已将 ios 应用程序中的 facebook 升级到 3 0 并使用提供的代码https developers facebook com docs howtos login with facebook using ios sdk http
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事

随机推荐

  • 应用内购买沙盒 - 地址无效

    我已经在很多应用程序中实现了应用内购买 并在沙盒环境中测试了所有这些应用程序 现在 我正在开发该应用程序的应用程序内购买之一 我昨天测试了该应用程序并且工作正常 但到今天早上 现有的沙箱帐户都没有用于应用程序内测试 我跟着其中一个苹果thr
  • 修改函数内的变量[重复]

    这个问题在这里已经有答案了 假设我有一个内联脚本标记 其代码非常简单 如下所示 function var test This is a simple test function modifyTest s s Modified test te
  • C# 中的 C++ CString 等效项

    是什么C 相当于 MFC 的CString 大概System String 但为了提供更多有用的信息 System String实例是不可变的 连接 子字符串 等实际上创建了新的字符串对象 因此使用字符串实例作为构建输出的缓冲区是一个非常糟
  • Android Studio 2.0 IllegalArgumentException:按钮不存在0

    在Ubuntu上使用android studio 2 0稳定版本和之前的1 5版本 我总是遇到这个异常 有任何想法吗 It appears in the EventLog None
  • 在 Visual C++ 中使用 dllimport

    我已经有几年没有做过任何 Windows 编程了 而且我对如何使用 dllimport 有点生疏了 我有一些类似的事情 extern C declspec dllimport int myFunct int main cout lt
  • 玩笑测试(ReferenceError:google未定义)ReactJS和Google Charts

    我正在使用他们的 CDN 中的 google script 标签 尝试过 body 和 head 我的应用程序中的 Google Chart 工作正常 但是它导致我的 Jest 测试失败 里面的
  • 在 PHP 的 Heredoc 中使用变量

    我是 PHP SQL 的新手 我尝试在定界文档中使用变量 因为我需要输出大量文本 我只包含第一句话 因为它足以说明问题 我的问题是在定界文档中 变量 见下文 data game name and data game owner 不被识别为变
  • XSLT 中的矩阵转置

    我正在尝试从这种输入
  • 计算通过图的路径数

    我正在寻找独特的数量x从特定节点开始的图的长度路径 但是我有一个限制 即在任何路径上没有节点被访问一次以上 For example take the following graph 如果我追求从 5 开始的 3 长度路径的数量 答案是 9
  • 为什么许多语言区分大小写?

    为什么许多语言区分大小写 仅仅是继承问题吗 C 区分大小写 因为 C 是 Java 区分大小写 因为 C 是 等等 还是背后有更务实的原因 我认为您不会得到比 因为该语言的作者认为这样更好 更好的答案 就我个人而言 我认为他们是对的 我不想
  • 如何在 Windows 2003 任务计划程序中为任务创建无限持续时间

    我正在尝试创建无限期的任务 在 Windows Server 2008 上 如果我不指定持续时间 则持续时间被假定为无限 但是 在 Windows Server 2003 上 必须指定持续时间 并且等于或大于间隔 目前 如果要重复很长时间
  • “构建 flutter 工具......”需要很长时间

    由于 Android Studio 的一些问题 我使 flutter 缓存失效 当我尝试时flutter upgrade 我陷入了 构建颤动工具 阶段 flutter upgrade Downloading Dart SDK from Fl
  • 如何更改 PyQt 或 PySide 中的最小化事件行为?

    我正在开发一个 Qt 应用程序并更改了关闭行为closeEvent虚函数 https deptinfo ensip univ poitiers fr ENS pyside docs PySide QtGui QWidget html hig
  • Xcode 方案构建目标中的构建顺序

    为了为我的程序构建安装程序 我添加了一个 安装程序 Xcode 项目 目标 它将所有需要的二进制文件复制到临时位置 然后运行必要的逻辑来构建包 我遇到的问题是我想将此安装程序项目直接映射到其他一些项目 以便每次我尝试构建安装程序项目时都会构
  • 如何使用 HUE 查找 CDH(Cloudera 的发行版,包括 Apache Hadoop)版本

    我只能访问 HUE 并且正在尝试使用 HUE 找出 CDH 版本 你能帮我吗 我没有找到直接的答案 但这就是我在 Hue 中找到 CDH 版本的方法 我的CDH版本是5 14 2
  • LINQ - GroupBy 键,然后将每个分组的项目放入单独的“存储桶”中

    我有一个这样的项目列表 public class Item public int ItemId get set public string ItemName get set public int ListId get set 1 Test1
  • HostingEnvironment.QueueBackgroundWorkItem 使用 ASP.Net 线程池或其他线程池?

    我有一个 ASP Net 应用程序 其中后台任务运行使用HostingEnvironment QueueBackgroundWorkItem如下面的代码所示 Question 下面代码中安排的后台任务是使用 ASP Net 线程池线程中的线
  • Asp.Net MVC 默认路由

    我的默认路线是这样定义的 routes MapRoute Default Route name controller action id URL with parameters new controller Home action Inde
  • 将 UTC 日期格式转换为本地 nsdate

    我从服务器获取 UTC 时区的字符串日期 我需要将其转换为本地时区 MY CODE let utcTime 2015 04 01T11 42 00 269Z let dateFormatter NSDateFormatter dateFor
  • 沿 X 轴拖动 SceneKit 节点同时保持速度?雨燕3

    Swift 3 SceneKit 在我的游戏中 屏幕中央有一个 SCNSphere 节点 球体通过重力落到 SCNBox 节点上 一旦与盒子碰撞 就会对其应用 SCNVector3 0 6 0 的速度 一个新的盒子被创建并向前 z 移动到我