{ 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;} // если активен, то проверяем рядом ли он, если да то блокируемся если нет то разблокируемся
} }
В чем проблема этого кода. Когда враг уничтожен то с клеток не снимается блокировка. Если появляется новый активный враг, то клетки вокруг него блокируется, а все остальные на карте разблокируются. Есть у кого-нибудь пример нормальной работы с сетками или чтобы перебирались объекты нормально. В этом примере вроде бы проблема в том, что после удаления объекта он не удаляется из массива, а как его удалить я не знаю. LUXORIX GAMES
{ 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;} // если активен, то проверяем рядом ли он, если да то блокируемся если нет то разблокируемся
}
В чем проблема этого кода. Когда враг уничтожен то с клеток не снимается блокировка. Если появляется новый активный враг, то клетки вокруг него блокируется, а все остальные на карте разблокируются. Есть у кого-нибудь пример нормальной работы с сетками или чтобы перебирались объекты нормально. В этом примере вроде бы проблема в том, что после удаления объекта он не удаляется из массива, а как его удалить я не знаю.
Это очень странный код. Насколько часто он выполняется и из клеток ли вовсе? Приведенное в нем "lock = 1 else lock = 0" подозревается в поломке выполнения при наличии более чем одного врага на карте. По меньшей мере стоит делать
Код
{ lock = 0 // по-умолчанию клетки остаются незаблокированными. блокируются лишь в близости врагов 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 } // если активен, то проверяем рядом ли он, если да то блокируемся
}
Ну или даже так (зачем перебирать все объекты?):
Код
var i, n, inst; n = instance_number(objVirus) lock = 0 for (i = 0; i < n; i += 1) { inst = instance_find(objVirus, i) // находим i-ый objVirus if (inst.activ > 0) if (collision_circle(x,y,64,inst,0,1)) { lock = 1 break // эта ячейка уже заблокирована, дальше перебирать не нужно } }
YellowAfterlife, спасибо большое за помощь, я ждал ваш комментарий, уже было собирался писать в личку, но сегодня утром, о чудо у меня получилось))
Я создал список, в который добавляются все АКТИВНЫЕ вирусы. Клетка проверяет есть ли хоть один вирус из списка рядом, если есть - блокируется и перестает их проверять. Когда вирус умирает он удаляется себя из списка, клетки пересчитываются.
Но ваш вариант мне тоже нравится. Я его тоже проверю. СПАСИБО! LUXORIX GAMES
Товарищи!!! скажите пожалуйста, кто-нибудь, где-нибудь, когда-нибудь находил какие-нибудь статьи по работе с физикой в GMS кроме этой http://gamesmaker.ru/konstruktory-igr/game-maker/fizika/? интересуют статьи с описаниями функций GMS для работы с Box2D. Если да, то кто?, где? и когда? Спасибо
Бьюсь с этими таймлайнами, как сделать чтобы каждую секунду срабатывало событие. Я так понимаю, одна секунда - это 30 кадров (по стандарту). Это делается через таймлайн, таймер или все проще? I dance only with russians.
Бьюсь с этими таймлайнами, как сделать чтобы каждую секунду срабатывало событие. Я так понимаю, одна секунда - это 30 кадров (по стандарту). Это делается через таймлайн, таймер или все проще?
Для такого используют alarm'ы. Timelines больше рассчитаны на серии событий, что происходят один раз. Можно, конечно, "зациклить" timeline кодом, но при одном действии это лишь лишние хлопоты.
Цитата
Information about object: obj_example
Create Event:
Код
alarm[0] = 30 // время до первого срабатывания
Alarm 0:
Код
// [выполнить действия] alarm[0] = 30 // время до следующего срабатывания
ООО, спасибо! Все работает! Пользуясь случаем, ты же автор Terrasavr, или я что-то путаю?
Верно.
В подписи есть ссылка на группу, группа ссылается на мой сайт, на котором лежит программа. Еще есть версия для tAPI, о которой я никак не соберусь написать запись для блога, чтобы ее можно было легко найти
Занимаюсь различным времяпрепровождением, в общем-то говоря.
Привет всем! Я редко когда делаю платформеры, но щас вот решил. Мучает один вопрос, почему не работает функция object set mask? Просто дело в чем, спрайты игрока разных размеров при ходьбе и при беге, а когда присидает, так вообще! После присида например если сразу встать и пойти, то спрайт ходьбы застривает в земле. Можно решить проблему с помощью установки маски для целого объекта, например маску стоячего спрайта! Но тогда при присиде или при прыжке эффект не тот, например пули которые летят в объект, если от них уклониться присев, всё равно в него попадают, потомучто маска стоячего спрайта. Так вот, хотел сделать чтобы при нажатии клавиши вниз, когда игрок садится, менялась маска у объекта на спрайт соответствующий, а когда вставал и шел, также менялась, тогда не будет разных проблем. Но вот функция не работает, как быть? как известно, встречают по одежке, а провожают uninstall'ом"
Мучает один вопрос, почему не работает функция object set mask?
Нужно присваивать новый индекс маски в mask_index, к примеру, mask_index = spr_player_mask а не через object_set_mask, что лишь меняет маску для новых созданных экземпляров.
Добавлено (01 апреля 2015, 13:15) --------------------------------------------- Как мне сделать чтобы персонаж (объект) мог запрыгивать на платформы сквозь них. Ну Тоесть платформа над его головой, я жму пробел, он прыгает вверх и оказывается на платформе и не падает. Как в сеговских играх?
как известно, встречают по одежке, а провожают uninstall'ом"
t111, Я делал это проверкой направления. Когда персонаж движется вверх, то платформа не тормозит его. А если вниз то останавливает. Только сразу обрати внимание на случай, когда перс натыкается на платформу сбоку. Прыгая проблем быть не должно быть, А вот если он будет падать, то застрянет в середине. По этой причине и код не привожу, потому что у меня там были еще те костыли ((=
Сообщение отредактировал Fill_Freeman - Среда, 01 Апреля 2015, 18:26
Всем привет! не могу разобраться с отображением кириллицы в событий draw. Есть шрифт font0 с диапазоном до 255. В окне с право кириллица отображается правильно. в draw прописал
отдельные диапазоны 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, "Для обучения Бендера нажмите на его изоброжение");
еще вопросик. А 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
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"
У меня вот такой вопрос, вот у разных людей разные разрешения экрана на компах! У меня ноут 1366х728 px . Я естественно при создании игры в GM делаю комнату как уровень именно с этим разрешением! Но вот если дать игру поиграть другу, а у него например старый комп со старым монитором с разрешением 1040х800 например, то у него будет не на весь экран. А если вдруг например у него экран больше моего, то тоже проблемка. Так вот я всегда даю поиграть тем людям, у которых монитор с моим разрешением, чтобы все четко было. Просто я до сих пор не знаю как сделать так чтобы кому игру бы не дал, не бояться что у него там уровень не на весь экран будет, или он некоторых моментов игры не увидит из-за этого. Как это делается в GM ? Научите меня) как известно, встречают по одежке, а провожают uninstall'ом"