КРОК 6 - фізика землі та платформи

 

На цьому етапі ми повинні додати фізичну зіткнення для землі:



  • Відкрийте файл ground.collection.
  • Додати новий компонент Object Object до відповідного об'єкту гри. Оскільки наземний скрипт не реагує на зіткнення (вся ця логіка знаходиться в сценарії героя), ми можемо помістити її в будь-який стаціонарний об'єкт гри (об'єкти наземної плитки не стаціонарні, щоб уникнути їх).
  • Один хороший кандидат - об'єкт гри "контролер", але ви можете створити для нього окремий об'єкт, якщо хочете. Клацніть правою кнопкою миші об'єкт гри та виберіть «Додати компонент» та оберіть об'єкт зіткнення.
  • Додайте форму коробки, клацнувши правою кнопкою миші компонент "Колізійний об'єкт" і вибравши "Додати форму", а потім "Вікно".
  • Використовуйте інструмент "Перемістити" та інструмент "Масштаб" (Сценарій ▸ Інструмент переміщення інструменту та сцени ▸ Шкала інструменту), щоб коробка охоплювала всі наземні плитки.
  • Встановіть властивість типу об'єкта зіткнення "Статичне", оскільки фізика землі не збирається рухатися.
  • Встановіть властивість об'єкта об'єкта зіткнення "геометрія" та маску "героєві".
  • Тепер об'єкт зіткнення героя, і це буде реєструвати зіткнення між ними.
  • Зберегти файл.
Ground collision


Тепер ви можете спробувати запустити гру (проект ▸ Build and Launch). Жаба повинна працювати на землі, і можна буде перейти з кнопки kbd: [пробіл]. Якщо ви запускаєте гру на мобільному пристрої, ви можете стрибати, натискаючи на екрані.




Щоб зробити життя в жаби світу дещо менш тупим, ми повинні додавати платформи, щоб стрибати.


  • Перетягніть файл зображення rock_planks.png з пакета об'єктів у папку level / imagessubs.



  • Відкрийте level.atlas та додайте нове зображення до атласу (клацніть правою кнопкою миші корінь у контурі та виберіть Додати зображення).



  • Зберегти файл.



  • Створіть новий файл об'єкта Game, що називається platform.go, у папці рівня. (Праворуч -

  • рівень кліків в Провіднику проекту, а потім виберіть Новий ▸ Ігровий об'єктний файл)



  • Додайте компонент Sprite до об'єкту гри (клацніть правою кнопкою миші на корінь в Outlineview і виберіть Add Component, а потім Sprite).



  • Встановіть властивість Image для посилання на файл level.atlas і встановіть анімацію за замовчуванням на "rock_planks". Для зручності,

    зберегти об'єкти рівня в підпапці "рівень / об'єкти".



  • Додайте компонент об'єкта зіткнення в об'єкт ігрової платформи (клацніть правою кнопкою миші корінь у виді схеми та виберіть Додати компонент).



  • Обов'язково встановіть тип компонента на "Kinematic", а групу та маску відповідно до "геометрії" та "героя" відповідно




    Додайте форму коробки до компонента об'єкта зіткнення.

    (Клацніть правою кнопкою миші компоненти в контурі та виберіть «Додати форму», потім виберіть «Вставка»).




    Використовуйте інструмент "Перемістити" та інструмент "Масштаб" (Сценарій ▸ Інструмент переміщення інструменту та сцени ▸ Шкала), щоб зробити форму у компоненті об'єкта зіткнення, що охоплює платформу.




    Створити файл сценарію platform.script (праворуч -

    натисніть в Провіднику проекту, виберіть Новий ▸ Сценарій Файл) і введіть наступний код у файл, а потім збережіть його:
  1. -- platform.script
    function init(self)
        self.speed = 540      -- Default speed in pixels/s
    end
    
    function update(self, dt)
        local pos = go.get_position()
        if pos.x < -500 then
            go.delete() 
        end
        pos.x = pos.x - self.speed * dt
        go.set_position(pos)
    end
    
    function on_message(self, message_id, message, sender)
        if message_id == hash("set_speed") then
            self.speed = message.speed
        end
    end
    

  • Просто видаліть платформу, коли вона була знята з правого краю екрана

  • Відкрийте platform.go і додайте новий скрипт як компонент (клацніть правою кнопкою миші корінь у виді Outline і виберіть Add Component From File і виберіть platform.script).


  • Скопіюйте платформу.go до нового файлу (клацніть правою кнопкою миші файл у Провіднику проекту та виберіть «Копіювати», а потім -
  • ще раз натисніть і виберіть Вставити) і зателефонуйте новому файлу platform_long.go.


  • Відкрийте файл platform_long.go та додайте другий компонент Sprite (клацніть правою кнопкою миші корінь у виді Outline і виберіть Add Component). Крім того, ви можете скопіювати існуючий Sprite.


  • Використовуйте Інструмент переміщення (Сцена ▸ Інструмент переміщення), щоб розмістити компоненти Sprite поруч.
  • Використовуйте інструмент "Перемістити" та "Інструмент масштабування", щоб зробити фігуру обкладинкою ObjectComponent Collision обома платформами.
Platform
Зверніть увагу, що both platform.go і platform_long.go мають Scriptcomponents, які відносяться до того самого файлу сценарію. Це добре, оскільки будь-який сценарій, який ми робимо для файлу сценарію, буде впливати на поведінку як звичайних так і довгих платформ.

Spawning платформи

Ідея з грою полягає в тому, що вона повинна бути простим нескінченним бігунком. Це означає, що об'єкти ігрової платформи не можуть бути розміщені в колекції в редакторі. Замість цього ми повинні динамічно їх породити:

  • Відкритий рівень. Колекція.
  • Додайте два "фабричні" компоненти до ігрового об'єкта "контролер" (клацніть правою кнопкою миші та виберіть "Додати компонент", потім виберіть "Фабрика").
  • Встановіть властивості ідентифікатора компонентів на "platform_factory" і "platform_long_factory".
  • Встановіть властивість прототипу "platform_factory" у файл /level/objects/platform.go.
  • Встановіть властивість прототипу "platform_long_factory" у файл /level/objects/platform_long.go.
  • Зберегти файл.
  • Відкрийте файл controller.script, який керує рівнем.
  • Змініть скрипт, щоб він містив таке, а потім збережіть файл
-- controller.script
go.property("speed", 360)

local grid = 460
local platform_heights = { 100, 200, 350 } 

function init(self)
    msg.post("ground/controller#script", "set_speed", { speed = self.speed })
    self.gridw = 0
end

function update(self, dt) 
    self.gridw = self.gridw + self.speed * dt

    if self.gridw >= grid then
        self.gridw = 0

        -- Maybe spawn a platform at random height
        if math.random() > 0.2 then
            local h = platform_heights[math.random(#platform_heights)]
            local f = "#platform_factory"
            if math.random() > 0.5 then
                f = "#platform_long_factory"
            end

            local p = factory.create(f, vmath.vector3(1600, h, 0), nil, {}, 0.6)
            msg.post(p, "set_speed", { speed = self.speed })
        end
    end
end


1 - Попередньо визначені значення для позиції Y для створення платформ. 2- Функція update () називається один раз у кожному кадрі, і ми використовуємо це, щоб вирішити, чи створювати регулярні або довгі платформи з певними інтервалами (щоб уникнути дублювання) та висоти. Легко експериментувати з різними алгоритмами нересту для створення різних геймплей.

Запустіть гру (Проект ▸ Створення та запуск).




Вау, це починає перетворюватися на щось (майже) грає ...
Running the game

Немає коментарів:

Дописати коментар

Kоментарі неуkраїнсьkою видалятимуться