Game Maker - создание игр | HellRoom Games
Март 20, 2025, 05:07:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Делаем Arkanoid - I урок (Самые базовые детали)  (Прочитано 12271 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MaximXGame
Активный участник
*****

Репутация: 37
Offline Offline

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio
Деятельность: Переводчик русского ошибочного на русский
Сообщений: 396

I like retro-cars!


« : Октябрь 22, 2011, 20:51:26 »

Урок от MaximXGame - причём первый, так что извиняюсь, если про Arkanoid что-то было и ещё за мои ошибки.
Сложность: для только-только обучившихся Game Maker новичков до молодых продвинутых.
Этот урок характерен для Game Maker 5.x, 6.x, 7.x и 8.x. Не знаю, совместим ли он с Game Maker 4.x.
s_bat, s_ball... Начнём с чистого листа.
И так, либо загружаем, либо рисуем спрайт размером как минимум 48х16 (или больше). Это у нас будет платформа (s_bat). Далее, загружаем шарик (s_ball). Минимум размер должен быть 8х8, иначе мы можем запросто не увидеть шарик. Стенку - минимум 16х16 (я нарисовал размера 24х24) (s_wall). В s_ball и s_bat ставим центр. Затем добавляем объекты под нашими спрайтами (назовём их o_bat, o_ball и o_wall, для каждых спрайт под своими названиями). Перейдём к o_bat. Для начала добавим управление.
Далее перейдём к o_wall. Ставим галочку Solid. С ним ничего не делаем.
Перейдём к o_bat и напишем код при событии Столкновения с o_wall:
Код:
x = xprevious
y = yprevious
Дальше перейдём к o_ball. Добавляем событие Create. Пишем код:
Код:
motion_set(70+random(40),6);
6 - это скорость. Можно её изменять.
Делаем столкновение со стеной (o_wall). Там пишем код
Код:
move_bounce_solid(false);
И с платформой (o_bat).
Код:
move_bounce_all(true);
Это временный код. Затем мы поменяем этот код, или даже удалим, так сказать.
Теперь добавляем событие Outside Room (Other -> Outside Room). В нём пишем код:
Код:
screen_redraw();
sleep(1000);
game_end();
Мы окончили базовые принципы игры! Теперь расставляйте объекты в комнате и играйте. Не заметили, что вы сделали арканоид, но без физики? Мы эту физику сделаем в следующем разделе!
Блоки мы так же сделаем в следующем разделе.
Без цели и физики хорошую игру не сделаешь!
И так, удаляем события столкновения с объектом o_bat у o_ball.
Далее перейдём к o_bat. Делаем столкновение с объектом o_ball.
Пишем код:
Код:
{
  if (other.x < x)
    { other.direction = 110 + 80*(x-other.x)/sprite_width;}
  else
    { other.direction = 70 + 80*(x-other.x)/sprite_width;}
  if (other.y > y) other.direction := 360-other.direction;
}
Физика создана. Теперь поиграем в игру. Заметили разницу? Теперь шарик при столкновении с платформой отскакивает как в Arkanoid  и Arkanoid 2: Revenge of DoH!
Далее, создаём спрайт с названием s_stone. Как вы догадались, разрушаемая стена. Загружаем для неё спрайтик, или сами рисуем (минимум 48х16). Загружаем объект o_stone, со спрайтом s_stone. Делаем объект твёрдым. Перешли к o_ball. Делаем столкновение с o_stone. Пишем код:
Код:
move_bounce_solid(false);
with(other) instance_destroy();
score=score+1
Ставим o_stone по комнате, загружаем игру. Получился Arkanoid Developer Release.
Но, после того, когда вы разбили блоки до последнего, у вас возникнет вопрос - как перейти в следующую комнату? Это мы изучим в следующем разделе.
Контроллер - миф в играх или реальность?
Контроллер - это реальность невидимая. Он определяет переменные, как lives, score, enemies... Иными словами, нельзя без него создать хорошую игру! Приступим. Создаём объект c_controller. В Step event пишем (мы уже довольно начитались, как куда переходить):
Код:
if  (instance_number(o_stone)=0)
{
if (room_next(room)>-1)
{
room_goto_next()
transition_kind=2
}
else
{
highscore_show_ext(score,c_white,true,255,0,"Courier New",10);
game_restart();
}
}
Вместо c_white - ваш Background или цвет как c_black, c_red... В Courier New - шрифт, в 10 - размер этакого шрифта.
В transition_kind=2 - анимацию в следующий уровень.
Если ещё хотим реализовать жизни, то добавляем событие Create и там пишем:
Код:
lives=3
action_set_caption(true,"Score:",true,"Lives:",false,"health:");
Добавляем No More Lives, там пишем:
Код:
highscore_show_ext(score,c_white,true,255,0,"Courier New",10);
game_restart()
Чуть-чуть изменим код в o_ball в событии Outside Room. Теперь вместо
Код:
screen_redraw();
sleep(1000);
game_end()
надо изменить на
Код:
x=xstart;
y=ystart;
with(o_bat)
 {
x=xstart;
y=ystart;
 }
screen_redraw();
sleep(1000);
lives=lives-1
Вот, теперь добавьте контроллер в комнату свою. Вы заметите, что контроллер поможет вам перейти в следующую комнату, проверяет жизни и выдаёт доску для лидеров.
На следующем уроке мы узнаем об разрушаемых блоках, которые разрушаются только через несколько раз, об бонусных блоках и так далее. А пока украшайте свою игру обоями, звуками и т.д. До встречи!

Как я говорил в начале, это мой первый туториал. Так что помогайте, если что-то не так. Я буду только рад, если вы напишите в комментах пожелания.
Скачать исходник внизу.

* tutorial_arkanoid1.gmk (12.36 Кб - загружено 945 раз.)
Записан

S_Kleer
GM Pro user
*

Репутация: 567
Offline Offline

Награды:
За лояльность! [+500 репутации]3 место в Дичайшем джеме #82000 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!2 место на HellRoom Jam #5, Контраст...
API: GameMaker Studio 2
Сообщений: 2734


« Ответ #1 : Октябрь 22, 2011, 21:20:44 »

Для первой статьи довольно не плохо. Ошибок мало.
Лови  Уважуха.
Записан

Коты - Мирители
MusNik
KeeVee Games
GM Pro user
*

Репутация: 733
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+500 репутации]За отличную игру Rock painting story!За помощь в развитии форума!За отличные статьи по Game Maker!...
API: GameMaker Studio 2
Сообщений: 3241



