沿 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 的相关文章

  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • 在 Swift 中以编程方式为 iOS 制作带有名字首字母的图像,例如 Gmail

    我需要在 UITableView 中显示与其姓名相对应的每个用户的个人资料图片 在下载图像之前 我需要显示一张带有他名字的第一个字母的图像 就像在 GMail 应用程序中一样 如何在 Swift for iOS 中以编程方式执行此操作 不需
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • iOS Swift 和 reloadRowsAtIndexPaths 编译错误

    我与 xCode Swift 陷入僵局并刷新 UITableView 的单行 这条线有效 self tableView reloadData 而这条线没有 self tableView reloadRowsAtIndexPaths curr
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • Socket.io 400(错误请求)

    我的服务器上有这段代码 var express require express var routes require routes var user require routes user var http require http var
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • WKWebView 未打开自定义 URL 方案(js 在新窗口中打开自定义方案链接)

    我有一个WKWebView在我的应用程序中 我不使用UIWeb视图 因为由于某种奇怪的原因 它无法正确打开包含大量 JS 代码的网页 当我点击链接时自定义 url 方案 scm 它确实nothing My code void viewDid
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • iOS:滚动视图仅在键盘出现后才起作用

    我制作了滚动视图 其中有很多文本字段 我添加了更新的 TPKeyBoardAvoidingScrollView 并将其添加到滚动视图的文件所有者中 我在 h 文件中添加了插座 在 m 文件中综合并添加了行 self view addSubv
  • 为 iOS 应用程序加载基于 SVG 的图像资源

    我从 thenounproject 购买了一个图标作为 SVG 图像 然后我使用一个名为的 macOS 程序Gapplin http gapplin wolfrosch com 将此 SVG 导出为 PNG 图像 它显示为 100x100
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • 如何在 iOS 应用程序中通过其他应用程序共享内容/数据,就像我们在 Android 应用程序中使用 Intent.ACTION_SEND 所做的那样?

    在Android中 我们可以通过Intent ACTION SEND startactivity api轻松共享内容 文本 图像 视频等 我已经有一个应用程序可以完美地做到这一点 并且有一个并行的 iOS 应用程序 我希望它能够实现相同的功
  • 不明白 Swift 中的闭包示例

    我正在尝试了解 swift 和闭包 我被这个例子困住了 numbers map number Int gt Int in let result 3 number return result 什么是 number Int gt Int 它是一
  • UITableView 滑动删除 iOS 上的手势冲突

    我的手势识别器有问题 我的目标是在表视图中实现使用滑动删除 但我认为其他手势是相互冲突的 我正在使用这个库romonthego REFrostedViewController https github com romaonthego REF
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam

随机推荐

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

    我已经在很多应用程序中实现了应用内购买 并在沙盒环境中测试了所有这些应用程序 现在 我正在开发该应用程序的应用程序内购买之一 我昨天测试了该应用程序并且工作正常 但到今天早上 现有的沙箱帐户都没有用于应用程序内测试 我跟着其中一个苹果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 移动到我