Четверг, 25 Апреля 2024, 12:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » GameMakerBeginner [16]
Результаты поиска
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"); и вот вопрос. Как мне в скрипте обратится к этому тексту, что написан в скобках, чтобы поработать с ним в моём скрипте. (Если кому интересно, :D , то это для того, чтобы сделать скрипт красивого появления букв многоразовым шаблоном) Спасибо всем, кто помог мне пропитаться этим движком. Без вас я бы долго ничего не понял. Это будет наверно не последний вопрос, так что, надеюсь, вам нравиться подсказывать мне.
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++
Код
Sleep();
Я могу сделать через alarm, но если существует команда, то зачем мучиться :D ?

Добавлено (12 Февраля 2020, 01:02)
---------------------------------------------

Цитата DivES ()
А тут добавить задержку, например.

Это оказалось сложнее, чем я думал, ведь команды как в C++ здесь просто нет.
Так, попробовал я через alarm. Штука полезная, но одно но. Она не работает в событии Draw. Т.е. если вызвать её из Draw, она ничего не сделает. А именно это мне и надо, чтобы она прибавила две строки между собой через 0,5 секунд.
Если не лень, почитайте.
Я скину код, а вы посмотрите, там много скриптов.

Create:
Код
dialog = false;
text1 = "Привет, Сава!";
raz = 0;


Draw GUI:
Код
dialog_script();


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);

//и вот здесь должна быть задержка, помогите
}


Я смог сделать алгоритм с добавлением символов, но мне нужна ЗАДЕРЖКА (в программе)
Очень жду. facepalm
GameMakerBeginnerДата: Вторник, 11 Февраля 2020, 15:16 | Сообщение # 14 | Тема: Событие Draw, как диалоговое окно
был не раз
Сейчас нет на сайте
Так, по первому вопросу спасибо, идею понял, ещё не тестил, но выглядит правильно. А на второй вопрос не знаете?
Цитата GameMakerBeginner ()
2) и второй вопрос и разряда "так, на будущее". Как сделать так, чтобы буквы строчки текста выходили не все сразу, а одна за одной?
Я слышал про события Alarm и реализацию через него, но ещё не до конца понял, так что может кто подскажет?
GameMakerBeginnerДата: Вторник, 11 Февраля 2020, 01:17 | Сообщение # 15 | Тема: Событие Draw, как диалоговое окно
был не раз
Сейчас нет на сайте
Цитата DivES ()
keyboard_check_pressed() срабатывает не только ли тогда, когда клавиша pressed (нажата) ?

Я это уже пробовал. Не работает. Только если поставить
Код
keyboard_check()
или
Код
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) и второй вопрос и разряда "так, на будущее". Как сделать так, чтобы буквы строчки текста выходили не все сразу, а одна за одной? unsure

Буду очень ждать ответа.
Форум игроделов » Записи участника » GameMakerBeginner [16]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг