КРОК 9 - Монети для збору

 

Ідея полягає в тому, щоб поставити монети на рівень, який повинен збирати гравця. Перші питання, щоб запитати, як їх помістити в рівень. Ми можемо, наприклад, розробити схему нересту, яка якось відповідає алгоритму нересту платформи. Проте, ми вибрали набагато простіший підхід, і в кінцевому підсумку просто потраплять на платформи монети:

  1. Перетягніть зображення 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 (праворуч -
    рівень кліків в Провіднику проекту та виберіть Новий файл ▸ Сценарій). Замініть код шаблону таким:
  2. -- 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
    
  3. Додайте файл сценарію як компонент "Сценарій" до об'єкта монети (клацніть правою кнопкою миші корінь у контурі та виберіть "Додати компонент з файлу").
    .
    Coin game object
План полягає в тому, щоб виростити монети з об'єктів платформи, щоб поставити фабрики для монет у platform.go та platform_long.go.
  1. Відкрийте platform.go та додайте компонент Factory (клацніть правою кнопкою миші у контурі та виберіть Add Component).
  2. Встановіть ідентифікатор заводу в "coin_factory" і встановіть його прототип у файл coin.go.
  3. Тепер відкрийте platform_long.go і створіть ідентичну фабричну компонент.
  4. Збережіть два файли
  5. .
Coin factory
Тепер нам потрібно змінити 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
  1. Встановивши батьківську монету з породи на платформу, вона буде рухатися разом із платформою.
  2. Анімація змушує монети танцювати вгору та вниз, порівняно з платформою, яка зараз є батьком монет.
Родинно-дитячі відносини - суто модифікація графіки сцени. Дитина буде перетворений (переміщений, масштабований або обернений) поряд з батьком. Якщо вам потрібні додаткові відносини "власності" між об'єктами гри, вам потрібно відстежувати це саме в коді
Останній крок у цьому підручнику полягає в тому, щоб додати кілька рядків до controller.script:
-- controller.script
...
local platform_heights = { 100, 200, 350 }
local coins = 3 
...
  1. Кількість монет, що виростають на звичайній платформі.
-- 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)
...
Insert controller code
І тепер ми маємо просту, але функціональну гру! Якщо ви зробите це настільки далеко, можливо, ви захочете продовжити самостійно та додати наступне:
  1. Оцінювання і лічильники життя
  2. Ефекти частинок для пікапів і смерті
  3. Красиві фонові зображення
Це завершує цей вступний підручник. Тепер іди вперед і зануритися в Defold. У нас є багато навчальних посібників та навчальних посібників, які готові допомогти вам, і якщо ви застрягли, ви можете прийти на форум.

Щасливий захист!

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

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

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