Рейтинг


Вопрос - Ответ (Game Maker)
[5301] Luxorix [20 Марта 2015, 08:03]
У меня уже мозг плывет. Попробовал сделать так:
Код
{
     for (i=0; i<instance_count; i+=1) // перебираем все объекты
     {
     iii = instance_id[i];
     if (iii.object_index=objVirus) // если нужный нам объект вирус, то проверяем
       if (iii.activ>0) // активен ли он
       {if collision_circle(x,y,64,iii,0,1) lock=1 else lock=0;} // если активен, то проверяем рядом ли он, если да то блокируемся если нет то разблокируемся
      
}
}


В чем проблема этого кода. Когда враг уничтожен то с клеток не снимается блокировка. Если появляется новый активный враг, то клетки вокруг него блокируется, а все остальные на карте разблокируются. Есть у кого-нибудь пример нормальной работы с сетками или чтобы перебирались объекты нормально. В этом примере вроде бы проблема в том, что после удаления объекта он не удаляется из массива, а как его удалить я не знаю.
[5302] YellowAfterlife [21 Марта 2015, 16:37]
Цитата Luxorix ()
У меня уже мозг плывет. Попробовал сделать так:

В чем проблема этого кода. Когда враг уничтожен то с клеток не снимается блокировка. Если появляется новый активный враг, то клетки вокруг него блокируется, а все остальные на карте разблокируются. Есть у кого-нибудь пример нормальной работы с сетками или чтобы перебирались объекты нормально. В этом примере вроде бы проблема в том, что после удаления объекта он не удаляется из массива, а как его удалить я не знаю.
Это очень странный код. Насколько часто он выполняется и из клеток ли вовсе?
Приведенное в нем "lock = 1 else lock = 0" подозревается в поломке выполнения при наличии более чем одного врага на карте.
По меньшей мере стоит делать

Ну или даже так (зачем перебирать все объекты?):
[5303] Luxorix [21 Марта 2015, 19:36]
YellowAfterlife, спасибо большое за помощь, я ждал ваш комментарий, уже было собирался писать в личку, но сегодня утром, о чудо у меня получилось))

Я создал список, в который добавляются все АКТИВНЫЕ вирусы. Клетка проверяет есть ли хоть один вирус из списка рядом, если есть - блокируется и перестает их проверять. Когда вирус умирает он удаляется себя из списка, клетки пересчитываются.

Но ваш вариант мне тоже нравится. Я его тоже проверю. СПАСИБО!
[5304] hmpr [25 Марта 2015, 18:51]
Товарищи!!! скажите пожалуйста, кто-нибудь, где-нибудь, когда-нибудь находил какие-нибудь статьи по работе с физикой в GMS кроме этой http://gamesmaker.ru/konstruktory-igr/game-maker/fizika/? интересуют статьи с описаниями функций GMS для работы с Box2D. Если да, то кто?, где? и когда? Спасибо
[5305] Banan4ik [25 Марта 2015, 20:21]
Бьюсь с этими таймлайнами, как сделать чтобы каждую секунду срабатывало событие. Я так понимаю, одна секунда - это 30 кадров (по стандарту).
Это делается через таймлайн, таймер или все проще?
[5306] YellowAfterlife [25 Марта 2015, 20:37]
Цитата Banan4ik ()
Бьюсь с этими таймлайнами, как сделать чтобы каждую секунду срабатывало событие. Я так понимаю, одна секунда - это 30 кадров (по стандарту).
Это делается через таймлайн, таймер или все проще?

Для такого используют alarm'ы. Timelines больше рассчитаны на серии событий, что происходят один раз. Можно, конечно, "зациклить" timeline кодом, но при одном действии это лишь лишние хлопоты.
Цитата

Information about object: obj_example

Create Event:
Код
alarm[0] = 30 // время до первого срабатывания


Alarm 0:
Код
// [выполнить действия]
alarm[0] = 30 // время до следующего срабатывания

[5307] Banan4ik [25 Марта 2015, 20:44]
ООО, спасибо! Все работает!
Пользуясь случаем, ты же автор Terrasavr, или я что-то путаю?
[5308] YellowAfterlife [26 Марта 2015, 10:41]
Цитата Banan4ik ()
ООО, спасибо! Все работает!
Пользуясь случаем, ты же автор Terrasavr, или я что-то путаю?
Верно.
Занимаюсь различным времяпрепровождением, в общем-то говоря.
[5309] t111 [31 Марта 2015, 10:33]
Привет всем! Я редко когда делаю платформеры, но щас вот решил. Мучает один вопрос, почему не работает функция object set mask? Просто дело в чем, спрайты игрока разных размеров при ходьбе и при беге, а когда присидает, так вообще! После присида например если сразу встать и пойти, то спрайт ходьбы застривает в земле. Можно решить проблему с помощью установки маски для целого объекта, например маску стоячего спрайта! Но тогда при присиде или при прыжке эффект не тот, например пули которые летят в объект, если от них уклониться присев, всё равно в него попадают, потомучто маска стоячего спрайта. Так вот, хотел сделать чтобы при нажатии клавиши вниз, когда игрок садится, менялась маска у объекта на спрайт соответствующий, а когда вставал и шел, также менялась, тогда не будет разных проблем. Но вот функция не работает, как быть?
[5310] YellowAfterlife [31 Марта 2015, 11:03]
Цитата t111 ()
Мучает один вопрос, почему не работает функция object set mask?

