Общие вопросы по Game Maker 6/7/8/Studio
|
|
никита | Дата: Суббота, 29.11.2014, 12:56 | Сообщение # 586 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| А, кажется, разобрался...
Код rpower=1 near=instance_nearest(x,y,object1) if near.rpower=1 { instance_destroy() }
ВАСЕЧКА - Попугай
Сообщение отредактировал никита - Суббота, 29.11.2014, 12:57 |
|
| |
никита | Дата: Суббота, 29.11.2014, 19:39 | Сообщение # 587 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| А, нет, все же не до конца я понял. Помогите. Нужно проверить, есть ли в 32 пикселях от объекта любой другой объект с переменно rpower, равняющийся единице.
ВАСЕЧКА - Попугай
|
|
| |
fdk123 | Дата: Суббота, 29.11.2014, 22:38 | Сообщение # 588 |
Олдфаг-Программист
Группа: Постоянный
Сообщений: 214
Награды: 0
Репутация: 28
Статус: Offline
| никита, ну тебе нужно сравнивать иксы и игрики и по ним определять ( то-есть по сетке) объекты а потом проверять каково именно их значение переменной. этот код точно в степе будет. могу написать что то похожее, но только на VB. Можешь перевести в GML и должно работать, хотя BRESS явно лучше сделает, я в GML и здешних принципах оптимизации не силён. По-этому тупо копировать код - плохая идея. ЭТО НЕ GML. Это Visual Basic! в step'e или в create объектов в зависимости двигаются или нет: Код x1=x '//x первого объекта y1=y '//y первого объекта и это каждому проверяемому, каждый раз новый номер в step'e проверяющего: Код xx=x '//координаты твоего объекта которому нужно знать про рядом находящиеся объекты yy=y '//координаты твоего объекта которому нужно знать про рядом находящиеся объекты For i = -32 To 32 For j = -32 To 32 If xx+i = x1 And yy+j = y1 Then 'instance_destroy() - в VB нет такой функции, потому пишу её в коммент.тут главно разрушить другой объект, а не этот End If If xx+i = x2 And yy+j = y2 Then 'instance_destroy() - в VB нет такой функции, потому пишу её в коммент.тут главно разрушить другой объект, а не этот End If Next Next Ну вот и всё. Это один цикл вложенный в другой. И проверка значения на соответствие. Если смогу и успею скину GML код. x2 и y2 это проверка второго объекта. ну дальше контрл ц контрл в, ты знаешь это.Добавлено (29.11.2014, 22:38) --------------------------------------------- никита, вот код GML. Его можно сразу скатывать. в step'e или в create объектов в зависимости двигаются или нет: Код global.x1=x //x первого объекта global.y1=y //y первого объекта Код global.x2=x //x второго объекта global.y2=y //y второго объекта ну дальше контрл ц контрл в, ты знаешь это.
в step'e проверяющего: Код var i,j { xx1=x yy1=y for (i=-32;i<=32;i+=1) { for (j=-32;j<=32;j+=1) { if xx1+i=global.x1 { if yy1+j=global.y1 { instance_destroy() } if xx1+i=global.x2 { if yy1+j=global.y2 { instance_destroy() } } } } } } Вот код проверки и удаления чисто это копировать и вставлять. вместо global.x2 и global.y2 нужно ставить координаты следующих объектов, инстанс дестрой нужного объекта тоже сам настроишь, в принципе всё это можно менять местами, если надо объясню как но так удобнее потому что только один раз всё обрабатывается, а не по кол-ву объектов. Код if xx1+i=global.x2 { if yy1+j=global.y2 { instance_destroy() } }
Run To Life Visual Basic — пишу свободно Visual C++ — пишу свободно Visual C# — пишу свободно(изредка в книжку гляжу) GML — без гайдов ни строчки
Сообщение отредактировал fdk123 - Суббота, 29.11.2014, 21:52 |
|
| |
BRESS | Дата: Воскресенье, 30.11.2014, 09:04 | Сообщение # 589 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Цитата никита ( ) Нужно проверить, есть ли в 32 пикселях от объекта любой другой объект с переменно rpower, равняющийся единице. Поленился прочесть пост fdk123, если честно. Уж слишком велика у него тяга к письму А так, в принципе, делается всё относительно просто.
//Оперируем с группой объектов, у которых отслеживается переменная (вроде бы, можно просто написать other) with <объект, у которого отслеживаем переменную> {
//Если дистанция до нашего основного объекта <33 и переменная rpower=1, выполняем условие if (distance_to_object(other)<33) and (rpower=1) {
//Переключаемся на основной объект with other { //действия для нашего объекта }
}
}
Код не оптимизирован под большое количество объектов, то бишь, если пихать его в каждый шаг, то могут быть притормаживания.
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Воскресенье, 30.11.2014, 15:28 | Сообщение # 590 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) А так, в принципе, делается всё относительно просто. Вроде все правильно написал, по твоей инструкции... Не работает. Скорее, работает, но наполовину. Код with lever_obj { if (distance_to_object(other)<32) && (rpower=1) { with other { rpower=1 } } else { rpower=0 } } if rpower=1 { image_index=1 } else { image_index=0 } Проблема в том, что image_index=1 срабатывает, а image_index=0 не срабатывает.
==================================================
Не, не, разобрался Я просто раньше никогда with не пользовался.
ВАСЕЧКА - Попугай
Сообщение отредактировал никита - Воскресенье, 30.11.2014, 15:32 |
|
| |
никита | Дата: Воскресенье, 30.11.2014, 15:47 | Сообщение # 591 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Однако, опять прошу помощи. Вот такой значит код. Код with lever_obj { if (distance_to_object(other)<32) && (rpower=1) { with other { rpower=1 } } else { with other { rpower=0 } } } if rpower=1 { image_index=1 } else { image_index=0 } Чтобы было проще, хочу сказать, что делаю что-то вроде редстоуна в майне. У меня есть два объекта, которые могут давать редстоун-сигнал - это lever_obj (рычаг) и cable_obj (редстоун-кабель). Мне нужно, чтобы при выдаче редстоун-сигнала в радиусе 32 пикселей от объекта cable_obj, этот объект сам начинал испускать сигнал, т.е. переменная rpower равнялась единице. Вкратце: мне нужно, чтобы значение переменной rpower у объекта cable_obj становилось единицей, при обнаружении любого объекта вокруг с переменной rpower равняющейся единице.
ВАСЕЧКА - Попугай
|
|
| |
BRESS | Дата: Понедельник, 01.12.2014, 10:13 | Сообщение # 592 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Помню, когда делал и FeDo и Last такие же проблемы были ) В общем, в чем соль: звено цепи дизактивируется, но ее тут же активирует другое, рядом стоящее звено. Вот и не погасает твой редстоун. Чтобы у тебя всё получилось, нужно написать нечто типа алгоритма поиска пути.
Ну а можно схитрить и при подаче сигнала просто выпускать невидимый объект, который будет двигаться вдоль цепи. То бишь, положительный сигнал: выпускается объект, при соприкосновении с которым редстоун загорается. Отрицательный сигнал: выпускается объект, при соприкосновении с котором редстоун тухнет. Код движения достаточно тривиальный и легко пишется со справкой на руках (я уже забыл нужные функции).
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Понедельник, 01.12.2014, 18:55 | Сообщение # 593 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Помню, когда делал и FeDo и Last такие же проблемы были Все ясно. Это довольно сложно как понять, так и сделать. Думаю, что будет сложно сделать еще и объект. К тому же я не знаю еще многого о ГМ. Например, в for я так и не разобрался. P.S. Pascal, GML, Python... Они похожи, однако несущественные различия не очень удобны.
ВАСЕЧКА - Попугай
|
|
| |
никита | Дата: Вторник, 06.01.2015, 20:28 | Сообщение # 594 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| У меня есть несколько объектов enemy_obj, и объекту player_obj нужно узнать, какой из объектов enemy_obj появился в комнате первым, и по нему стрелять. Как это сделать?
ВАСЕЧКА - Попугай
Сообщение отредактировал никита - Вторник, 06.01.2015, 20:28 |
|
| |
BRESS | Дата: Вторник, 06.01.2015, 21:51 | Сообщение # 595 |
Мастер-ломастер
Группа: Администраторы
Сообщений: 3120
Награды: 1
Репутация: 224
Статус: Offline
| Там по идее счетчик есть. Точно не помню (наверное, полгода уже не сидел в GM O_o) Но можно сделать по тупому и каждому объекту присваивать свой индекс, ориентируясь на глобальную переменную. К примеру:
global.N+=1; object_number=global.N;
И далее просто чекать переменную object_number у каждого объекта. Главное не забыть создать преждевременно саму переменную global.N
Для ваших вопросов по Game Maker есть специально созданный форум. Оставьте в покое мою личку. Спасибо за внимание!
|
|
| |
никита | Дата: Среда, 07.01.2015, 16:07 | Сообщение # 596 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата BRESS ( ) Но можно сделать по тупому и каждому объекту присваивать свой индекс, ориентируясь на глобальную переменную. Самое интересное - я так и делал. Но мне нужно скорее не совсем это. Значит так, player_obj должен знать, в каком порядке стрелять по enemy_obj, а порядок задается по очереди появления в комнате. У меня есть глобальная переменная global.enemynumb и переменная enemynumb, присвоенная объекту enemy_obj. global.enemynumb=1. При появлении enemy_obj в комнате его собственная переменная enemynumb приравнивается к глобальной global.enemynumb, а затем к global.enemynumb прибавляется единица. Код enemynumb=global.enemynumb global.enemynumb+=1 player_obj должен начать стрелять по первому появившемуся в комнате объекту, затем по второму появившемуся в комнате объекту, по третьему и т.д.
ВАСЕЧКА - Попугай
|
|
| |
никита | Дата: Пятница, 09.01.2015, 18:57 | Сообщение # 597 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Возможно будет легче, если я скажу что делаю Tower Defence?
ВАСЕЧКА - Попугай
|
|
| |
Gracio001 | Дата: Пятница, 09.01.2015, 20:44 | Сообщение # 598 |
*классный титул*
Группа: Администраторы
Сообщений: 1335
Награды: 2
Репутация: 187
Статус: Offline
| никита, мб использовать переменные, типа instance_nearest, если тебе нужна стрельба по порядку?
ты никогда не станешь просто девочкой из песни.
|
|
| |
Xomafok | Дата: Пятница, 09.01.2015, 21:37 | Сообщение # 599 |
Известен под логином VS games
Группа: Постоянный
Сообщений: 932
Награды: 2
Репутация: 172
Статус: Offline
| Насколько я помню, там можно воспользоваться id объектов - то есть у кого из объектов самы меньший id, тот и заспавнился первым.
|
|
| |
никита | Дата: Пятница, 09.01.2015, 21:59 | Сообщение # 600 |
Мастер
Группа: Модераторы
Сообщений: 532
Награды: 0
Репутация: 51
Статус: Offline
| Цитата Gracio001 ( ) никита, мб использовать переменные, типа instance_nearest, если тебе нужна стрельба по порядку? instance_nearest не подойдет: если башенки будут стрелять по ближним врагам, тогда те враги, которые ближе к зоне, которую нужно защищать, не будут находиться под обстрелом. Там что-то другое нужно.Цитата Xomafok ( ) Насколько я помню, там можно воспользоваться id объектов - то есть у кого из объектов самы меньший id, тот и заспавнился первым. Спасибо, кстати, об id я не подумал. Но проблема в том, что мне нужно стрелять по врагам по порядку - убили первого, перешли на второго и т.д.
ВАСЕЧКА - Попугай
|
|
| |