тунельний ефект cocos2d


12

Я хочу створити подібний ефект тунелю в COCOS2D (iOS). Хтось може запропонувати якісь покажчики?

Ref Image

ref Відео 1

перегляньте відео 2

До цього часу я намагався з декількома спрайтами кільцевої форми зі зменшенням масштабу та розміщенням центру до тієї ж точки, зберігаючи Z як для кожного меншого спрайта.

При цьому, анімація його за допомогою CCScaleTo та зміна розміру до 2,0 з тривалістю анімації, але це все одно не наближається до ефекту тунелю, показаного в посиланні.

Спасибі, Сем

Відповіді:


10

Я знайшов опис реалізації у автора цього ефекту:

Напевно було багато роботи, щоб створити ілюзію глибини у двовимірній площині.

Однак принцип дуже простий: кола починаються посередині екрана зі шкалою 0. Потім перше коло тунелю починає масштабувати пропорційно часу, який минув (лінійне масштабування не працює), а через деякий час друге коло починає масштабувати , потім 3-й, 4-й тощо.

Потім ви пропорційно знижуєте значення альфа для кіл (ті, які знаходяться в далекій спині, мають значення альфа нижчим, ніж ті, що знаходяться попереду, щоб створити ілюзію розмиття), ви визначаєте шлях, який повинен слідувати кожен круг, переміщуючи X і Y координати його, потім ви кладете космічний корабель посередині екрана. Нахил пристрою змушує тунель зміщуватися вліво і вправо, вгору і вниз (але це створює враження, що космічний корабель замість цього рухається!).

Як тільки кола вийдуть з екрана, вони швидко згасають і повертаються у вихідне положення (щоб зберегти пам'ять, тому мені не потрібно створювати нові кола, але я повторно використовую ті самі).

Вибачте за мою англійську, але сподіваюся, що це пояснило загальну ідею :)


1

Ви майже там, що має кілька кільцевих спрайтів із зменшенням значення Z та масштабу. Просто не зосереджуйте їх усіх.

Вам потрібно слідкувати за точкою, де ви хочете, щоб тунель потрапив на далекий горизонт подій. Ви можете переміщати цю точку з часом, скільки завгодно.

Потім, розміщуючи кожен новий спрайт, розміщуйте його в цій точці, масштабуйте його невеликим розміром, встановлюйте його непрозорість, як вам подобається, а потім почніть CCSpawnз CCScaleToі CCFadeTo, наприклад:

sprite->runAction(CCSpawn::create(
    CCScaleTo::create(2.0f, 1.5f),
    CCFadeTo::create(5.0f, 255),
    nullptr));

Попередньо створіть усі спрайти і обертайте, який ззаду, щоб він був ефективним.


1

Я, мабуть, спробував би його відсортувати за фоновим шаром та частинками частинок. Ви можете протестувати ефекти в дизайнері частинок і потім відтворювати їх у фоновому шарі.


0

Якщо чесно, я не думаю, що зображення відображається за допомогою 2D камери. Схоже, гра відображається за допомогою системи 3D-візуалізації. Але оскільки ви хочете використовувати cocos2d, вам потрібно змоделювати цю матрицю трансорбації 3D самостійно. Ось ідея для початку: ви знаєте, що в 3D-сцені кожен об'єкт визначається 3 скалярними значеннями, x, y та z. Найпростіший метод, який ви можете використовувати, - це масштабування, як ви запропонували, але не як ви реалізували! ccScaleToпризведе до лінійного масштабування з часом, що не створюватиме 3D-відчуття. Ви можете почати зі масштабування об'єкта за значенням 1/z. Це якимось чином ідентично найпростішій матриці проекції, яку ви можете придумати! якщо вам здається, що це навіть не задовольняє вас, погляньте на більш сучасні та складніші матриці проекцій .

Побічна примітка: реалізація власної матриці проекцій у cocos2D буде трохи брудною. якщо вам дійсно не подобається ефект, я настійно пропоную змінити двигун на той, який підтримує 3D.


Я не хочу вводити 3d, щоб зробити речі більш складними, але цей ефект зроблений у cocos2d для надання підробленого виду тунелю (я колись назад спілкувався з автором цієї гри)
Саурабх Пассолія

0

Ось як я це зробив, у псевдокоді

Активуйте тунельний ефект:

  1. Створіть CCRepeatForever (CCFunc (createCircle))
  2. Додайте вузол до сцени під назвою "ViewNode"

createCircle ()

  1. Створіть шар, позицію в центрі сцени. Додайте його як дочірнє до «ViewNode».
  2. запустити дію: CCSequence (CCEaseExponentialIn (CCScaleTo), CCRemoveSelf)
  3. Покладіть речі у свій шар, тобто круги, вороги, космічні кораблі, що завгодно.

Контроль (з паралакс)

  1. Для всіх шарів з ефектом тунелю (тобто дітей ViewNode)
  2. оновити положення якоря на основі сенсорного положення.

Позиція є точкою зникання, тому ви не можете переміщувати шари, не переміщуючи точку зникнення. Однак, якщо перемістити точку прив’язки, шар, здається, переміститься, але точка зникання залишається такою ж - це створює ефект паралаксації, оскільки переміщення ccp (0.2,0.2) на близький шар (великий масштаб) має більший ефект, ніж переміщення ж по далекому шару.

Ви загортаєте все в шари однакового розміру, щоб переконатися, що переміщення якоря створює однаковий рух у всіх шарах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.