Якщо ви спробуєте гру зараз, швидко стає очевидним, що механізм скидання не працює. Перезапуск героя добре, але ви можете легко перейти до ситуації, коли ви відразу потрапляєте на край платформи і знову помрете. Що ми хочемо зробити, це правильно скинути весь рівень на смерть. Оскільки рівень - це всього лише серія порожніх платформ,
нам просто потрібно відстежувати всі створені платформи, а потім видалити їх при перезавантаженні:
- Відкрийте файл 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 self.spawns = {} 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 }) table.insert(self.spawns, p) end end end function on_message(self, message_id, message, sender) if message_id == hash("reset") then -- Tell the hero to reset. msg.post("hero#script", "reset") -- Delete all platforms for i,p in ipairs(self.spawns) do go.delete(p) end self.spawns = {} elseif message_id == hash("delete_spawn") then for i,p in ipairs(self.spawns) do if p == message.id then table.remove(self.spawns, i) go.delete(p) end end end end
- Ми використовуємо таблицю для зберігання всіх порожніх платформ
- Повідомлення "reset" видаляє всі платформи, збережені в таблиці
- Повідомлення "delete_spawn" видаляє певну платформу та вилучає її з таблиці
- Зберегти файл.
- Відкрийте platform.script і змініть його, щоб замість того, щоб просто видалити платформу, яка досягла лівого краю,
- надішліть на контролер рівня запит на видалення платформи:
-- platform.script ... if pos.x < -500 then msg.post("/level/controller#script", "delete_spawn", { id = go.get_id() }) end ...
- Зберегти файл.Відкритий герой.спис. Тепер останнє, що нам потрібно зробити - це вказати рівень для скидання. Ми перемістили повідомлення з проханням героя скинути скрипт контролера рівня. Це має сенс централізувати контроль скидання, як це, тому що це дозволяє нам, наприклад, запровадити більш тривалий послідовність смертей з більшою легкістю:
-- hero.script
...
go.animate(".", "position.y", go.PLAYBACK_ONCE_FORWARD, go.get_position().y - 200, go.EASING_INSINE, 0.5, 0.2,
function()
msg.post("controller#script", "reset")
end)
...
І тепер основна петля перезавантаження - вимирає!
Наступне - щось жити: монети!
Немає коментарів:
Дописати коментар
Kоментарі неуkраїнсьkою видалятимуться