特殊类型的ScrollView

时间:2015-08-30 04:00:31

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

所以我的游戏是用SpriteKit和Obj-C制作的。我想知道几件事。

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

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

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

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

如果所有其他方式失败,并且没有好办法做到这一点,那会有什么其他方式?

1 个答案:

答案 0 :(得分:2)

  1. 可以在您的SpriteKit场景中使用UIScrollViews,但其中涉及到一些变通方法。我的建议是看看这个github project,这就是我在我自己的项目中使用UIScrollView的原因。从它的外观来看,你想要的大部分东西实际上已经转换为Swift,而不是Objective-C,当我第一次看到这个项目的时候,所以我不知道它是怎么回事#C'和你一起吃。
  2. 上面链接的项目会导致你的SKScene比屏幕大(我认为这就是为什么它需要滚动),所以确定什么是和不接近场景的中心不会很难。您可以做的一件事是使用SpriteKit中的更新循环,根据它们与固定的已知中心点的距离,不断更新Sprite的大小(可能只是屏幕上的那些)。例如,如果您有宽度和高度10的屏幕,则中点将为x,y = 5,5。然后你可以说size = 1.0 - (2 * distance_from_midpoint)。鉴于您处于中点,大小将为1.01.0 - (2 * 0)),距离越远,您的规模就越小。这是一个粗略的例子,没有考虑最大或最小固定大小,因此您将需要使用它。
  3. 祝你的项目好运。

    修改:

    好吧,我会稍微离开这里,帮助你解决这个问题,尽管我仍然不完美。

    enter image description here

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

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

    我已经example了解了如何在Google的Go-Playground中计算这个内容,因此您可以根据插入的坐标运行代码并查看不同的比例尺。此外,在那里使用的等式是稍微修改,它基本上与上面相同,但没有等式前部的maxscale -部分。

    希望这会有所帮助!

    嵌入尝试:

    see this code in play.golang.org