Нужно присваивать новый индекс маски в mask_index, к примеру,
mask_index = spr_player_mask
а не через object_set_mask, что лишь меняет маску для новых созданных экземпляров.
[5311] t111 [01 Апреля 2015, 13:15]
YellowAfterlife, да, точно! Спасибо! +

Добавлено (01 апреля 2015, 13:15)
---------------------------------------------
Как мне сделать чтобы персонаж (объект) мог запрыгивать на платформы сквозь них. Ну Тоесть платформа над его головой, я жму пробел, он прыгает вверх и оказывается на платформе и не падает. Как в сеговских играх?

[5312] Fill_Freeman [01 Апреля 2015, 18:17]
t111, Я делал это проверкой направления. Когда персонаж движется вверх, то платформа не тормозит его. А если вниз то останавливает.
Только сразу обрати внимание на случай, когда перс натыкается на платформу сбоку. Прыгая проблем быть не должно быть, А вот если он будет падать, то застрянет в середине. По этой причине и код не привожу, потому что у меня там были еще те костыли ((=


Сообщение отредактировал Fill_Freeman - Среда, 01 Апреля 2015, 18:26
[5313] skypo [03 Апреля 2015, 23:33]
Цитата t111 ()
Ну Тоесть платформа над его головой, я жму пробел, он прыгает вверх и оказывается на платформе и не падает. Как в сеговских играх?

как вариант учитывать коллизию только с платформами, верхний край которых ниже нижнего края персонажа
[5314] mad_bako [07 Апреля 2015, 06:50]
Всем привет! не могу разобраться с отображением кириллицы в событий draw.
Есть шрифт font0 с диапазоном до 255. В окне с право кириллица отображается правильно.
в draw прописал
Код
draw_set_font(font1);

вот только в коде
Код
draw_text(64, 330, "Уровень турели: "+string(global.turel))
слово "уровень турели" не появляется.
Если написать на английском, то всё отображается. Подскажите что не так?
[5315] YellowAfterlife [07 Апреля 2015, 07:46]
Цитата mad_bako ()
Если написать на английском, то всё отображается. Подскажите что не так?

GMS, я полагаю? Если так, то нужно в шрифт добавлять не 0-255, а отдельные диапазоны 32-127 (латиница и всякие символы) и 1040-1111 (кириллица).
[5316] mad_bako [07 Апреля 2015, 11:07]
Цитата YellowAfterlife ()
отдельные диапазоны 32-127 (латиница и всякие символы) и 1040-1111 (кириллица).

ах, вот оно что! Спасибо огромное!

Добавлено (07 апреля 2015, 11:07)
---------------------------------------------
еще вопросик.
А draw в событий mouse event работает?
Просто в событие добавил код

Код
draw_self();
draw_set_color(c_white)
draw_text(224, 320, "Уровень Бендера: "+string(global.bender))
draw_text(224, 340, "Цена обучения: "+string(bender_cena))
draw_text(224, 360, "Для обучения Бендера нажмите на его изоброжение");

но ничего не выводится
[5317] YellowAfterlife [07 Апреля 2015, 12:37]
Цитата mad_bako ()
еще вопросик.
А draw в событий mouse event работает?

Функции рисования работают лишь в событии рисования, как можно заподозрить.
Если нужно отображать что-то при наведении мыши то это можно сделать так:
draw_self();
if (position_meeting(mouse_x, mouse_y, id)) { // если текущий объект находится под мышью
draw_set_color(c_white)
draw_text(224, 320, "Уровень Бендера: "+string(global.bender))
draw_text(224, 340, "Цена обучения: "+string(bender_cena))
draw_text(224, 360, "Для обучения Бендера нажмите на его изоброжение");
}


Сообщение отредактировал YellowAfterlife - Вторник, 07 Апреля 2015, 12:38
[5318] mad_bako [07 Апреля 2015, 14:32]
Цитата YellowAfterlife ()
draw_self();
if (position_meeting(mouse_x, mouse_y, id)) { // если текущий объект находится под мышью
draw_set_color(c_white)
draw_text(224, 320, "Уровень Бендера: "+string(global.bender))
draw_text(224, 340, "Цена обучения: "+string(bender_cena))
draw_text(224, 360, "Для обучения Бендера нажмите на его изоброжение");
}

Уиии! спасибо. Дурная голова никак не до тукала использовать "if"
[5319] Luxorix [09 Апреля 2015, 09:46]
Помогайте. При создании файла .apk выдает ошибку.


Установлено уже все что только можно. Все компилирует кроме .apk
Официальный форум весь уже перелопатил.

Лог ошибки:


Сообщение отредактировал Luxorix - Четверг, 09 Апреля 2015, 15:10
[5320] t111 [10 Апреля 2015, 14:31]
У меня вот такой вопрос, вот у разных людей разные разрешения экрана на компах! У меня ноут 1366х728 px . Я естественно при создании игры в GM делаю комнату как уровень именно с этим разрешением! Но вот если дать игру поиграть другу, а у него например старый комп со старым монитором с разрешением 1040х800 например, то у него будет не на весь экран. А если вдруг например у него экран больше моего, то тоже проблемка. Так вот я всегда даю поиграть тем людям, у которых монитор с моим разрешением, чтобы все четко было. Просто я до сих пор не знаю как сделать так чтобы кому игру бы не дал, не бояться что у него там уровень не на весь экран будет, или он некоторых моментов игры не увидит из-за этого. Как это делается в GM ? Научите меня)