WWW
« Ответ #2 : Октябрь 22, 2011, 21:26:27 »

ОК, хорошо. +
Записан

Izaron
Rammstein forever
«Старожил форума»
******

Репутация: 113
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [10 дней на форуме]
API: Unity 3D
Деятельность: GML, Pascal, C++
Сообщений: 768


« Ответ #3 : Октябрь 22, 2011, 21:41:31 »

Неплохо... Отлично!)))
Записан

Один терапевт - это 1024 гигапевта, или 1048576 мегапевтов.
Все вышесказанное - исключительно IMHO 

Держись, росичи! Крепка броня, и панки наши близко! (с)Дед Банзай
allilya
Посетитель
**

Репутация: 1
Offline Offline

API: Game Maker 8.0 Pro
Сообщений: 40


« Ответ #4 : Сентябрь 12, 2014, 13:45:03 »

Тема стара, но актуальна. Может подскажет кто, как записать проверку на уничтожение нескольких видов объектов в этом коде?
Код:
if  (instance_number(o_stone)=0)
{
if (room_next(room)>-1)
{
room_goto_next()
transition_kind=2
}
else
{
highscore_show_ext(score,c_white,true,255,0,"Courier New",10);
game_restart();
}
}
Разобрался сам, хотя, может и не совсем правильно будет, но работает. Нужно просто приписать еще одно условие проверки для другого объекта.
Код:
if  (instance_number(o_stone)=0)
if  (instance_number(o_stone2)=0)
if  (instance_number(o_stone3)=0)
и т.д.
« Последнее редактирование: Сентябрь 12, 2014, 14:00:11 от allilya » Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #5 : Сентябрь 12, 2014, 14:36:46 »

Для компактности записи можно заменить на !instance_exists(object) и &&.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.131 секунд. Запросов: 32.