Создание РПГ
[ Поделиться ]
[ Спасибо! ]
|
Давайте поразмышляем: что необходимо для РПГ? Прокачка героя, разные супер способности, адекватные сражения и диалоги - правильно? Вот этим и займемся.
Скажем, так:
global.xp=0 //Очки опыта героя
global.level=1 //Уровень
global.maxhealth=100 //Максимальное здоровье, увеличивается при прокачке.
global.mana=100 // Мана
global.maxmana=100 //Максимальная мана, тоже увеличивается при прокачке.
//Также наш герой должен менять одежду, оружие, как в больших РПГ. Пропишем для начала:
global.oruzhie='Кулаки'
global.odezhda='Обноски'
С переменными разобрались. Сделаем герою движение - он не может стоять на месте, верно? Вид у нас будет сверху и движение - с помощью тыканья мышкой.
Создайте спрайт и объект зеленой точки (она обозначает, куда двигается герой). В событии у героя Global Mouse Left (нажатие левой кнопки мыши в любом месте)
Ставим:
1) удаление всех объектов зеленой точки;
2) создание объекта этой зеленой точки в координатах mouse_x, mouse_y;
3) движение героя опять-таки в mouse_x, mouse_y.
В столкновении героя с этой самой точкой пишем исчезновение точки и
остановку героя (думаю, обойдемся без подробных объяснений).
Теперь в Степе image_angle=direction (у вас должен быть лицензионный ГМ!), чтобы спрайт героя поворачивался в сторону движения. Спрайт должен быть нарисован изначально повернутым вправо.
Получилось движение героя! Что там дальше? Ну конечно, какая РПГ без сражений с монстрами! Сделать монстра не так уж сложно. Есть кнопка передвижения с обходом препятствий (Step Towards Point), ее и перетаскиваем монстру в Step, в координаты там пишем: hero.x, hero.y. Перед этой кнопкой ставим кнопку проверки переменной, в поле переменной пишем "distance_to_object(hero)", а ниже выбираем smaller than и пишем во второе поле, например, 200.
Теперь у монстра есть простенький ИИ - при приближении героя враг начинает бежать за ним. В Create монстра ставим heal=100 (это его здоровье). В событии нажатия на монстра (в объекте монстра) ставим примерно так:
if global.oruzhie='Кулаки' heal-=2
if global.oruzhie='Меч' heal-=4
if global.oruzhie='Еще что-нибудь' heal-=7
Естественно, также ставим при столкновении героя с монстром так:
if odezhda='Обноски' health-=1
if odezhda='Плащ' health-=0.6
if odezhda='Еще что-нибудь' health-=0.3
У монстра, кстати, ставим в Степ image_angle=direction (он тоже имеет право поворачиваться, куда хочет ).
Но это не все. Герой еще бессмертный и ему плевать на уменьшение здоровья (как и монстру).
У героя пишем в степ:
if health<=0 {show_message('ЛУЗЕР!!!' )game_end()}
А у монстра
if heal<=0 {instance_destroy() global.xp+=50}
Фу-ух, разобрались. Простенькая игрушка создана. Но это все еще не совсем РПГ. Нужна прокачка, верно?
В степе что-нибудь вроде этого:
if global.xp>=300
{
global.level+=1
global.xp=0
show_message('ВАШ УРОВЕНЬ - '+string(global.level)+'!' )
global.maxhealth+=10
global.maxmana+=10
global.mana+=10
health+=10
}
Это пример прокачки героя - когда опыт больше 299, повышается уровень и максимальные мана и здоровье.
Остались магические способности героя. Рассмотрим, скажем, файерболы.
Пишем в событии глобального нажатия левой кнопки мыши:
if global.mana>=20{
instance_create(x,y,faerball)
global.mana-=20}
у файербола в Create:
move_towards_point(mouse_x,mouse_y,15)
И в столкновении монстра с файерболом:
heal-=30 (или сколько надо)
С заклинанием разобрались, настало время последнего элемента - диалогов. С этим просто. В столкновении героя с НПС пишешь вот (пример):
speed=0 (НПС должен быть solid!)
dialog=show_message_ext('Что вы хотите?','Как дела?','Исчезни','Пока!' )
if dialog=1 {show_message('Да нормально все!' )}
if dialog=2 {with (other) instance_destroy()}
if dialog=3 {show_message('Пока! Удачи!' )}
Предупреждение: везде, где сказано про нажатие кнопки мыши, должно быть именно нажатие (Pressed), а не удержание (Button).
Вот и подошел урок к концу. Если что-то непонятно, есть проблемы - обращайтесь ко мне!Категория: Game Maker | Просмотров: 8127 | Добавил: Скорп (08.10.2012) | Рейтинг: 0.0/0 |
HTML ссылка на материал: BB ссылка на материал: |
Всего комментариев: 0 | |