Перше, що ми будемо робити - це привести життя в жабу. На даний момент бідна річ застряє в циклі циклу і добре не реагує на стрибки чи що-небудь. Файл хребта, який ми додали з пакета активу, насправді містить набір анімацій для цього
.
- Відкрийте файл 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
- Знайдіть функцію update () та додайте виклик update_animation:
... -- apply it to the player character go.set_position(go.get_position() + self.velocity * dt) update_animation(self) ...
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 "небезпечно".
- Також встановіть Маску на "героя".
- Додайте форму коробки до об'єкта зіткнення (клацніть правою кнопкою миші та виберіть «Додати форму»), а за допомогою інструмента «Перемістити» («Сценарь ▸ Перемістити інструмент») та «Інструмент масштабу» помістіть фігуру, щоб жаба зіткнулася з об'єктом «небезпеки» під час удару платформа збоку або знизу.
- Зберегти файл.
- Відкрийте hero.go, позначте об'єкт зіткнення та додайте назву "небезпеки" до Maskproperty. Потім збережіть файл.
- Відкрийте файл 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
- Додати поворот і падіння руху героя, як він вмирає. Це може бути значно покращено!
- Змініть функцію init (), щоб відправити повідомлення "reset" для ініціалізації об'єкта, а потім збережіть файл:
-- 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ою видалятимуться