Результаты поиска
| |
GameMakerBeginner | Дата: Суббота, 18 Апреля 2020, 02:51 | Сообщение # 1 | Тема: Почему не работает motion_set() (РЕШЕНО) |
был не раз
Сейчас нет на сайте
| Короче, я полазил по глубине ваших интернетов и выяснил, что такие команды, как move_towards_point, motion_add, motion_set не будут работать при включенной в комнате физике. Это весь печально, потому что GMS 2 не может предложить вам ничего взамен этого. Тут я опустил руки. Но в моей голове ещё остался школьный курс тригонометрии и я могу даже поделиться своими наработками (вот инструкция) : 1) создаём скрипт phy_move_direction 2) внутри мы записываем вот это (все вычисления основаны на тригонометрии и проверены мной):
Код if(argument0%90!=0) {
if(argument0<=180) a = 180 - argument0; else a = argument0 - 180;
xpos = argument1/ sqrt((1/sqr(dcos(a)))-2*dsin(a));
ypos = dtan(a) * xpos;
if(argument0>90 and argument0<270 ) phy_speed_x = -xpos; else phy_speed_x=xpos; if(argument0>90 and argument0<270) { if(argument0 < 180) phy_speed_y = -ypos; else phy_speed_y= ypos;} else { if(argument0 < 180) phy_speed_y = ypos; else phy_speed_y= -ypos;}
}
else {
if(argument0==90) {phy_speed_y=-argument1;} if(argument0==0) {phy_speed_x=argument1;} if(argument0==270) {phy_speed_y=argument1;} if(argument0==180) {phy_speed_x=-argument1;}
}
3) Чтобы вызвать команду, её надо запускать в событиях объекта, который вы собрались двигать (не забываем включить физику у объекта и в комнате) 4) как вы поняли, в скобках должно быть два аргумента: первый - это ваш угол движения, второй - это ваша скорость (теорема Пифагора, сложение phy_speed_x и phy_speed_y) 5) Если есть вопросы, спрашивайте 6) И ещё мне интересно, можно ли сделать легче. Напишите команду, которая делает это же с физическим объектом и вы услышите взрыв моего бензобака.
|
|
| |
GameMakerBeginner | Дата: Среда, 15 Апреля 2020, 14:46 | Сообщение # 2 | Тема: Почему не работает motion_set() (РЕШЕНО) |
был не раз
Сейчас нет на сайте
| И снова надо обратиться на форум. Решил поработать с такими интересными штучками, как direction и speed. Сколько инфы не читай, а нигде толком не написано, как это работает. В общем, есть у меня объект Candle (без физики). Я хочу, чтобы он двигался, например со скоростью 5 в направлении 290. Не понятно почему, команда motion_set(dir, speed) не работает, хотя в ней всё, что мне нужно. Решил попробовать move_towards_point(x,y,speed). Опять же: пошёл я на фиг, ничего не робит. Уже и физику объекту дал, всё равно. Может у меня объект дефективный или что? Подскажите, пожалуйста
Сообщение отредактировал GameMakerBeginner - Суббота, 18 Апреля 2020, 02:52 |
|
| |
GameMakerBeginner | Дата: Суббота, 28 Марта 2020, 02:17 | Сообщение # 3 | Тема: Касание со спрайтом объекта |
был не раз
Сейчас нет на сайте
| DivES, привет. Автоматический режим по факту сделает прямоугольник под размер изображения, т.е. то же самое, что обозначил я. Почитал я этот урок, вроде что-то толковое, но там решают проблему с вращением объекта, скорее всего. Я тут подумал, что если при столкновении с объектом проверять цвет точки соприкосновения. Например
Код if( distance_to_object(obj)<=0 and collusion_point_colour!=0 (должна быть другая команда, которую я не знаю как раз таки) ) show_message("Всё получилось!");
Сейчас ещё поищу....Добавлено (28 Марта 2020, 16:14) --------------------------------------------- Так, я возможно понял загвоздку. Толерантность на самом деле оказалась важна. Если значение 0 - столкновение будет даже с полностью пустыми пикселями. Если 255, то столкновения не будет даже с полностью закрашенным объектом. Теперь задача полегче, подскажите, как ещё можно задать проверку не физического контакта объектов (я просто использовал distance_to_object(), и оно походу вообще игнорирует маску соприкосновения).
|
|
| |
GameMakerBeginner | Дата: Пятница, 27 Марта 2020, 20:31 | Сообщение # 4 | Тема: Касание со спрайтом объекта |
был не раз
Сейчас нет на сайте
| А это надо тогда через collusion делать, или без разницы? И где можно побольше почитать про маски? Добавлено (28 Марта 2020, 01:02) --------------------------------------------- Я кстати почитал про маски объекта и всё равно остались вопросы.
На скрине я показал красным те зоны, при соприкосновении с которыми должно быть выполнено действие. Зелёным обозначена зона, при контакте с которой в данный момент выполняется действие. Так скажем красное - это ожидание, а зелёное - реальность. Я вот и не знаю, как сделать такую мультимаску, или может ещё есть способ как-то отрисовать вручную. Если вы хотите написать "так сделай два отдельных объекта", то это не суть этого вопроса. В моем будущем проекте мне надо будет сделать и посложнее фигуры, чем два прямоугольника. Так что если есть способ - спасайте. На словах должно быть так: область закрашена цветом и игрок касается её → происходит действие, область не закрашена цветом и игрок касается её → ничего не происходит. А я пока полажу по интернету.
Сообщение отредактировал GameMakerBeginner - Пятница, 27 Марта 2020, 20:37 |
|
| |
GameMakerBeginner | Дата: Пятница, 27 Марта 2020, 18:40 | Сообщение # 5 | Тема: Касание со спрайтом объекта |
был не раз
Сейчас нет на сайте
| Добрый день всем знатокам Game Makera. Хотел сделать одну фичу, суть её с том, что когда касаешься объекта, то появиться show_message с текстом. Реализовывал через distance_to_object. Но проблема с том, что текст должен появляться только тогда, когда игрок касается с непустой областью (в которой есть пиксели). А это я не знаю как сделать. Сразу скажу, что объект не имеет физики. Если пока не понятно, что я хочу, то сегодня вечером опишу суть задачи понаглядней, в картинках.
|
|
| |
GameMakerBeginner | Дата: Среда, 04 Марта 2020, 23:37 | Сообщение # 6 | Тема: Затемнение комнаты + несовпадение координат |
был не раз
Сейчас нет на сайте
| Насчёт второго вопроса спасибо. Надо будет подробнее почитать справку о тексте и т.д. Насчёт первого вопроса тоже спасибо. Я просто не знал, что alpha можно менять не только для спрайта, но и для draw. Буду знать!
|
|
| |
GameMakerBeginner | Дата: Среда, 04 Марта 2020, 10:50 | Сообщение # 7 | Тема: Затемнение комнаты + несовпадение координат |
был не раз
Сейчас нет на сайте
| Добрый день, знатоки. Возникло два небольших вопроса.
1) Затемнение комнаты при переходе в другую. Хочу сделать, чтобы когда персонаж подходил к выходу из одной комнаты, комната затемнялась, происходит переход, следующая комната из черного экрана становится светлой. Я реализовывал через объект "черный квадрат", который покрывает всю комнату, а при входе просто меняет в stepe image_alpha-=0.15. Вроде легко, но дико неудобно включать и выключать видимость слоя с квадратом, т. к. он загораживает все остальные объекты. Может это можно сделать одной командой.
2) Второй вопрос. Хотел написать текст с началом в координатах x и y. Пишу Код draw_text(x,y,"Мой текст..."); Но он создаёт вообще внизу комнаты, когда координаты указывают на середину. Может есть предположение, что не так? (если поможет, размеры комнаты 1080 на 810, текст должен начинаться с точки (70,500) а создает в самом низу(70,810)
Сообщение отредактировал GameMakerBeginner - Среда, 04 Марта 2020, 10:50 |
|
| |
GameMakerBeginner | Дата: Среда, 19 Февраля 2020, 00:39 | Сообщение # 8 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Так. Я почти полностью понял GMS 2. Он оказался несложным, но как это выразится..... много писать надо, но зато получается всё, как Я хочу. Спасибо всем, кто даже выделил время на меня. Но у меня ещё есть один вопросик к вам, знатоки. Я использую для сохранения ini-файлы. Я про них почитал, вроде норм, даже поддержка команд есть, вообще супер. И написано, что я могу открыть файл и почитать, что там за переменные есть. Но вот незадача: я не могу его найти. Типо у меня все проекты в папке Documents/GameMakerStudio2/<название проекта> но там нигде нет моего заветного файлика. И в appdata искал, и в local искал. Нет его там. Подскажите, где его можно найти, и можно ли вообще это сделать. Это не сильно мне вредит, но всё-таки пускай будет на виду.
|
|
| |
GameMakerBeginner | Дата: Среда, 12 Февраля 2020, 23:45 | Сообщение # 9 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Диалоговая система почти готова, осталось разобраться с устройством GMS2. Я например в коде обратился к скрипту script2("My text"); и вот вопрос. Как мне в скрипте обратится к этому тексту, что написан в скобках, чтобы поработать с ним в моём скрипте. (Если кому интересно, , то это для того, чтобы сделать скрипт красивого появления букв многоразовым шаблоном) Спасибо всем, кто помог мне пропитаться этим движком. Без вас я бы долго ничего не понял. Это будет наверно не последний вопрос, так что, надеюсь, вам нравиться подсказывать мне.
|
|
| |
GameMakerBeginner | Дата: Среда, 12 Февраля 2020, 20:40 | Сообщение # 10 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Спасибо Quad69. Мне там сверху с первым вопросом немного помогли уже, я как раз в коде использовал такой же способ, как ваш первый. А насчёт задержки ещё не пробовал, но надеюсь сработает. Если предыдущий автор прав и draw выполняется каждый фрейм, то можно завести в Create переменную скажем Zader=0; в Draw пишем, что Код if(Zader%60==0) "наша строка с пустым stringom" += "буква из нашей желаемой фразы с индексом Zader/60; Zader++; draw_text(x,y,"string, который заполняется"" . У меня 60 кадров в секунду, тогда каждый кадр он прибавляет один к Zader, а когда он равен 60, 120, 180 и т.д он добавляет к тексту 1, 2, 3 букву соответственно с разницей в секунду. Надеюсь понятно. Но сразу попробую вот эту команду, что вы скинули.
Ну и я так понимаю что в вашей задержке alarm нужно оставить пустым?
Сообщение отредактировал GameMakerBeginner - Среда, 12 Февраля 2020, 20:46 |
|
| |
GameMakerBeginner | Дата: Среда, 12 Февраля 2020, 09:31 | Сообщение # 11 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Хммм.. кстати спасибо. Я не знал такого ( я ж только начинаю ) Я о том, что Draw выполняется каждый фрейм. Я уже наверное с таким фактом знаю решение. Но тогда можете объяснить, почему если я напишу в draw alarm[0]=3*room_speed; , а в аларме напишу что-нибудь типа прибавить единицу, то почему он не будет каждый фрейм ( каждый вызов ) ждать ещё 3 секунды, чтобы пойти дальше на следующий вызов. Я просто думаю пока , что если мы вызвали аларм, программа будет ждать его выполнения.
|
|
| |
GameMakerBeginner | Дата: Среда, 12 Февраля 2020, 07:42 | Сообщение # 12 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Так, отвечу сразу двоим. DivES, я попробовал вставить sleep(), но она видимо существовала только в прошлых версиях. Gent, ну да, наверное стоит этим воспользоваться, но я вставляю alarm в draw и он его просто игнорирует. Может вы знаете в чем дело?
|
|
| |
GameMakerBeginner | Дата: Вторник, 11 Февраля 2020, 17:19 | Сообщение # 13 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Спасибо большое. Теперь более-менее понятно. С пропуском диалога я что-нибудь уже придумаю, но есть ли команда какая, которая делает задержку, как в C++ Я могу сделать через alarm, но если существует команда, то зачем мучиться ? Добавлено (12 Февраля 2020, 01:02) ---------------------------------------------
Цитата DivES ( ) А тут добавить задержку, например. Это оказалось сложнее, чем я думал, ведь команды как в C++ здесь просто нет. Так, попробовал я через alarm. Штука полезная, но одно но. Она не работает в событии Draw. Т.е. если вызвать её из Draw, она ничего не сделает. А именно это мне и надо, чтобы она прибавила две строки между собой через 0,5 секунд. Если не лень, почитайте. Я скину код, а вы посмотрите, там много скриптов.
Create:
Код dialog = false; text1 = "Привет, Сава!"; raz = 0;
Draw GUI:
dialog_script:
Код var S= distance_to_object(object_player); if (S<=3 and keyboard_check_pressed(vk_enter)) dialog=true;
if (dialog) { blackrec(); //просто рисует диалоговое окно draw_set_color(c_white); draw_set_font(font_det); draw_set_halign(fa_left); //настройки шрифта if(raz==1) { script2(); } //здесь пытаюсь сделать алгоритм плавного появления, ниже строчки для тупо вывода (чтоб я проверил, что хоть это работает) if(raz==2) { draw_text(window_get_width()-window_get_width()+padding*2, window_get_height()-window_get_height()+padding*2, "Вот");} if(raz==3) { draw_text(window_get_width()-window_get_width()+padding*2, window_get_height()-window_get_height()+padding*2, "конец сообщения..");} if(raz==4) { dialog = false; raz=0;} if(keyboard_check_pressed(vk_enter)) {raz++;} }
script2:
Код var exist="Привет, Сава"; var i=0; var exx; var ee=""; for(i=1; i<=string_width(exist); i++) { exx=string_char_at(exist,i); ee+=exx; draw_text(window_get_width()-window_get_width()+padding*2, window_get_height()-window_get_height()+padding*2, ee);
//и вот здесь должна быть задержка, помогите }
Я смог сделать алгоритм с добавлением символов, но мне нужна ЗАДЕРЖКА (в программе) Очень жду.
|
|
| |
GameMakerBeginner | Дата: Вторник, 11 Февраля 2020, 15:16 | Сообщение # 14 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Так, по первому вопросу спасибо, идею понял, ещё не тестил, но выглядит правильно. А на второй вопрос не знаете? Цитата GameMakerBeginner ( ) 2) и второй вопрос и разряда "так, на будущее". Как сделать так, чтобы буквы строчки текста выходили не все сразу, а одна за одной? Я слышал про события Alarm и реализацию через него, но ещё не до конца понял, так что может кто подскажет?
|
|
| |
GameMakerBeginner | Дата: Вторник, 11 Февраля 2020, 01:17 | Сообщение # 15 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Цитата DivES ( ) keyboard_check_pressed() срабатывает не только ли тогда, когда клавиша pressed (нажата) ? Я это уже пробовал. Не работает. Только если поставить или Код keyboard_check_direct() и удерживать клавишу, то получится. Но ты же не будешь для диалога держать всё время клавишу. Может быть надо как-то через объект или что-то другое делать?
Сообщение отредактировал GameMakerBeginner - Вторник, 11 Февраля 2020, 01:17 |
|
| |
GameMakerBeginner | Дата: Вторник, 11 Февраля 2020, 00:59 | Сообщение # 16 | Тема: Событие Draw, как диалоговое окно |
был не раз
Сейчас нет на сайте
| Господа, возник вопрос. Заранее скажу: я только начал изучать среду. Так вот. Решил запилить диалоговую систему по принципу: 1)Подходишь к объекту, нажимаешь [клавиша] 2)Появляется прямоугольник и на нём проигрывается какой-то текст. Первый абзац появился, проигрался, исчез, за ним второй, исчезает потом третий и т.д. 3)Когда реплик больше нет, пропадает сам прямоугольник
Я привязал диалоговое окно к верху окна приложения.
Принцип простой. Реализовывал через событие Draw GUI:
Код var S= distance_to_object(object_player); if (S<=3 and keyboard_check_pressed(vk_enter)) script0();
В скрипте код таков:
Код draw_set_color(c_white); draw_set_font(font_det); draw_set_halign(fa_left); padding = 7; draw_rectangle(window_get_width()-window_get_width(), window_get_height()-window_get_height(),window_get_width(), window_get_height()-300, false); draw_set_color(c_black); draw_rectangle(window_get_width()-window_get_width()+padding, window_get_height()-window_get_height()+padding,window_get_width()-padding, window_get_height()-300-padding, false);
Так вот в чём проблема. Персонаж подходит, я нажимаю [клавиша], диалоговый прямоугольник появляется, но тут же исчезает. И вот я здесь. У меня будет два вопроса, если позволите:
1) как сделать так, чтобы прямоугольник появлялся и исчезал, когда это надо (может команда какая есть, или способ более удобный и умный, заранее предусмотренный, просто я ещё только постигаю GameMaker, раньше только с C++ и Java работал.
2) и второй вопрос и разряда "так, на будущее". Как сделать так, чтобы буквы строчки текста выходили не все сразу, а одна за одной?
Буду очень ждать ответа.
|
|
| |
|