На сколько я знаю, таким способом больше трех нельзя. Если ты имеешь ввиду под словом "красивый" красивый внешний вид, можно для диалогового окна и кнопок задать любую текстуру с помощью функций message_background(back)
Устанавливает фон для всплывающего сообщения, вызванного любой из вышеуказанных функций. back должен быть один из фонов, имеющихся в игре. К сожалению, значения прозрачности не учитываются. Однако, если пиксель слева внизу будет иметь прозрачность 0, то все пиксели с тем же цветом будут считаться прозрачными.
message_alpha(alpha)
Устанавливает прозрачность для всплывающего сообщения любой из вышеуказанных функций. alpha должна лежать между 0 (полностью прозрачный) и 1 (не прозрачный) (только для Windows 2000 или старше).
message_button(spr)
Устанавливает спрайт, используемый для кнопок в всплывающем сообщении. spr должен быть спрайт, состоящий из трех изображений, первое указывает кнопку, когда она не нажата, и мышь в стороне, второе указывает кнопку, когда мышь над ней, но не нажата, и третье нажатая кнопка. К сожалению, прозрачность не принимается во внимание. Однако, если пиксель слева внизу будет иметь прозрачность 0, то все пиксели с тем же цветом будут считаться прозрачными.
Если нужно больше трех кнопок, можно сделать для каждой кнопки отдельный объект и еще один объект для самого окна. Вот пример анимироаных кнопок. Тут только 2 кнопки и нет самого окна сообщение (сделано прямо в окне программы)к, но сделаны они отдельными объектами, та что можно легко по аналогии добавить сколько хочешь.
switch show_message_ext("Вопрос?","Да!","Нет","") { case 0: Действие_если_нажата_клавиша_Esc; break; case 1: room_goto(buy); break; //пользователь нажал "Да!" case 2: room_restart(); break; //пользователь нажал "Нет" }
В строку case 0: Действие_если_нажата_клавиша_Esc; break; тоже советую что-то написать, иначе, если будет нажата клавиша Esc окно закроется и ничего не произойдет. Можешь написать туда то же что и при нажатии "да" или при нажатии "нет"
if (abs((point_direction(x,y,игрок.x,игрок.y)-direction))<30) { //стрелять }
При стрельбе советую разворачивать врага к игроку, чтобы он точнее стрелял. Или стрелять не в направлении direction, а в направлении point_direction(x,y,игрок.x,игрок.y). Хотя, если не разворачивать, он будет стрелять "косо" и возможно такой вариант тоже пригодится.
Ну так бы и сказал. Чем точнее сформулирован вопрос - тем быстрее найдется ответ. Тебе нужно почти как здесь, только наоборот. http://gcup.ru/forum/36-11695-1
Код для передвижения влево/вправо (для платформера)
Code
if (keyboard_check(vk_right)) { if (place_meeting(x+3,y-3,obj_ступенька)) { y -= 3; } x += 3; } else { if (keyboard_check(vk_left)) { if (place_meeting(x-3,y-3,obj_ступенька)) { y -= 3; } x -= 3; } }
Числа ставь какие тебе нужно. Здесь перемещение на 3 каждый шаг. каждая ступенька - отдельный объект с размерами 3х3.
p.s.: я этот код еще не проверял, возможно что-то будет не так работать.
Да, это сложнее... Но код остается таким же (лучше второй вариант). Просто делаешь для каждого направления свою привязку. Новый пример инвентаря! /20.06.2012/
if (x>игрок.x) { image_xscale=-1; } else { image_xscale=1; }
А вообще лучше делать все спрайты повернутыми вправо - чтобы начальное положение соответствовало углу 0 градусов
3. В alarm ты задаешь количество шагов. Количество шагов в одной секунде = скорость комнаты. чтобы узнать на сколько поставить alarm тебе нужно скорость комнаты умножить на количество секунд. Скорее всего у тебя скорость комнаты 30. Тогде тебе нужно 30*3=90. Ставишь alarm на 90.
p.s.: ты бы хоть написал какой жанр игры. Я тебе код написал для платформера.
AGENTX001, Я про это писал несколькими постами выше.
Кстати, в проверке "if" вместо shoot==true можно просто писать shoot. В конструкции if () {} действия в фигурных скобках "{}" будут выполняться если выражение в круглых скобках "()" будет равняться true. Здесь нужно чтобы действия выполнялось когда shoot==true, по этому если будет написано просто shoot то действие выполнится только когда shoot==true. Немного запутанно объяснил, но надеюсь суть ясна. Новый пример инвентаря! /20.06.2012/
IroNN, ну ведь у твоих объектов есть спрайты. AGENTX001 предлагает отображать спрайт не стандартным способом, а прописать рисование спрайта в Draw. Можешь попробовать так, но думаю что не поможет.
Если ты создаешь объекты в степе, тогда так оно у тебя и будет отображаться. Не нужно их в степе создавать!
show_message(str) показывает просто сообщение. Чтобы было диалоговое окно с несколькими кнопками используй функцию show_message_ext(str,but1,but2,but3)
Quote
show_message_ext(str,but1,but2,but3) Показывает диалоговое окно со строкой сообщения и до трех кнопок. but1, but2 и but3 определяют текст кнопки. Пустая строка означает, что кнопка не показывается. В строке Вы можете использовать символ &, чтобы указать, что следующая за ним буква будет использоваться как горячая клавиша для этой кнопки. Функция возвращает номер нажатой кнопки (0, если пользователь нажимает клавишу Esc).
Потом задавай действие в зависимости от нажатой кнопки. Вот пример кода:
Code
switch show_message_ext("Вопрос?","Да!","Нет","Не знаю") { case 0: Действие_если_нажата_клавиша_Esc; break; case 1: Действие_если_первая_кнопка; break; //пользователь нажал "Да!" case 2: Действие_если_втрая_кнопка; break; //пользователь нажал "Нет" case 3: Действие_если_третья_кнопка; break; //пользователь нажал "Не знаю" }
== - сравнение ( = - присвоение) ! - отрицание (!= - не равно; если у тебя стоит !переменная и переменная, например, = true - значение переменной будит читаться как false) && - и. Например if (a=2 && b=3){} означает "если a=2 и b=3 выполнять...", то есть действие будет выполнено при соблюдении обоих условий.
Quote (ilgamer)
{ if (collision_line(x,y,o_hero.x,o_hero.y,o_wall,true,true)<1) {
Первый аргумент true указывает, должна ли проверка быть точной или только базироваться на ограничивающем прямоугольнике экземпляра объекта (true -точная проверка false - не точная). Второй аргумент true указывает должен ли проверяться элемент, в котором вызвана функция (true - не должен проверяться, false - должен проверяться).
Если действительно все как Lgunchik написал, не создавай объекты в шаге. Вообще трудно разобраться что у тебя не так не видя примера... Новый пример инвентаря! /20.06.2012/
Вот в этом примере есть движение по лестницам: http://game-maker.ru/infusions/pro_download_panel/download.php?did=587
Посмотри еще это обучение по созданию 2D платформера (не помню, есть ли тут про лестницы): http://game-maker.ru/infusions/pro_download_panel/download.php?did=1208