Иногда полезно выкладывать свои ляпсусы на общее обозрение. Увидел, что сохранение идет ДО изменения переменной, отвечающей за запуск обновления. Поменял местами сохрание и проверку файла - и все заработало. Не знаю, то ли это глюк, то ли так и надо. Пока счастлив... Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Есть системы частиц для звезд и дыма. Они работают нормально, корректно уничтожаются при переходе в другую комнату, однако вся эта идиллия заканчивается на моменте, когда игроку приспичит поставить игру на паузу. Частицы благополучно скрываются, однако при снятии паузы (возвращении из главного меню) все эффекты частиц отсутствуют. Как я пытался делать после изучения справки: Выход в главное меню (моя пауза)
Код
game_save("savegame.sbg"); if instance_exists(stars) // объект, где прописано создание типов, системы и генератора частиц "звезды" { stars.status=0; part_system_automatic_update(stars.ps,0) part_system_automatic_draw(stars.ps,0) } room_goto(contin);
. Возвращение в игру из главного меню - через game_load("savegame.sbg"). Включение обновления частиц через Draw объекта key_particles
Код
draw_sprite(key_part,-1,256,256); if instance_exists(stars) { if stars.status=0 { part_system_update(stars.ps); part_system_drawit(stars.ps); stars.status=1; } }
И вот тут результат - нулевой. Объекты key_paricles и stars находятся на месте, а частиц уже нет. Также не совсем понимаю функции part_system_drawit(). Если она должна прописываться в рисовании какого либо объекта, не будет ли тут конфликта между изначально автоматическим обновлением частиц, ведь объект - также изначально в комнате, а делать его краткосрочным после перехода из главного меню и удалять у меня не получилось. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Спасибо, Minskii. Плюсик в посылке. Справку я, конечно, читаю, гражданин администратор. Но то что масштабирование размеров командой image_yscale и обращение спрайта связаны между собой - увы не было понятно.
P.S. И зачем тогда форум сделали? Посылали бы сразу в ... справку. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Есть ли возможность в GM8 программно обратить спрайт по горизонтали или вертикали? Речь идет не о вращении спрайта через image_angle, а именно об обращении, как во встроенном в ГМ редакторе графики. Делаю платформер, накапливается много графики, анимации, поэтому проблема экономии ресурсов стоит достаточно остро. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Возможно, есть такой вариант (алгоритмически, без кода): 1. При уничтожении сегмента ищем ближайший сегмент сверху, с координатами -y. Если он есть, меняем ему спрайт на спрайт с изломом (чтобы покрасивее было). 2. При этом же создаем невидимый объект высотой с сосульку, чьи координаты и размер позволяют перекрыть сегменты, находящиеся ниже уничтожаемого. Время существования этого объекта (аларм) - 1 тик шага. 3. В событии столкновения любого сегмента с этим невидимым объектом нужно заложить движение вниз. При достижении пределов комнаты уничтожаем сегмент и добавляем блекджек, разбрызгивающиеся лужи или нечто подобное. Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
Спасибо! За оперативность - плюсик С кодом - буду думать, как применить к своим условиям, ибо подобных анимаций у меня много. Лучше - быть, чем - казаться. 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