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


2.1.1. Как ограничить значение переменной?






 


Ответ: Для начала, следует учесть, что вы можете получить небольшой, но всё же выигрыш в производительности, проверяя значение переменной исключительно фактически после её изменения. То есть, если жизни игрока уменьшаются при столкновении с монстром и с огнём - немного производительней будет поставить две проверки в эти события, чем писать одну в step event, которая будет выполнятся каждый шаг. Однако, не стоит злоупотреблять этим в ущерб сопровождаемости кода. К примеру, если вам понадобится как-то изменить событие смерти игрока - вам придётся менять его в двух событиях (в лучшем случае), а не в одном (в случае со step event). Чтобы этого не происходило, лучше выносите повторяющиеся куски кода в скрипты или user events. Последние можно выполнить с помощью команды event_user(номер_события).


 


Итак, при увеличении или уменьшении вы можете использовать такие простые проверки:


Код:






 


variable += x;


if variable > variable_max // Если переменная больше указанного значения, то...


   variable = variable_max; // Устанавливаем переменной максимальное значение


 


variable -= x;


if variable < variable_min


   variable = variable_min;


 




 


Ещё один вариант решения через if:


Код:






 


if (variable>variable_max) {variable=variable_max} else {variable+=x}


 




Почти то же самое, но здесь переменная изменяется после проверки, а не до неё.


 


Слегка понизив читабельность можно добится большей компактности кода, используя функции min и max:


Код:






 


variable = min(variable + x, variable_max); // Если variable_min + x больше variable_max - выбираем меньшее, то есть, variable_max.


variable = max(variable - x, variable_min);


 




 


Часто в различных примерах вы можете встретить такую запись:


Код:






 


variable = max(variable_min, min(variable, variable_max));


 




 


Однако, есть способ лучше, который я и предпочитаю использовать:


Код:






 


variable = median(variable_min, variable, variable_max); // Находим среднее из значений, если variable < variable_min - средним становится variable_min и аналогично для variable_max.


 




 


Например, если вы хотите ограничить передвижение игрока некоторыми рамками, скажем, сделать, чтобы он не выходил за границы комнаты - вы можете написать так:


Код:






 


x = median(0, x, room_width - sprite_width);


y = median(0, y, room_height - sprite_height);


 




 


 




2.1.2. Мне нужно написать текст с указанием значения переменной, как?






 


Ответ: Пропишите отдельному объекту в событие draw, такой код:


Код:






 


draw_text (x, y, ' Текст до переменной ' + string(переменная) + ' Текст после');


Не забудьте, что переменная может быть названа только на английском языке, без пробелов и начинаться она должна с буквы.


Так же, если переменная всегда хранит текстовое значение - её не обязательно заносить в string().


 




 


 




2.1.3. Как сделать, чтобы герой TDS смотрел на мышь?






 


Ответ: Так как направление 0 - вправо, нужно повернуть спрайт игрока вправо и прописать такой код в step event объекту:


Код:






 


image_angle = point_direction (x, y, mouse_x, mouse_y);


 




 


Так же убедитесь, что в draw event вы не рисуете спрайт объекта без использования переменной image_angle. К примеру, если вы рисуете спрайт таким образом:


Код:






 


draw_sprite(sprite_index, image_index, x, y);


 




 


следует заменить эту строку на:


Код:






 


draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, image_angle, image_blend, image_alpha);


 




 


 




2.1.4. Как запросить имя игрока, и в последствии использовать его в сообщениях и диалогах?






 


Ответ: Запросить имя можно таким образом:


Код:






 


global.Hero_name = get_string('Как вас зовут?', 'DeatHSoul');


 




 


После этого, введённое игроком имя будет хранится в глобальной переменной Hero_name, которая будет сохранять свое значение во всех комнатах, и вы можете использовать её, чтобы получить имя игрока. Например, так:


Код:






 


show_message('Привет ' + global.Hero_name + '!');


 




 


 




2.1.5. Как программно отразить спрайт по вертикали или горизонтали?






 


Ответ: Чтобы отразить спрайт по горизонтали - нужно параметрам image_xscale и image_yscale присвоить значение -1. Однако, убедитесь, что ваш спрайт рисуется с использованием переменных image_xscale и image_yscale. т.е. если вы рисуете спрайт функцией draw_sprite, замените её на функцию draw_sprite_ext.


 


 




2.1.6. Как повернуть комнату?






 


Ответ: Используйте view_angle[0..7], и убедитесь, что у вас включен указанный вид. Если вы хотите, чтобы вид поворачивался вместе с игроком - учтите, что его нужно поворачивать в противоположную сторону. Вместо:


Код:






 


view_angle[0] = direction;


 




 


пишите:


Код:






 


view_angle[0] = -direction;


 




 


 




2.1.7. Как сделать паузу между выстрелами?




 


Ответ:


[create event]:


Код:






 


shooting_ready = 1; // Указываем, что игрок готов стрелять


step event:


Код:


if (shooting_ready) // Если игрок готов стрелять


{


 // ...


 // Стреляем


 alarm[0] = room_speed*<количество_секунд>; // Устанавливаем время, через которое игрок снова будет готов стрелять


 shooting_ready = 0; // Указываем, что игрок более не может стрелять


}


alarm 0 event:


Код:


shooting_ready = 1; // После истечения времени указываем, что игрок готов стрелять


 





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