2015-08-30 6 views
0

Итак, у меня есть игра, сделанная с помощью SpriteKit и Obj-C. Я хочу знать пару вещей.Специальный вид ScrollView

1) Каков наилучший способ создания прокрутки в SpriteKit?

2) Как мне получить этот особый вид прокрутки?

Вид прокрутки, который я хотел бы использовать, - это тот, который, без предварительного знания, кажется, что это может быть довольно сложно. Вы прокручиваете объекты в нем, и когда они приближаются к центру экрана, они становятся больше. Когда они прокручиваются от центра экрана, они становятся все меньше и меньше, пока их предел не будет соблюден, они прекратят минимизацию. Это ограничение распространяется и на получение большего приближения к центру экрана.

Кроме того, я должен заметить, что я попробовал несколько разных решений для дешевых римейков прокрутки, например, просто добавляя объекты в SKNode и перемещая позицию SKNode относительно пальца и его движение. , , но это не то, что я хочу. Теперь, если нет реального способа добавить в мою игру прокрутку, вот что я прошу. Должен ли я просто сделать какую-то формулу? Сделайте изображения больше, когда они приблизятся к определенному месту, и, возможно, запустите эту формулу каждый раз, когда вызывается -touchesMoved? Если да, то какая это была бы формула? Некоторое сложное математическое уравнение вычитает положение узла из центра экрана и соответствующим образом определяет его? Что-то вроде того? Если это так, не могли бы вы дать мне некоторую разумную формулу Math для этого и передать ее мне в коде (возможно, полную версию function)?

Если ВСЕ еще не удается, и нет хорошего способа сделать это, каким бы другим способом быть?

ответ

2
  1. Можно использовать UIScrollViews со сценариями SpriteKit, но есть немного обходного пути. Моя рекомендация - взглянуть на этот github project, вот что я основал свой UIScrollView в своих проектах. По внешнему виду, большинство вещей, которые вы хотите, фактически были преобразованы в Swift сейчас, а не Objective-C, когда я впервые посмотрел на проект, поэтому я не знаю, как это будет с вами.
  2. Проект, связанный выше, приведет к тому, что ваш SKScene будет больше, чем экран (я предполагаю, что именно поэтому его нужно прокручивать), поэтому определение того, что есть и не близко к центру сцены, не составит труда , Одна вещь, которую вы можете сделать, это использовать цикл обновления в SpriteKit, чтобы постоянно обновлять размер спрайтов (возможно, только тех, что на экране), исходя из их расстояния от фиксированной, известной центральной точки. Например, если у вас есть экран ширины и высоты 10, тогда средняя точка будет x,y = 5,5. Тогда вы могли бы сказать, что размер = 1.0 - (2 * distance_from_midpoint). Учитывая, что вы находитесь в средней точке, размер будет 1.0 (1.0 - (2 * 0)), чем дальше вы получите, тем меньше будет ваш масштаб. Это грубый пример, который не учитывает максимальный или минимальный фиксированный размер, поэтому вам нужно будет работать с ним.

Удачи вам в вашем проекте.

Edit:

Хорошо, я пойду немного из пути сюда и помочь вам с уравнением, хотя мое до сих пор не является совершенным.

enter image description here

Теперь, это действительно не дает вам минимальный масштаб, но это даст вам максимум один (в основном в средней точке). Однако это уравнение имеет некоторые недостатки. Для этого вы можете использовать это, чтобы найти шкалу x и y ваших объектов на основе их расстояния от средней точки. Однако, вы действительно не хотите, чтобы в вашем масштабе были два разных компонента. Что, если ваш Sprite находится рядом с серединой x, а x_scale выплескивает 0,95? Ну, это почти полноразмерный. Но если он находится далеко от середины на оси y, и он дает вам y масштаб, скажем 0,20, то у вас есть проблема.

Чтобы решить это, я просто беру величину или гипотенузу вектора между текущей координатой и координатой текущего спрайта. Эта гипотенуза дает мне число, которое представляет собой истинное расстояние, что устраняет проблему со знаками шкалы.

Я сделал example, как вычислить это внутри Go-Playground Google, чтобы вы могли запускать код и видеть, какие разные шкалы вы получаете, основываясь на какой координате вы подключаете. Кроме того, используемое в ней уравнение слегка изменен, это в основном то же самое, что и выше, но без части части передней части уравнения maxscale -.

Надеюсь, что это поможет!

Встраивание Попытка:

see this code in play.golang.org
+0

Спасибо, Owatch! Этот второй момент определенно помог мне, так как я довольно плохо разбираюсь в таких идеях. Точка не помогает мне, потому что она в Свифте. Хотя я понимаю Swift, я не очень хорошо разбираюсь в двух языках. Может быть, я буду использовать его, может быть, не буду. Спасибо, что поделились проектом github. Я подниму этот ответ и жду других. Если никто другой не придет, это достаточно хорошо, чтобы рассмотреть мой принятый ответ. Опять же, спасибо! –

+0

Нет проблем, если вам нужен код для интеграции UIScrollView в Objective-C, я могу попытаться его извлечь. Или попробуйте связаться с владельцем проекта github. – Micrified

+0

ОК, так как бы реализовать эту математику, чтобы настроить размер изображения? Я попытался немного испортить вашу формулу, и это не получилось слишком хорошо. Есть идеи? –

 Смежные вопросы

  • Нет связанных вопросов^_^