А зачем восстанавливать покупки? Если они идут как расходники. Если игрок скажем купил 100 алмазов, истратил их то что после переустановки игры ему их опять выдавать? У меня есть на этот случай облачное сохранение в гугл плей и при смене телефона все что он покупал и не расходовал перейдет ну а если удалил или переписал облачное сохранение это уже проблемы пользователя. Единственное что он ни когда не потеряет так это покупку опции "без рекламы" которая привязывается к его гугл плей аккаунту.
Как только хочешь раз за пол года обновить свой проект в Google play, открываешь Game Maker и узнаешь что опять все нафиг изменилось... вот радостно встречаю версию 2.2.4
Нужен шаблон рабочих встроенных покупок IAP Billing
Вообщем у кого есть желание заработать пишите в лс или на почту otgs17@gmail.com
Сообщение отредактировал ss87ss - Суббота, 02 Ноября 2019, 02:11
Название игры: Hero's Bounty TD Жанр: Tower Defense Разрешение: HD+ Программа: Game Maker Studio Разработчик: otgs17 Версия: v1.0.7 Время разработки 8 месяцев уровень усталости 82%) Дата выхода: 14.02.2019
Описание: Великий чародей из другого мира уже подготовил круг призыва. Вам придется возглавить остатки некогда сильнейшей Империи людей и выживать сражаясь с ордами подземных монстров, нежити, демонов. Создайте непобедимую армию, приручить дракона, тренируйте отряд героев, обрушьте на врага каменный дождь, призовите в бой волшебного дракона, найдите легендарные артефакты, спасите мир от разрушения, и получите награду достойную настоящего героя.
StarLLaythe, записываем в событие рисование эту строчку и делаем со своим спайтом что душе угодно draw_sprite_ext(название_спрайта,порядковый_номер_спрайта,(координата_x),(координата_y),(размер_по_ширине),(размер_по_высоте),(градус_вращения),смешиваем_цвет(c_white),прозрачность(0-1)); //как стандартный пример draw_sprite_ext(ris_unit,0,x,y,1,1,0,c_white,1); //если надо развернуть то draw_sprite_ext(ris_unit,0,x,y,razvorot,1,0,c_white,1); //где razvorot=1(смотрит вправо) или -1(смотрит влево)
Shiep, зачем так усложнять создай объект например ob_kamera привяжи вид комнаты к нему и при нажатии 1 (установить на этот объекте) vid = 1 а в Begin Step пишем if(vid=1) { x = объект_1.x(нужные координаты x) y = объект_1.y(нужные координаты y) } if(vid=2) { x = объект_2.x(нужные координаты x) y = объект_2.y(нужные координаты y) } думаю это будет проще чем страдать с видами в комнате)
Сообщение отредактировал ss87ss - Понедельник, 03 Декабря 2018, 08:46
Shiep, тут все можно, и на одну проблему можно найти десяток решений только надо более точно понимать как вы хотите реализовать механику этого действия, Обьекта1.hp = Обьекта2.hp этот код сделает здоровье объекта 1 равным здоровью объекта 2 главное надо понять условие при котором будет происходить это действие
если я правильно понял вопрос, ты хочешь сделать отряд и соединить их хп в одну полосу, тогда в Create hp_otriad = 0; в Step первого добавляем hp_otriad = Обьекта1.hp+Обьекта2.hp и рисуем общую полоску жизни также у первого игрока draw_rectangle(x-x_lr,y-y_vv-y_vn,x-x_lr+(Обьекта1.hp+Обьекта2.hp)/(Обьекта1.max_hp+Обьекта2.max_hp)*(x_lr*2),y-y_vv+y_vn,0);
если не то, более конкретно уточни вопрос. и все таки, если действительно хочешь научиться делать любые игры, качай пачками примеры и изучай что там есть, форум слишком медленно)
//меняем для получения результата hp=555//здоровье вашего персонажа At=10;//сила атаки mt_At=90;пауза между ударами, чем больше цифра тем медленней бьет Rd=150;//радиус атаки //параметры размера здоровье меняем как хотим y_vv=50;//как высоко поднять вверх над юнитом x_lr=30;//ширина индикатора (лево(30+30право) y_vn=5;//толщина табл (вверх(5+5)вниз) //добавляем без изменений cvet_UN=$0021541d; tm_At=0; max_hp=hp;//здоровье вашего персонажа
//меняем для получения результата hp=555//здоровье вашего персонажа At=10;//сила атаки mt_At=90;пауза между ударами, чем больше цифра тем медленней бьет Rd=150;//радиус атаки //добавляем без изменений tm_At=0;
Step
//исчезает если закончилось здоровье if(hp<1) { instance_destroy(); } //постоянно перезаряжает удар if(tm_At>0) { tm_At+=-1; }
Global left button
//ищем мышкой цель при нажатии if(instance_number(ob_Vrag)>0) { //проверяет есть ли враг рядом с нашим войном if(collision_circle(x,y,Rd,ob_Vrag,false,true)) { //ищет ближайшего врага obv=instance_nearest(x,y,ob_Vrag); //наносит ему урон obv.hp+=-At; //уходит на перезарядку tm_At=mt_At; } }
назови юнит врага ob_Vrag Create
//меняем для получения результата hp=50//здоровье врага At=2;//сила атаки mt_At=30;пауза между ударами, чем больше цифра тем медленней бьет Rd=200;//радиус атаки //добавляем без изменений tm_At=0;
Step
//исчезает если закончилось здоровье if(hp<1) { instance_destroy(); } //постоянно перезаряжает удар if(tm_At>0) { tm_At+=-1; } else { //ищем цель if(instance_number(ob_Unit)>0) { //проверяет есть ли враг рядом с нашим воином if(collision_circle(x,y,Rd,ob_Unit,false,true)) { //ищет ближайшего врага obv=instance_nearest(x,y,ob_Unit); //наносит ему урон obv.hp+=-At; //уходит на перезарядку } tm_At=mt_At; }
Сообщение отредактировал ss87ss - Четверг, 25 Октября 2018, 17:18
я так понимаю прыжок и движение реализованы. (если нет, то надо писать - создайте платформер с нуля) начнем, когда объект прыгает он летит вверх, далее он начинает двигаться вниз. вот при движении вниз добавь переменную например летит вниз vniz_ok = 1; иначе в любом другом случае vniz_ok = 0;
if(vniz_ok = 1)and(kontr_stolk=1) { //тут можно и квадрат столкновения внизу нарисовать нужного размера //collision_rectangle(x-ширина_юнита,y,x+ширина_юнита,y+длинна_объект_вниз_к_ногам,объект_враг,false,true);//рисуем квадрат //проверяем есть ли столкновении линии которая смотрит вниз mm = collision_line(x,y,x,y+длинна_объект_вниз_к_ногам,объект_враг,false,true);//рисуем линию if(mm) { mm.Delete=1;//у врага пишем в Step if(Delete=1){instance_destroy()} kontr_stolk=0; } } //если столкновения сверху не было то проверит есть ли вообще столкновение if(kontr_stolk=1) { nn=collision_point(x,y,объект_враг,false,true); if(nn) { instance_destroy() } } }
должно работать как часы
Сообщение отредактировал ss87ss - Понедельник, 22 Октября 2018, 13:33