Спасибо! За оперативность - плюсик С кодом - буду думать, как применить к своим условиям, ибо подобных анимаций у меня много. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Написал тут, чтобы не плодить похожую тему. Остальные темы на форуме по анимации я уже просмотрел, и везде используется кнопочное событие "Завершение анимации", что мне не подходит. Есть ли другой, кодовый вариант этого события "Завершение анимации"? Освещаю свою проблему... Есть два спрайта: 1. str_intro - переключение оружия (анимация), 2. str_bomb - собственно герой с оружием (фактически это может последний кадр 1-ой анимации). Задача: Необходимо, чтобы анимация переключения оружия проигрывалась один раз, после чего ГГ меняет спрайт на спрайт 2 с оружием, который крутится в зависимости от point_direction.
Как пытался делать? Вариант 1.
Код
sprite_index=str_intro; image_index=0; if image_index=15 { sprite_index=str_bomb; image_index=0; image_angle=point_direction(x,y,mouse_x, mouse_y); }
Получается бесконечное проигрывание 1-ой анимации, а второй спрайт просто игнорируется. Вариант 2.
Код
sprite_index=str_intro; image_index=0; for (i=0; i<16; i+=1) { image_index=i; if image_index=15 { sprite_index=str_bomb; image_index=0; } }
Во втором варианте спрайт 1 пропускался напрочь и нормально проигрывался до бесконечности спрайт 2. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Не использовать твердость - где? В главном персонаже, в препятствиях? И речь идет не об остановке, она и так есть, а о застревании на месте столкновения, например даже прямо в воздухе, при ударе о летающего противника. И это - при работающей гравитации. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Проблема: При столкновении твердого объекта ГГ, двигающегося по пути, с любым другим твердым объектом - происходит застревание объекта ГГ на месте столкновения. Необходимо: При столкновении с любым твердым объектом у объекта ГГ путь должен заканчиваться (уничтожаться). Объект ГГ не должен застревать. На объект ГГ начинают действовать гравитация и вертикальная скорость. Примечание: Скорость пути - 60; путь создается программно из множества точек; в конце пути происходит нужное мне событие - и все это работает. Как пытался делать через Step
Код
if (path_position>0 and path_position<1) { if !place_free(Braven.x+2, Braven.y) { Braven.path_position = path_positionprevious; path_delete(ogib); move_contact_solid(0,-1) move_bounce_solid(false); go=false; } if (path_position==1) { vspeed=-12; go = false; path_delete(ogib); }
Есть ли тут иное решение? Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
От безысходности И да, запускать путь через Create у меня не получится, путь создается на наборе случайных пользовательских координат. Но выход ясен и задача решена!:).
OpenGOO, LunarPixel - спасибо и плюсики за помощь. Честно сказать, боюсь я Step перегружать. Кто может сказать - сколько проверок\действий можно загонять в Step без особого ущерба для производительности? А то у меня там на главном герое уже 6 и я начинаю в ужасе вибрировать А ведь еще и противник будет... Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Необходимо сделать, чтобы в конце пути происходило определенное событие (ну там смена спрайта, скачок объекта и пр.) Вроде бы все очевидно, но не работает либо вообще, либо событие происходит в начале пути, а не в конце. Пробовал следующим образом: Вариант 1 (никакой реакции)
Код
path_start(ogib,80,0,true); with Braven { if path_position=1 { Braven.vspeed=-12; } }
Вариант 2 (через попытку найти координаты последней точки пути и проверку попадания на эти координаты)
Код
path_start(ogib,80,0,true); nmb=path_get_number(ogib); koorx=path_get_point_x(ogib,nmb-1); koory=path_get_point_y(ogib,nmb-1); // пробовал и через просто nmb, не nmb-1 if Braven.x = koorx and Braven.y = koory { Braven.vspeed=-12; {
Вариант 3 (на основе сайта yoyo)
Код
path_start(ogib,80,0,true); if path_endaction=0 { Braven.vspeed=-12; {
В последнем варианте, разумеется, действие происходит, но в самом начале пути, а не в конце. Прошу помощи с проблемой. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Интернет, спасибо за наводку с 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. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Да, с lengthdir_x задержек нет, но и кнопки становятся неактивны, просто как чистые спрайты, нарисованные поверх объектов o_case.Может быть, есть другие варианты? Через id? Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Интернет, спасибо! Но именно так я и делал и все работало как часы, но это было еще ДО того, как решили делать игру с видами, а не в статике. ... Увидел сообщение - что значит в другом объекте? Я же создаю o_case в Create объекта inv. Поясните, пожалуйста. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Сообщение отредактировал Granner - Понедельник, 28 Марта 2016, 12:47
Подыму эту древнюю тему все с тем же замусоленным, но не менее актуальным вопросом (особенно в контексте 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. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Код перемещения из события E-key перенесен в степ объекта ГГ - и не работает. Результат аналогичный начальному. И там не нажатие кнопки E, а удержание, то есть может быть степ тут и не нужен? Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Там просто еще событие было для отпускания E-key: skill.go=false (при отпускании клавиши гравитация и вертскорость возвращались в норму). А насчет пихания в степ - попробую. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
GM 8 Pro Есть необходимость заставить объект двигаться по созданной траектории, в зависимости от расстояния до ключевого объекта. Например, ГГ (главный герой) огибает угол по ровной кривой, радиус которой зависит от расстояния между ГГ и точкой угла. Делал так: Е-key
Код
x2=skill.x; y2=skill.y; x1=krur.x; y1=krur.y; rad=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); ugol=degtorad(10); count=0; rep=19; for (i=1;i<rep; i+=1) { yn=(rad*sin(ugol*i))+y1; xn=(rad*cos(ugol*i))+x1; if xn>x2 {instance_create(xn, yn, kapl); count+=1;} } for (i=0;i<count; i+=1) { near=instance_nearest(skill.x,skill.y,kapl) if near.x>skill.x { if place_free(near.x+2,near.y) {skill.x=near.x; skill.y=near.y; } } }
Создание траектории и движение ГГ (объекта skill) работает так, как мне нужно, НО! При переносе в основной проект возникла проблема, ибо ГГ имеет гравитацию и вертикальную скорость. Решал эту проблему добавлением переменной skill.go=true; в вышеуказанный код. А в Step ГГ добавлял проверку кнопками:
Код
if skill.go is equal to true set the gravity to 0 in direction 0 set variable vspeed to 0
Получилось так - траектория создается нормально, при удерживании E-key ГГ зависает в воздухе (вроде как гравитация и вертикальна скорость отключены правильно), но не перемещается по траектории. Хотя видно, что в нужную сторону ГГ чуть-чуть смещается при каждом нажатии E-key. Что делать? Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Сообщение отредактировал Granner - Понедельник, 14 Марта 2016, 11:34