【问题标题】:Special Kind of ScrollView特殊类型的 ScrollView
【发布时间】:2015-08-30 04:00:31
【问题描述】:

所以我有了自己的游戏,用 SpriteKit 和 Obj-C 制作。我想知道几件事。

1) 在 SpriteKit 中制作滚动视图的最佳方式是什么?

2) 如何让这种特殊的滚动视图发挥作用?

我想使用的滚动视图是一种在没有先验知识的情况下看起来可能非常复杂的滚动视图。您正在滚动其中的对象,当它们靠近屏幕中心时,它们会变大。当它们被滚动离开屏幕中心时,它们会变得越来越小,直到达到极限时,它们才会停止最小化。当靠近屏幕中心时,这个限制也适用于变大。

另外,我可能应该注意到,我已经尝试了一些不同的解决方案来廉价地重新制作滚动视图,例如仅将对象添加到 SKNode 并移动 SKNode 相对于手指的位置及其移动。 . .但这不是我想要的。现在,如果没有真正的方法可以为我的游戏添加滚动视图,这就是我要问的。我只需要做某种公式吗?当图像靠近某个位置时使图像变大,并且每次调用-touchesMoved 时都可能运行该公式?如果是这样,那将是一个什么样的公式?一些复杂的数学方程从屏幕中心减去节点的位置,并相应地调整它的大小?类似的东西?如果是这样的话,请你给我一些聪明的数学公式来做这件事,并以代码(可能是完整的函数)格式给我吗?

如果 ALL else 失败,并且没有好的方法可以做到这一点,那么其他方法是什么?

【问题讨论】:

    标签: objective-c sprite-kit scrollview minimize maximize


    【解决方案1】:
    1. 可以将 UIScrollViews 与 SpriteKit 场景一起使用,但其中涉及一些解决方法。我的建议是看看这个github project,这是我在自己的项目中基于 UIScrollView 的。从外观上看,你想要的大部分东西现在实际上已经转换为 Swift,而不是当我第一次查看该项目时的 Objective-C,所以我不知道你会怎样。
    2. 上面链接的项目会导致您的 SKScene 大于屏幕(我认为这就是它需要滚动的原因),因此确定什么靠近和不靠近场景中心并不困难.您可以做的一件事是使用 SpriteKit 中的更新循环根据 Sprite 与固定的已知中心点的距离不断更新 Sprite(可能只是屏幕上的那些)的大小。例如,如果您有一个宽度和高度为10 的屏幕,那么中点将是x,y = 5,5。然后你可以说 size = 1.0 - (2 * distance_from_midpoint)。假设你在中点,大小将是1.0 (1.0 - (2 * 0)),你越远,你的规模就越小。这是一个粗略的示例,不考虑最大或最小固定大小,因此您需要使用它。

    祝你的项目好运。

    编辑:

    好的,我会在这里稍微麻烦一点,帮助你解决这个等式,尽管我的仍然不完美。

    现在,这并没有真正给你一个最小的规模,但它会给你一个最大值(基本上在中点)。不过,这里的这个等式确实有一些缺陷。一方面,您可以使用它根据对象与中点的距离来查找对象的xy 比例。 然而,你并不真正想要两个不同的组件来适应你的规模。如果您的 Sprite 就在 x 中点旁边,并且 x_scale 吐出 0.95 怎么办?嗯,这几乎是全尺寸的。但是如果它远离y 轴的中点,并且它给你一个y 比例,比如0.20,那么你就有问题了。

    为了解决这个问题,我只取当前坐标和当前精灵坐标之间向量的大小或斜边。这个斜边给了我一个代表真实距离的数字,它消除了比例值冲突的问题。

    我在 Google 的 Go-Playground 中创建了一个 example 来说明如何计算它,因此您可以运行代码并查看根据您插入的坐标得到的不同比例。此外,其中使用的等式稍微修改了,基本上和上面一样,但没有maxscale - 部分前面的方程。

    希望对您有所帮助!

    嵌入尝试:

    see this code in play.golang.org

    【讨论】:

    • 谢谢,手表!第二点肯定对我有帮助,因为我很不擅长提出这样的想法。第一点并没有真正帮助我,因为它在 Swift 中。虽然我确实了解 Swift,但我不擅长在两种语言之间进行转换。也许我会用它,也许我不会。无论如何,感谢您分享 github 项目。我会一个人回答这个问题,并等待其他人。如果没有其他人来,这足以考虑我接受的答案。再次感谢!
    • 没问题,如果您需要Objective-C中UIScrollView集成的代码,我可以尝试提取它。或者尝试联系github项目的所有者。
    • 好的,那么我将如何实现这个数学来调整图像的大小?我试着把你的公式弄乱了一点,结果不太好。有什么想法吗?
    • @ChristianKRider 我已经修改了我的原始答案以更好地解决数学部分。
    • 好的,所以在我的 Xcode 项目和您的示例操场上进行了一些实验之后,我发现它运行得不是很好。如果像素距屏幕中心的距离更多 超过(有根据的猜测)100 像素,则缩放变得太小。显然,当 SpriteKit 中的 x-scale 和 y-scale 变得太小时,它会反过来。反向的作用是使图像再次变大,并将图像上下翻转。我尝试找到数字的绝对值,但这没有用。你能帮我弄清楚这里出了什么问题吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多