[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Базовая работа с кодом и простые решения 2 (Game maker)
Базовая работа с кодом и простые решения 2
АДМИНДата: Среда, 2012/Авг/15, 13:38 | Сообщение # 1
Группа: Администрация
Сообщений: 62
Награды: 6
Репутация: 9
Статус: Offline

2.1.8. Как получить имя объекта по его id?






 


Ответ: name = object_get_name(ID.object_index);


Где ID - id объекта, имя которого требуется получить.


 


 




2.1.9. Как получить индекс объекта по его имени (строка)?






 


Ответ: object = execute_string('return '+string(obj_name));


 


 




2.1.10. Как сделать простую паузу одной кнопкой?






 


Ответ: Один из самых простых алгоритмов состоит в использовании функции keyboard_wait (код нужно вставить в событие нажатия соответствующей клавиши):


Код:






 


/// Отрисовка сообщения о паузе игры


draw_set_color(c_black);


draw_set_alpha(0.3);


draw_rectangle(0, 0, view_wview, view_hview, 0); // Отрисовка фона. Если у вас не используются виды - замените view_wview и view_hview на room_width и room_height соответственно.


draw_set_alpha(1);


draw_set_halign(fa_center);


draw_set_valign(fa_middle);


draw_text(view_xview + view_wview/2, view_yview + view_hview/2, 'PAUSE'); // Отрисовка текста. Если у вас не рисует русский текст - посмотрите вопрос 2.4.6.


 


// Обновляем экран


screen_refresh(); // Эта функция в действительности отображает на экране всё то, что мы нарисовали ранее


 


// Останавливаем игру до нажатия какой-либо клавиши


keyboard_wait();


Если вы хотите, чтобы игра продолжалась только при нажатии какой-то конкретной клавиши, к примеру, клавиши P (или, скажем, клике мыши) - замените последнюю строку скрипта (keyboard_wait()) на:


Код:


io_clear(); // Очищаем состояние клавиатуры


 


while true // Запускаем вечный цикл


{


   if keyboard_check_pressed(ord('P')) break; // Если игрок нажал Р - выходим из цикла


   keyboard_wait(); // Ожидаем нажатия какой-нибудь клавиши


}


 


io_clear(); // Снова очищаем состояние клавиатуры, чтобы пауза не влючилась сразу же после выключения


 




 


 




2.1.11. Как сделать, чтобы значение переменной сохранялось между комнатами?






 


Ответ: Первый способ - сделать переменную глобальной.Пример объявления глобальных переменных:


Код:






 


global.variable = 100;


globalvar variable2;


variable2 = 100;


 




 


Второй способ - сделать объект, в котором объявляется переменная - постоянным (persistent). Все глобальные переменные можно посмотреть в дебаг режиме: Tools -> Show Global Variables.


 


 




2.1.12. Как определить, на какую кнопку в сообщении нажал пользователь?






 


Ответ:


Вариант 1:


Код:






 


switch show_message_ext('Text', 'button 1', 'button 2', 'button 3')


{


   case 1: show_message('button 1'); break;


   case 2: show_message('button 2'); break;


   case 3: show_message('button 3'); break;


}


 




 


Вариант 2:


Код:






 


var message;


message = show_message_ext('Text', 'button 1', '', 'button 2');


if message == 3


{


   show_message('button 2');


}


 




 


Вариант 3:


Код:






 


if show_message_ext('Text', 'button 1', '', 'button 2') == 3


{


   show_message('button 2');


}


 




 


и так далее...


 


 




2.1.13. Как выполнить действие, только если объект находится в определённом радиусе?






 


Ответ: Для того, чтобы проверить, находится ли объект в определённом радиусе - можно использовать функцию point_distance. Проверяя, на каком расстоянии находится объект - мы получим определённый радиус. Пример:


Код:






 


if point_distance(x, y, some_object.x, some_object.y) < 200 // 200, в данном случае, радиус


{


   // Выполняем действия


}


 




 


 




2.1.14. Как выполнить действие, только если герой собрал все монеты/ресурсы и т.п.?






 


Ответ: Для этого нужно проверить кол-во объектов в комнате. Пример:


Код:






 


if instance_number(o_star) == 0


{


   // Выполняем нужные действия


}


 




 


 




2.1.15. Я устанавливаю image_speed на единицу, но кадр спрайта меняется мгновенно, а не один раз в секунду! Почему?






 


Ответ: Присвоив переменной image_speed единицу, вы устанавливает смену кадра спрайта каждый шаг. То есть, если у вас скорость комнаты - 30 шагов, то за секунду у спрайта сменится 30 кадров. Если вам нужно, чтобы за секунду менялся один кадр, пишите:


Код:






 


image_speed = 1/room_speed;


Тогда каждую секунду кадр будет изменяться на 1/30 (если у вас скорость комнаты - 30 шагов), и за секунду кадр всего изменится на 30/30, то есть, на 1.


 




 


 




2.1.16. Я устанавливаю таймер на единицу, но действие таймера происходит мгновенно, а не через одну секунду! Почему?






 


Ответ: Таймеры измеряется в шагах, и установив таймеру время в единицу - он выполнится через один шаг, то есть, через 1/room_speed секунды. Для того, чтобы таймер выполнился через одну секунду, нужно писать так:


Код:






 


alarm[0] = room_speed;;


Таким образом, событие таймера выполнится через room_speed шагов, а room_speed шагов составляют одну секунду.


 




 


 







Создатель сайта!!!!
 
Форум » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Базовая работа с кодом и простые решения 2 (Game maker)
  • Страница 1 из 1
  • 1
Поиск: