Ідея полягає в тому, щоб поставити монети на рівень, який повинен збирати гравця. Перші питання, щоб запитати, як їх помістити в рівень. Ми можемо, наприклад, розробити схему нересту, яка якось відповідає алгоритму нересту платформи. Проте, ми вибрали набагато простіший підхід, і в кінцевому підсумку просто потраплять на платформи монети:
- Перетягніть зображення coin.png з пакета об'єктів в "рівень / зображення" в Провіднику проекту.Відкрийте level.atlas та додайте зображення (клацніть правою кнопкою миші та виберіть Add Images).Створіть файл об'єкта Game з назвою coin.go в папці рівня (клацніть правою кнопкою миші в Провіднику проекту і виберіть Новий ▸ Ігровий об'єктний файл).Відкрийте coin.go і додайте компонент Sprite (праворуч-Натисніть і виберіть Додати компонент у контурі). Встановіть зображення на level.atlas та анімацію за замовчуванням на "coin".Додайте об'єкт зіткнення (клацніть правою кнопкою миші у контурі та виберіть «Додати компонент») і додайте форму Sphere, яка охоплює зображення (клацніть правою кнопкою миші компонент і виберіть «Додати шаблон»).Використовуйте Інструмент переміщення (Сценарій ▸ Інструмент переміщення) та Інструмент масштабування, щоб зробити кришку сфери зображення монети.Встановіть об'єкт зіткнення типу "Kinematic", його групу "pickup" та її маску до "героя".Відкрийте hero.go і додайте "pickup" до об'єкта Collision Object Maskproperty, а потім збережіть файл.Створіть новий файл сценарію coin.script (праворуч -рівень кліків в Провіднику проекту та виберіть Новий файл ▸ Сценарій). Замініть код шаблону таким:
-- coin.script function init(self) self.collected = false end function on_message(self, message_id, message, sender) if self.collected == false and message_id == hash("collision_response") then self.collected = true msg.post("#sprite", "disable") elseif message_id == hash("start_animation") then pos = go.get_position() go.animate(go.get_id(), "position.y", go.PLAYBACK_LOOP_PINGPONG, pos.y + 24, go.EASING_INOUTSINE, 0.75, message.delay) end end
- Додайте файл сценарію як компонент "Сценарій" до об'єкта монети (клацніть правою кнопкою миші корінь у контурі та виберіть "Додати компонент з файлу")..
План полягає в тому, щоб виростити монети з об'єктів платформи, щоб поставити фабрики для монет у platform.go та platform_long.go.
- Відкрийте platform.go та додайте компонент Factory (клацніть правою кнопкою миші у контурі та виберіть Add Component).
- Встановіть ідентифікатор заводу в "coin_factory" і встановіть його прототип у файл coin.go.
- Тепер відкрийте platform_long.go і створіть ідентичну фабричну компонент.
- Збережіть два файли .
Тепер нам потрібно змінити platform.script, щоб він виродив і видаляє монети
:
-- platform.script
function init(self)
self.speed = 540 -- Default speed in pixels/s
self.coins = {}
end
function final(self)
for i,p in ipairs(self.coins) do
go.delete(p)
end
end
function update(self, dt)
local pos = go.get_position()
if pos.x < -500 then
msg.post("/level/controller#script", "delete_spawn", { id = go.get_id() })
end
pos.x = pos.x - self.speed * dt
go.set_position(pos)
end
function create_coins(self, params)
local spacing = 56
local pos = go.get_position()
local x = pos.x - params.coins * (spacing*0.5) - 24
for i = 1, params.coins do
local coin = factory.create("#coin_factory", vmath.vector3(x + i * spacing , pos.y + 64, 1))
msg.post(coin, "set_parent", { parent_id = go.get_id() })
msg.post(coin, "start_animation", { delay = i/10 })
table.insert(self.coins, coin)
end
end
function on_message(self, message_id, message, sender)
if message_id == hash("set_speed") then
self.speed = message.speed
elseif message_id == hash("create_coins") then
create_coins(self, message)
end
end
- Встановивши батьківську монету з породи на платформу, вона буде рухатися разом із платформою.
- Анімація змушує монети танцювати вгору та вниз, порівняно з платформою, яка зараз є батьком монет.
Останній крок у цьому підручнику полягає в тому, щоб додати кілька рядків до controller.script:
-- controller.script
...
local platform_heights = { 100, 200, 350 }
local coins = 3
...
- Кількість монет, що виростають на звичайній платформі.
-- controller.script
...
local coins = coins
if math.random() > 0.5 then
f = "#platform_long_factory"
coins = coins * 2 -- Twice the number of coins on long platforms
end
...
-- controller.script
...
msg.post(p, "set_speed", { speed = self.speed })
msg.post(p, "create_coins", { coins = coins })
table.insert(self.spawns, p)
...
І тепер ми маємо просту, але функціональну гру! Якщо ви зробите це настільки далеко, можливо, ви захочете продовжити самостійно та додати наступне:
- Оцінювання і лічильники життя
- Ефекти частинок для пікапів і смерті
- Красиві фонові зображення
Це завершує цей вступний підручник. Тепер іди вперед і зануритися в Defold. У нас є багато навчальних посібників та навчальних посібників, які готові допомогти вам, і якщо ви застрягли, ви можете прийти на форум.
Щасливий захист!
Немає коментарів:
Дописати коментар
Kоментарі неуkраїнсьkою видалятимуться