КРОК 7 - Анімація та смерть

 

Перше, що ми будемо робити - це привести життя в жабу. На даний момент бідна річ застряє в циклі циклу і добре не реагує на стрибки чи що-небудь. Файл хребта, який ми додали з пакета активу, насправді містить набір анімацій для цього
.
  1. Відкрийте файл hero.script та додайте наступні функції перед наявною функцією update ():
    -- hero.script
    local function play_animation(self, anim)
        -- only play animations which are not already playing
        if self.anim ~= anim then
            -- tell the spine model to play the animation
            spine.play("#spinemodel", anim, go.PLAYBACK_LOOP_FORWARD, 0.15)
            -- remember which animation is playing
            self.anim = anim
        end
    end
    
    local function update_animation(self)
        -- make sure the right animation is playing
        if self.ground_contact then
            play_animation(self, hash("run_right"))
        else
            if self.velocity.y > 0 then
                play_animation(self, hash("jump_right"))
            else
                play_animation(self, hash("fall_right"))
            end
        end
    end
    
  2. Знайдіть функцію update () та додайте виклик update_animation:
    ...
    -- apply it to the player character
    go.set_position(go.get_position() + self.velocity * dt)
    
    update_animation(self)
    ...
    
Insert hero code
Lua має "лексичний діапазон" для локальних змінних і чутливий щодо порядку розміщення локальних функцій в. Функція update () викликає локальні функції update_animation () і play_animation (), що означає, що runtime повинно було побачити локальні функції зможе назвати це. Ось чому ми повинні поставити ці функції перед оновленням ().
Якщо ви зміните порядок функцій, ви отримаєте помилку. Зауважте, що це стосується лише локальних змінних. Ви можете дізнатись більше про правила та локальні функції Луї на http://www.lua.org/pil/6.2.html
Це все, що потрібно для додавання героя анімації стрибка та падіння. Якщо ви запустите гру, ви помітите, що це набагато краще грати. Ви також можете зрозуміти, що платформи, на жаль, можуть виштовхнути героя з екрана. Це -
ефект обробки зіткнень, але це засіб легко наносити насильство та зробити небезпечні кроки платформ!


  • Перетягніть spikes.png з пакета об'єктів у папку "level / images" у Project Explorer.




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




  • Відкрийте platform.go і додайте декілька компонентів Sprite. Встановіть значення «Зображення в рівень» і «Анімація за замовчуванням» в «збільшення».

  • Використовуйте інструмент "Перемістити" та "Інструмент повороту", щоб розмістити шипи по краях платформи.




  • Щоб виставити шипи позаду платформи, встановіть положення Z спіральних сплітів до -0.1.




  • Додайте новий компонент об'єкта зіткнення до платформ (правою кнопкою миші натисніть корінь у контурі та виберіть Додати компонент). Встановити властивість Group "небезпечно".

  • Також встановіть Маску на "героя".




  • Додайте форму коробки до об'єкта зіткнення (клацніть правою кнопкою миші та виберіть «Додати форму»), а за допомогою інструмента «Перемістити» («Сценарь ▸ Перемістити інструмент») та «Інструмент масштабу» помістіть фігуру, щоб жаба зіткнулася з об'єктом «небезпеки» під час удару платформа збоку або знизу.




  • Зберегти файл.
  1. Platform spikes
  2. Відкрийте hero.go, позначте об'єкт зіткнення та додайте назву "небезпеки" до Maskproperty. Потім збережіть файл.
    Hero collision
  3. Відкрийте файл hero.script та змініть функцію on_message (), щоб ми отримали реакцію, якщо жаба стикається з "небезпечним" ядром:
    -- hero.script
    function on_message(self, message_id, message, sender)
        if message_id == hash("reset") then
            self.velocity = vmath.vector3(0, 0, 0)
            self.correction = vmath.vector3()
            self.ground_contact = false
            self.anim = nil
            go.set(".", "euler.z", 0)
            go.set_position(self.position)
            msg.post("#collisionobject", "enable")
    
        elseif message_id == hash("contact_point_response") then
            -- check if we received a contact point message
            if message.group == hash("danger") then
                -- Die and restart
                play_animation(self, hash("die_right"))
                msg.post("#collisionobject", "disable")
                
                go.animate(".", "euler.z", go.PLAYBACK_ONCE_FORWARD, 160, go.EASING_LINEAR, 0.7)
                go.animate(".", "position.y", go.PLAYBACK_ONCE_FORWARD, go.get_position().y - 200, go.EASING_INSINE, 0.5, 0.2,
                    function()
                        msg.post("#", "reset")
                    end)
            elseif message.group == hash("geometry") then
                handle_geometry_contact(self, message.normal, message.distance)
            end
        end
    end
    
  4. Додати поворот і падіння руху героя, як він вмирає. Це може бути значно покращено!
  5. Змініть функцію init (), щоб відправити повідомлення "reset" для ініціалізації об'єкта, а потім збережіть файл:
  6. -- hero.script
    function init(self)
        -- this lets us handle input in this script
        msg.post(".", "acquire_input_focus")
        -- save position
        self.position = go.get_position()
        msg.post("#", "reset")
    end
    

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

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

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