Подыму эту древнюю тему все с тем же замусоленным, но не менее актуальным вопросом (особенно в контексте 3-го поста ТС): как сделать следование за видом нескольких экземпляров одного объекта, чтобы не было видимых задержек? Пометка: это кнопки меню (слоты умений), которые должны быть не просто спрайтами, а активными кнопками. Спрайты этих кнопок меняются в зависимости от команд игрока. (Мой спрайто-хелсбар работает как часы, но это совсем другое). Как делал: объект инвентарь создает кнопки (в Create инвентаря):
cell[0]=instance_create(view_xview[0]+352,view_yview[0]+560,o_case); cell[1]=instance_create(view_xview[0]+392,view_yview[0]+560,o_case); cell[2]=instance_create(view_xview[0]+432,view_yview[0]+560,o_case); cell[3]=instance_create(view_xview[0]+472,view_yview[0]+560,o_case); cell[4]=instance_create(view_xview[0]+512,view_yview[0]+560,o_case); cell[5]=instance_create(view_xview[0]+552,view_yview[0]+560,o_case); cell[6]=instance_create(view_xview[0]+592,view_yview[0]+560,o_case); cell[7]=instance_create(view_xview[0]+632,view_yview[0]+560,o_case); делал через for, но почему-то не срабатывает, так что не кидайтесь тапками)
В Draw объекта кнопок:
draw_sprite_ext(sprite_index, image_index, x, y, 1, 1, image_angle, c_white, 1);
Вроде и отрисовывается, но задержка всегда есть. Перебрал кучу вариантов, но тогда inv.cell[i] не работает, а на нем завязан уже работающий код типа if inv.cell[i].sprite_index = but_clear ... Может быть здесь надо как-то обращаться к id объекта, но в справке я так и не понял, как выявить id создаваемого объекта o_case, чтоб потом его двигать за видом. Буду благодарен за любую помощь! Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
cell[0]=instance_create(view_xview[0]+352,view_yview[0]+560,o_case); cell[1]=instance_create(view_xview[0]+392,view_yview[0]+560,o_case); cell[2]=instance_create(view_xview[0]+432,view_yview[0]+560,o_case); cell[3]=instance_create(view_xview[0]+472,view_yview[0]+560,o_case); cell[4]=instance_create(view_xview[0]+512,view_yview[0]+560,o_case); cell[5]=instance_create(view_xview[0]+552,view_yview[0]+560,o_case); cell[6]=instance_create(view_xview[0]+592,view_yview[0]+560,o_case); cell[7]=instance_create(view_xview[0]+632,view_yview[0]+560,o_case); делал через for, но почему-то не срабатывает, так что не кидайтесь тапками)
Интернет, спасибо! Но именно так я и делал и все работало как часы, но это было еще ДО того, как решили делать игру с видами, а не в статике. ... Увидел сообщение - что значит в другом объекте? Я же создаю o_case в Create объекта inv. Поясните, пожалуйста. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Сообщение отредактировал Granner - Понедельник, 28 Марта 2016, 12:47
Увидел сообщение - что значит в другом объекте? Я же создаю o_case в Create объекта inv. Поясните, пожалуйста.
Да всё правильно просто цикл по созданию объекта нельзя ставить в этот же объект.
Добавлено (28 марта 2016, 13:27) --------------------------------------------- Ну тогда используй
Код
lengthdir_x(len,dir)
вместо len поставь 0 а вместо dir view_xview[0]. При поворотах вида будет возвращать горизонтальный компонент вектора то есть смещение 0. Ну да всё работает пишу в Draw
Да, с lengthdir_x задержек нет, но и кнопки становятся неактивны, просто как чистые спрайты, нарисованные поверх объектов o_case.Может быть, есть другие варианты? Через id? Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Ну тогда не знаю. Могу предложить только. Сделать кнопку одним объектом, расплодить его экземпляры и каждому присвоить свой image_index. И при нажатии проверять
Код
position_meeting(mouse_x,mouse_y,self)
позицию курсора и в зависимости какой стоит image выполнять нужное действие.
Получть id экземпляра при создании (из другого объекта)
Интернет, спасибо за наводку с id. На меня свалилось прозрение и проблема решена (в контексте моих требований) :) Итак, движение быстрых слотов за видом (несколько экземпляров одного объекта): Create объекта инвентаря inv:
for (i=0; i<8; i+=1;) { cell[i]=instance_create(view_xview+240+i*40,view_yview+560,o_case); //создаем быстрые слоты }
Create объекта o_case (те самые быстрые слоты):
id_el = instance_nearest(self.x,self.y,o_case) // получаем id объекта при его создании ("id самого себя")
End step объекта o_case:
inv.cell[0].x=view_xview[0]+240; inv.cell[0].y=view_yview[0]+560; // слежение быстрых слотов за видом. Задержки присутствуют! inv.cell[1].x=view_xview[0]+280; inv.cell[1].y=view_yview[0]+560; inv.cell[2].x=view_xview[0]+320; inv.cell[2].y=view_yview[0]+560 и т.д...
И финальная часть решена через свитч по id создаваемых объектов o_case - Draw объекта o_case (Ликвидация задержек следования за видом):
switch (id_el) { case inv.cell[0]: draw_sprite_ext(sprite_index,image_index,view_xview[0]+240,view_yview[0]+560,1,1,image_angle,image_blend,1); case inv.cell[1]: draw_sprite_ext(sprite_index,image_index,view_xview[0]+280,view_yview[0]+560,1,1,image_angle,image_blend,1); case inv.cell[2]: draw_sprite_ext(sprite_index,image_index,view_xview[0]+320,view_yview[0]+560,1,1,image_angle,image_blend,1) ... break; }
Подозреваю, есть более корректное решение, но данный код меня устраивает: задержек нет, кнопки - активны (я там по ним ПКМ и цифрами перещелкиваю). Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку