特殊的 ScrollView
Special Kind of ScrollView
所以我有了自己的游戏,它是用 SpriteKit 和 Obj-C 制作的。我想知道一些事情。
1) 在 SpriteKit 中制作滚动视图的最佳方法是什么?
2) 如何让这种特殊的滚动视图工作?
我想使用的滚动视图是一种在没有先验知识的情况下看起来可能非常复杂的滚动视图。您正在滚动其中的对象,当它们靠近屏幕中心时,它们会变大。当它们从屏幕中心滚动时,它们会变得越来越小,直到达到极限时,它们才会停止最小化。当靠近屏幕中心时,这个限制也会变得更大。
此外,我可能应该注意到,我已经尝试了几种不同的解决方案来廉价重制滚动视图,例如仅将对象添加到 SKNode 并移动 SKNode 相对于手指的位置及其移动。 . .但这不是我想要的。现在,如果没有真正的方法向我的游戏添加滚动视图,这就是我要问的。我只需要做某种公式吗?当图像靠近某个点时将图像变大,也许每次调用 -touchesMoved
时都会 运行 该公式?如果是这样,那会是什么样的公式?一些复杂的数学方程从屏幕中心减去节点的位置,并相应地调整它的大小?像那样的东西?如果是这样的话,你能不能给我一些聪明的数学公式来做到这一点,并以代码(可能是完整的函数)格式给我?
如果 ALL else 失败了,并且没有好的方法来做到这一点,还有什么其他的方法吗?
- 可以在您的 SpriteKit 场景中使用 UIScrollViews,但其中涉及一些变通方法。我的建议是看一下这个 github project,这是我在自己的项目中基于 UIScrollView 的基础。看样子,你要的东西现在大部分都变成了Swift,而不是我第一次看这个项目时的Objective-C,所以我不知道那是怎么回事'会和你一起去的。
- 上面链接的项目会导致你的 SKScene 比屏幕大(我想这就是它需要滚动的原因),所以确定什么靠近和不靠近场景的中心不会很难。您可以做的一件事是使用 SpriteKit 中的更新循环根据精灵与固定的已知中心点的距离不断更新精灵(可能只是屏幕上的那些)的大小。例如,如果屏幕的宽度和高度为
10
,则中点将为 x,y = 5,5
。然后你可以说 size = 1.0 - (2 * distance_from_midpoint)
。假设您位于中点,则尺寸将为 1.0
(1.0 - (2 * 0)
),距离越远,比例越小。这是一个不考虑最大或最小固定大小的粗略示例,因此您需要使用它。
祝你的项目好运。
编辑:
好吧,虽然我的方程式还不够完美,但我会在这里稍微偏离一下我的方式来帮助你解决这个方程式。
现在,这实际上并没有给你一个最小比例,但它会给你一个最大比例(基本上在中点)。不过,这里的等式确实有一些缺陷。首先,您可以使用它来根据对象与中点的距离找到对象的 x
和 y
比例。 但是,您并不真的需要两个不同的组件。如果您的 Sprite 正好在 x 中点旁边,并且 x_scale 吐出 0.95 怎么办?好吧,这几乎是全尺寸的。但是,如果它远离 y
轴上的中点,并且它给你一个 y
的比例,比如 0.20,那么你就有问题了。
为了解决这个问题,我只取当前坐标和当前精灵坐标之间的向量的大小或斜边。那个斜边给了我一个代表真实距离的数字,它消除了比例值冲突的问题。
我已经 example 介绍了如何在 Google 的 Go-Playground 中进行计算,因此您可以 运行 代码并查看您获得的不同尺度在你插入的坐标上。另外,其中使用的方程稍微修改,它基本上与上面相同,但没有前面部分的maxscale -
部分方程。
希望这对您有所帮助!
嵌入尝试:
see this code in play.golang.org
所以我有了自己的游戏,它是用 SpriteKit 和 Obj-C 制作的。我想知道一些事情。
1) 在 SpriteKit 中制作滚动视图的最佳方法是什么?
2) 如何让这种特殊的滚动视图工作?
我想使用的滚动视图是一种在没有先验知识的情况下看起来可能非常复杂的滚动视图。您正在滚动其中的对象,当它们靠近屏幕中心时,它们会变大。当它们从屏幕中心滚动时,它们会变得越来越小,直到达到极限时,它们才会停止最小化。当靠近屏幕中心时,这个限制也会变得更大。
此外,我可能应该注意到,我已经尝试了几种不同的解决方案来廉价重制滚动视图,例如仅将对象添加到 SKNode 并移动 SKNode 相对于手指的位置及其移动。 . .但这不是我想要的。现在,如果没有真正的方法向我的游戏添加滚动视图,这就是我要问的。我只需要做某种公式吗?当图像靠近某个点时将图像变大,也许每次调用 -touchesMoved
时都会 运行 该公式?如果是这样,那会是什么样的公式?一些复杂的数学方程从屏幕中心减去节点的位置,并相应地调整它的大小?像那样的东西?如果是这样的话,你能不能给我一些聪明的数学公式来做到这一点,并以代码(可能是完整的函数)格式给我?
如果 ALL else 失败了,并且没有好的方法来做到这一点,还有什么其他的方法吗?
- 可以在您的 SpriteKit 场景中使用 UIScrollViews,但其中涉及一些变通方法。我的建议是看一下这个 github project,这是我在自己的项目中基于 UIScrollView 的基础。看样子,你要的东西现在大部分都变成了Swift,而不是我第一次看这个项目时的Objective-C,所以我不知道那是怎么回事'会和你一起去的。
- 上面链接的项目会导致你的 SKScene 比屏幕大(我想这就是它需要滚动的原因),所以确定什么靠近和不靠近场景的中心不会很难。您可以做的一件事是使用 SpriteKit 中的更新循环根据精灵与固定的已知中心点的距离不断更新精灵(可能只是屏幕上的那些)的大小。例如,如果屏幕的宽度和高度为
10
,则中点将为x,y = 5,5
。然后你可以说 size =1.0 - (2 * distance_from_midpoint)
。假设您位于中点,则尺寸将为1.0
(1.0 - (2 * 0)
),距离越远,比例越小。这是一个不考虑最大或最小固定大小的粗略示例,因此您需要使用它。
祝你的项目好运。
编辑:
好吧,虽然我的方程式还不够完美,但我会在这里稍微偏离一下我的方式来帮助你解决这个方程式。
现在,这实际上并没有给你一个最小比例,但它会给你一个最大比例(基本上在中点)。不过,这里的等式确实有一些缺陷。首先,您可以使用它来根据对象与中点的距离找到对象的 x
和 y
比例。 但是,您并不真的需要两个不同的组件。如果您的 Sprite 正好在 x 中点旁边,并且 x_scale 吐出 0.95 怎么办?好吧,这几乎是全尺寸的。但是,如果它远离 y
轴上的中点,并且它给你一个 y
的比例,比如 0.20,那么你就有问题了。
为了解决这个问题,我只取当前坐标和当前精灵坐标之间的向量的大小或斜边。那个斜边给了我一个代表真实距离的数字,它消除了比例值冲突的问题。
我已经 example 介绍了如何在 Google 的 Go-Playground 中进行计算,因此您可以 运行 代码并查看您获得的不同尺度在你插入的坐标上。另外,其中使用的方程稍微修改,它基本上与上面相同,但没有前面部分的maxscale -
部分方程。
希望这对您有所帮助!
嵌入尝试:
see this code in play.golang.org