SpriteKit 中的 ScrollView

2023-12-03

我发现了一些与此类似的其他问题和答案,但没有一个对我来说非常完美。

我的愿景是在屏幕底部有一个水平可滚动视图,我可以在其中滚动浏览看起来像手中的卡片的内容。理想情况下,我最终可以将中间的卡片放大一点,并使其具有突出显示的外观,以向用户显示选择了哪张卡片。如果我能弄清楚如何保持滚动视图的大小调整以适应视图中精灵(卡片)的数量,那就更好了。

不管怎样,我对 XCode 和 Swift 还很陌生,所以我很难接受我发现的东西并改变它。但是,我希望能够快速学习。

到目前为止我所理解的是 UIScrollView 可以覆盖场景,并且使用可移动的 spritenode 我可以滚动视图。然后,视图将以某种方式将坐标转换为 SpriteKit 场景,以移动精灵,使其看起来像在视图中一样。我想这就是它的运作方式。任何帮助都会很棒。我很困惑。


你必须制定自己的逻辑touchesMoved()使用全局/成员变量。

不幸的是,很多 gamedev 和 SK 都是数学和逻辑。你必须想出自己的问题和解决方案。没有手册,因为编程和 Swift 的可能性是无穷无尽的:)


移动卡片:

基本上,你比较每个touch位置到最后一个,这将成为一个“增量值”,您可以使用它来执行操作。

例如,如果我触摸屏幕中心,我的触摸位置是 0,0(或者您设置的锚点)。如果我向右移动手指,那么我现在位于 25, 0...这会创建 +25x 的“增量值”。

使用该增量值,您可以执行各种操作,例如moveBy对于所有卡...所以如果我的 deltaX 为+25,那么我需要将所有卡节点向右移动(移动一定量,您将根据您的喜好确定)。如果我的 deltaX 为 -25,我会将卡片向左移动一定的量。

实际移动的位置取决于您——您可以在其中添加一个函数update() or touchesMoved()以 deltaX 值的特定速率不断地将卡片向特定方向移动。

好吧,那是一口......也许这会有所帮助:

for touch in touches {
   myGlobalDeltaX = myDeltaXFunc(currentTouch: touch)
   myMoveFunc(cards: allTheCards, byDeltaX: myGlobalDeltaX)

- 你可以搜索如何创建 Delta 函数,但这实际上与代数中的函数是一样的。
- myMoveFunc可以像迭代所有卡节点然后运行一样简单.moveBy同时在他们身上。


中检测:

要检测哪张卡位于中心,您可以输入touchesEnded() or update()调用以检查屏幕中心节点的名称/身份...所以类似

// `self` here refers to your GameScene class' instance, which is just an `SKScene` object
let centerX = self.frame.midX
let centerY = self.frame.midY
let center = CGPoint(x: centerX, y: centerY)

let centerNode = self.nodes(at: center)

您显然希望将 centerX 和 centerY 更改为您希望中间卡所在的位置:) 现在,它位于屏幕的正中心。

一旦你有一个centerNode,然后您只需执行您创建的任何函数即可“选择”它。

let selectedCard = centerNode
mySelectionFunc(middleCard: selectedCard)

这可能看起来很多,但我绘制了一些步骤,以便更容易理解它。如果需要,您可以在一行中完成所有这些操作。

mySelectionFunc(middleCard: self.nodes(at: CGPoint(x: self.frame.x, y: self.frame.y)))

希望这对一些人有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpriteKit 中的 ScrollView 的相关文章

