| Статьи по Game Maker |
| Scorpio | Дата: Четверг, 18.02.2010, 19:49 | Сообщение # 1 |
Любитель геймдева
Сообщений: 458
Сейчас нет на сайте
| Постинг в данной теме запрещен. Наказание- бан. Постит только автор статей. Все вопросы- в отдельные темы. Vinchensoo Три моих статьи. Надеюсь, кому-нибудь пригодятся! Переменные в Game Maker Очень важное значение имеют так называемые переменные. Переменные - это ячейки со своими именами, в которые можно записать любое значение. Они бывают двух типов: строковые и вещественные. Важный момент: переменные надо объявлять и называть в событии Create или Game Start - по крайней мере, до того, как они будут использоваться. Это происходит так: money=30. Это значит, что переменная money становится равна 30. Вещественные переменные Вещественные переменные содержат в себе числа (любые: и целые, и дроби). К примеру, health=100 - здоровье становится полным (100 очков). Используется очень часто: это и кол-во патронов, и здоровье, и деньги и т.д. Строковые переменные Строковые переменные содержат в себе любые символы и записываются через апострофы:name='Чувак'. Может использоваться для ввода имени, для вывода статуса героя и т.д. Глобальные переменные Глобальными могут быть и строковые, и вещественные переменные. Глобальная переменная принадлежит не какому-то отдельному объекту, а всей игре сразу - поэтому она не может быть разной у разных объектов. Если какой-то объект переходит из комнаты в комнату, то глобальная переменная со своим значением переносится туда же и используется в новой комнате - очень полезная вещь. Чтобы сделать переменную глобальной, надо записать ее с приставкой global. - например: global.money=100. Пользуйтесь переменными и не пропадете! Окраска Если у вас есть несколько разных объектов, и их спрайты отличаются только определенным цветом - можно сделать всего один спрайт на всех! Создайте спрайт. Часть, которая будет разных цветов, должна в спрайте быть белой! Нужным объектам присвойте это изображение. В Create объектов пишем image_blend=цвет. Вместо "цвет" пишем нужный цвет по-английски с приставкой c_ (с_green, c_red, c_yellow и т.д.). Теперь белая часть спрайта будет закрашена нужным цветом! Это может пригодиться вам, например, во флагах (один красный, другой белый, третий синий...), в цветах одежды разных героев и т.д. Все это работает лишь в зарегистрированном Game Maker! Несколько советов: Если вы хотите, чтобы спрайт поворачивался по направлению героя (бывает полезно в играх с видом сверху) - пишите image_angle=direction и рисуйте спрайт того, кому это делаете, повернутым вправо. Если надо, чтобы игрок вводил свое имя - пишите name=get_string('Как вас зовут?','') и потом пользуйтесь name, скажем так: show_message('О, привет, '+string(name)+'!'). Выскочит сообщение с приветствием. Если нужно, чтобы игрок вводил число, то:vashe_chislo=get_integer('Введите свое число!',0) и пользуйтесь точно также. Если вы хотите сделать событие, происходящее через время после чего-то, пользуйтесь alarm[0]=сколько надо. Если хотите понять, сколько это время в секундах - просто разделите на скорость комнаты (по умолчанию 30). То есть 120 шагов - это 4 секунды! Чтобы вывести текст на экран, надо сделать невидимый объект и в событии Draw вписать draw_text('ваш текст'). Чтобы рисовать текст по-русски, создайте новый шрифт (скажем, font1), найдите два поля там и в первое пишите 0, во второе 255, а затем в событии Draw вписать draw_set_font(font1) Чтобы рисовать текст другим цветом, впишите draw_set_color(цвет). Вместо цвет писать цвета с приставкой с_:c_green, c_red, c_yellow и т.д. Чтобы сделать титры, создайте объект o_titres и поместите в комнату для титров. У этого объекта в Create впишите y_titres=450. В событии Draw впишите: draw_text(150,y_titres,'текст титров') y_titres-=1 Чтобы в рисовании текста или выводе сообщения перейти на другую строку, используйте знак # Чтобы что-то происходило, когда вы шевелите мышкой, то делайте так: в событии Create xx=mouse_x yy=mouse_y в событии Step if xx!=mouse_x or yy!=mouse_y {происходит то, что надо} xx=mouse_x yy=mouse_y
Сообщение отредактировал Scorpio - Понедельник, 08.03.2010, 10:39 |
| |
| | |
| Scorpio | Дата: Понедельник, 01.03.2010, 21:46 | Сообщение # 2 |
Любитель геймдева
Сообщений: 458
Сейчас нет на сайте
| Empty, спасибо за отзыв! Сажусь писать статьи. Создание текстовых игр в Game Maker Чтобы создать текстовую игру на ГМ, достаточно одного объекта, одной комнаты любых размеров и вот этих команд: show_message('Привет!') - выводит на экран сообщение (в данном случае "Привет!"). команда=show_message_ext('','Да','','.') - выводит на экран сообщение с вариантами для выбора (максимум тремя). Вместо "команда" вписываем переменную и потом пользуемся ей для проверки варианта выбора. Пример: otvet=show_message_ext('Хочешь поесть?','Да','Нет','Не знаю...') if otvet=1 {show_message('Угощайся, друг!')} if otvet=2 {show_message('Ну как хочешь.')} if otvet=3 {show_message('Подумай как следует!')} команда=get_integer('Вопрос',0 (это кол-во по умолчанию)) - выводит на экран строку, в которую игрок должен вписать число. "Команда" проверяет вписанное число. К примеру: zub_number=32 zub=get_integer('Сколько зубов тебе выбить?',0) zub_number-=zub команда=get_string('Вопрос','' (это вписанное по умолчанию)) - выводит на экран строку, в которую игрок должен вписать любые символы. "Команда" проверяет вписанное. К примеру: name=get_string('Как вас зовут?','Безымянный') show_message('Что ж, привет, '+string(name)) Также может пригодиться: команда=show_menu('',0) - выводит список возможных вариантов (разделяются символом |). Команда - выбранный вариант. В отличии от show_message_ext, начинается с нуля! К примеру: show_message('Выбери оружие!') otvet=show_menu('Пистолет|АК|Дробовик',0) if otvet=0 {oruzhie='Пистолет'} if otvet=0 {oruzhie='АК'} if otvet=0 {oruzhie='Дробовик'} И, наконец, вот команды для окраски вашей текстовой игры: message_button(спрайт) - кнопка ответа теперь - ваш спрайт message_size(width,height) - ваш размер окна (стандартный размер - 400 на 300) message_background(фон) - фон окна меняется на ваш. Надеюсь, этот урок поможет вам в создании текстовой игры. Желаю удачи!
Сообщение отредактировал Scorpio - Понедельник, 08.03.2010, 10:41 |
| |
| | |
| Scorpio | Дата: Воскресенье, 07.03.2010, 23:28 | Сообщение # 3 |
Любитель геймдева
Сообщений: 458
Сейчас нет на сайте
| YemSalat, спасибо! Я старался! Текстовым играм статью посвятил, теперь очередь RPG! Предупреждение: не буду расписывать отвлеченные вещи вроде рисования спрайтов и создания объектов. Только говорю - все препятствия на пути героя должны быть с Solid! Давайте поразмышляем: что необходимо для РПГ? Прокачка героя, разные суперпуперспособности, адекватные сражения и диалоги - правильно? Вот этим и займемся. В Create пропишем необходимые переменные. Так как в РПГ может быть множество локаций, логично, что переменные эти глобальны (существуют в одном экземпляре и сохраняются при переходе героя на другую локацию). Скажем, так: 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). Вот и подошел урок к концу. Если что-то непонятно, есть проблемы - обращайтесь ко мне! P.S. Планирую продолжить рассмотрение создания игр разных жанров в Game Maker.
Сообщение отредактировал Scorpio - Понедельник, 08.03.2010, 10:59 |
| |
| | |
| Scorpio | Дата: Понедельник, 08.03.2010, 12:10 | Сообщение # 4 |
Любитель геймдева
Сообщений: 458
Сейчас нет на сайте
| Создание TDS В последнее время многие стремятся создать свою TDS, и чаще всего для этих целей выбирают Game Maker. Я решил посвятить свою очередную статью их созданию (часть совпадает с материалом о создании RPG). Что должно быть в каждой ТДС? Бегающий туда-сюда герой, увешанный оружием, толпа монстров, с которой сражается маленький беззащитный (почти) человек. Но пока проопишем необходимые переменные. oruzhie='Пистолет' (начальное оружие) pistolet_patron=100 (какое оружие без патронов) blaster_patron=0 s_blasterom=false (нет бластера!) Оно обычно такое: поворот с помощью мышки, бегаем на стрелочках/WASD. Чтобы герой мог ходить по диагонали, бег сделаем с помощью прыжков в определенные координаты. Вот так: if keyboard_check(vk_right) {x+=4} if keyboard_check(vk_left) {x-=4} if keyboard_check(vk_up) {y-=4} if keyboard_check(vk_down) {y+=4} Поворачивание за мышкой легко сделать с помощью команды, определяющей направление по отношению к координатам мышки: image_angle=point_direction(hero.x,hero.y,mouse_x,mouse_y) Чтобы все было красиво, необходимо центрировать спрайт героя! Все, движение героя есть. Радуемся и переходим к стрельбе по монстрам. В Create героя поместите: babah=15 (это необходимо для перезарядки) В Step героя: babah-=1 Создайте объект пули (еще нарисуйте, естественно, саму пулю). В событии глобального нажатия левой кнопки мышки (Global Left Button) пропишите создание пули в координатах героя: if babah<=0 {if oruzhie='Пистолет' and pistolet_patron>0 or oruzhie='Бластер' and blaster_patron>0 {instance_create(x,y,pulya) if oruzhie='Пистолет' {pistolet_patron-=1 babah=15} if oruzhie='Бластер' {blaster_patron-=1 babah=30}} } А у пули в Create: move_towards_point(mouse_x,mouse_y,25) Теперь получилось, что герой стреляет. Не из дула, а из своей середины - но, благодаря высокой скорости пули, это незаметно. Стрельба есть, но врагов нет. Непорядок! Создайте объект какого-нибудь чудовища и перетащите ему в Step кнопку Step Towards Point (координаты - hero.x,hero.y. Также выберите solid и включите solid самому монстру - чтобы обходил препятствия и таких же, как он сам). Теперь монстру в Create: heal=100 (это его здоровье) В столкновении героя с монстром напишите health-=1 А в столкновении монстра с пулей: if hero.oruzhie='Пистолет'heal-=20 (можно больше, для скоростного и кровавого геймплея ) if hero.oruzhie='Бластер'heal-=60 В Step монстра: if heal<=0 {instance_change(trup,1)} И создайте объект трупа врага и спрайт этого трупа. Сам герой умереть тоже должен, пишем ему в Step что-то подобное: if health<=0 {game_end() show_message('Ты сдох, чувак!')} Основная часть позади! Но надо еще сделать постоянное нападение врагов и смену оружия. Сначала враги. Посмотрите на своей игровой карте точки, из которых могли бы выходить монстры (желательно за пределами карты и штуки три), создаем объект без спрайта и пишем ему в Create Alarm[0]=30 (можно меньше) А в событии Alarm 0: instance_create(координаты вашей первой точки,monstr) instance_create(координаты вашей второй точки,monstr) instance_create(координаты вашей третьей точки,monstr) alarm[0]=30 Теперь монстры постоянно идут из тех точек. Дальше оружие. Создаем объект blaster. В столкновении героя с бластером поместим: blaster_patron+=20 (патроны нашли) s_blasterom=true (у нас он есть) oruzhie='Бластер' (автоматически оружие меняется на бластер, для удобства) Создаем объект пистолета и пишем в столкновении героя с ним примерно так: pistolet_patron+=40 И, наконец, смена оружия. У героя в нажатии цифры 1: oruzhie='Пистолет' А в нажатии 2: if s_blasterom=true {oruzhie='Бластер'} Вот и все - простенькая TDS создана! Выкладываю также исходник этого примера. Он немного не такой, в частности геймплей там быстрый за счет увеличения скорости комнаты.
Сообщение отредактировал Scorpio - Понедельник, 08.03.2010, 13:02 |
| |
| | |
| Scorpio | Дата: Четверг, 01.04.2010, 14:08 | Сообщение # 5 |
Любитель геймдева
Сообщений: 458
Сейчас нет на сайте
| Я и собирался, но были проблемы (случайно ГМ стерся). Так что скоро будут. Добавлено (08.03.2010, 13:03) --------------------------------------------- Пример TDS создан и залит на Deposit Files (ссылка в статье!) Добавлено (08.03.2010, 17:14) --------------------------------------------- Виртуальная машинка Небольшая статья про гонки. На ГМ можно создать игру любого жанра, без ограничений. В том числе и гонку. Я не буду описывать весь процесс ее создания, а расскажу о создании именно автомобиля. Вид сверху, пространство 2D. Управление будет стандартным - газ на Up, задний ход на Down, Left/Right - поворот. У машины будет нстоящий тормозной путь, а также время, необходимое для разгона. В событии Up пишем (скорость может быть другой, на ваше усмотрение) if speed<8 {speed+=0.4} В событии Down if speed>-5 {speed-=0.4} В событии Step: image_angle=direction if keyboard_check(vk_up)=0 and keyboard_check(vk_down)=0 {if speed>0 speed-=0.2 if speed<0 speed+=0.2} В событии Left if speed<-1 or speed>1 direction+=5 И, соответственно, в событии Right if speed<-1 or speed>1 direction-=5 Вот и создана машинка, на основе которой можно легко создать гонку! Выкладываю также пример - http://depositfiles.com/files/brf5wdf79 Добавлено (01.04.2010, 14:08) --------------------------------------------- ПРИМЕР RPG В нем реализована прокачка, небольшой текстовый инвентарь, мана + фаерболы, квест и т.д.
Сообщение отредактировал Scorpio - Четверг, 01.04.2010, 14:14 |
| |
| | |
| Made_In_USSR | Дата: Четверг, 27.05.2010, 19:05 | Сообщение # 6 |
|
заслуженный участник
Сообщений: 676
Сейчас нет на сайте
| Можете влепить мне бан, но у меня есть пожелание к автору, которое безсмысленно постить в отдельную тему. Хотелось бы увидеть статью в которой в доходчивой форме обьяснялось как, зачем и в каких случаях имеет смысл писать скрипты. После прочтения топикстартером пост можно удалить.
Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
|
| |
| |
|