随机推荐

  • JSON如何判断成功与错误?

    我是 JSON 新手 一直在 MVC3 ASP NET 中使用它 但是有人可以阐明如何根据 JSON 结果返回错误吗 我的视图中有以下调用 ajax type POST dataType json url EditJSON data Fil
  • 使用 XMLHttpRequest 加载大型 json 文件 (250mb+)

    虽然我查看了此处和其他来源 但我似乎无法完全找到在 javascript 中使用 XMLHttpRequest 加载更大的 JSON 从文件 的问题 我从 C 应用程序生成此 JSON 文件 并且从未遇到过任何无效 json 的问题 较小的
  • 在 swift 3 中使用计时器自动更改 UIPageViewController 中的页面?

    I have UIPageViewController包含 4 个视图控制器 我设置了自动更改视图控制器的计时器 转到下一个视图控制器 这个计时器和方法将起作用但问题是它仅适用于第一张幻灯片以及应用程序运行时和 5 秒后UIPageView
  • Python - 获取命令输出无法解码

    我目前正在开发一个项目 我需要在 powershell 中运行命令 并且部分输出不是英语 特别是希伯来语 例如 问题的简化版本 如果我想获取桌面的内容 并且有一个希伯来语文件名 import subprocess command power
  • 我的 PHP 代码被注释掉了

    在这一切发生之前 我正在运行这个 wordpress 安装来使用 xampp 开发主题 但我决定将这台机器的内存从 2GB 升级到 6GB 因为我需要额外的空间来容纳应用程序 我通过复制代码将代码备份到单独的分区中 由于我当时的操作系统是3
  • 如何在 swift 中使信用卡 (xxxx-xxxx-xxxx) 输入文本

    我正在尝试使用以下代码创建信用卡类型文本 但无法做到这一点 有什么办法吗 func textField textField UITextField shouldChangeCharactersInRange range NSRange re
  • PHP内存分配不起作用

    WordPress 网站 Centos6 阿帕奇2 2 PHP 5 5 内存 4GB 我有以下 php 错误消息 致命错误 允许的内存大小 268435456 字节已耗尽 问题是我已经分配了512M on php 我已经改变了正确的变量ph
  • 如何提醒 Tic Tac Toe 中的获胜者?

    除其他事项外 我在试图提醒获胜者时遇到了麻烦 当用户尝试单击已按下的按钮时 我也尝试发出警报 但也不知道我在这方面正在做什么 感谢所有帮助 感谢你们 table tr td 00 td td 01 td td 02 td tr tr td
  • 将字符串月年(其中年份只有两位数)转换为 pandas 中的日期时间

    我有一个带有列的数据框month year这是一个字符串 其中年份只有两位数 我想转换month year列到日期时间列 df month year Jan 98 Feb 98 Mar 99 Apr 99 May 99 Oct 00 Nov
  • `__attribute__((some_attribute))` 和 `[[some_attribute]]` 之间有区别吗?

    我刚刚第一次遇到方括号中的属性 并且我做了一些背景阅读 http en cppreference com w cpp language attributes 至少对于 gcc 来说 似乎允许使用多种技术 attribute some att
  • 在单线程上下文中使用 JMS Session 对象的原因

    我是 JMS 的新手 所以对于这里的专家来说这可能是一个非常菜鸟的问题 然而 我很难理解 JMS 是如何工作的一个非常重要的概念 来自Javadoc 的JMS 会话 粗体强调我的 会话对象是单线程上下文用于生产和 消费消息 尽管它可以分配提
  • 读取 ASN.1 DER 编码的 RSA 公钥

    我正在编写一个应用程序来更好地了解 DKIM 规范说我从域 TXT 记录中检索 ASN 1 DER 编码 公钥 我可以在 s1024 domainkey yahoo com MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBi
  • MySQL显示两个值之差之和

    以下是我的查询 SELECT n name n customer id m msn m kwh m kwh LAG m kwh OVER PARTITION BY n customer id ORDER BY m data date tim
  • 要使我的网站在移动浏览器上运行,我需要了解什么?

    我正在使用 ASP NET 3 5 和 Visual Studio 2008 我有一些关于我的网站和移动用户的问题 我的网站能在手机上正确显示吗 哪些项目无法在手机上使用 我知道闪存可能是个问题 为了让我的网站 100 在移动设备上运行 您
  • 即使在 %c 前面添加空格后仍继续跳过提示

    根据我看到的关于同一问题的大多数来源和问题 我尝试添加空格 例如 scanf c variable 但由于某种原因 它最终跳过了更多本应由用户输入的提示 include
  • 通过 OAuth 访问 imgUr(上传到用户帐户)

    为了开始执行这个 简单 任务 我研究了一个作为示例的程序here要遵循并重现这些步骤 该过程可以 匿名 上传图像 Private ReadOnly ClientId As String My Client ID gt Private Rea
  • 在 C# 中获取键值对列表的所有可能组合

    我有一个像这样的键值对 var accounts new List
  • 如何将 PFQuery 用于存储为 NSDictionary 值的 PFObject 数组

    我在 iOS 应用程序中使用 parse com 将数据存储到解析云服务 我在查询嵌套对象时遇到问题 我有以下数据模型 游戏 类 包含 获奖者 获胜者 是一个数组NSDictionary 字典中的每一项都是 1 Player 到 N Pow
  • 何时使用断言以及何时使用异常

    大多数时候我会使用异常来检查代码中的条件 我想知道什么时候是使用断言的合适时机 例如 Group group null try group service getGroup abc catch Exception e I dont log
  • SpriteKit 中的 ScrollView

    我发现了一些与此类似的其他问题和答案 但没有一个对我来说非常完美 我的愿景是在屏幕底部有一个水平可滚动视图 我可以在其中滚动浏览看起来像手中的卡片的内容 理想情况下 我最终可以将中间的卡片放大一点 并使其具有突出显示的外观 以向用户显示选择