Anthem, ну прежде чем , что-то спросить я сначала поищу в инете , и если не нахожу или не понимаю то начинаю спрашивать. mp_grid_clear_all(id) - вполне действует ,но он очищает уж совсем все , а очистить определенную клетку не получается.
Добавлено (22.06.2013, 21:17) --------------------------------------------- mp_grid_clear_rectangle(global.cmbt_mpgrid,id.x-32,id.y-32,id.x+32,id.y+32) Чего-то я ступил , теперь все работает.
Есть 4 объекта и есть у них 4 числа и 4 переменные равные нулю. 1)Создается список 2)4 объекта добавляют в список эти 4 числа (3 от первого , 6 от второго ,12 от третьего , 2 от четвертого ) 3)Список сортируется по убыванию Как сделать так ,чтобы у объекта , чье число(12) стоит первым, изменил свою переменную с нуля на 1?
Anthem, тогда он утратит свои значения Враг находится на сетке , а сетка там еще и с ячейками ,и когда враг стоит на сетке он занимает ячейку , ячейка не должна загораться если на ней стоит враг , вот если он содержит такой код mp_grid_add_instances(global.cmbt_mpgrid,id,1) ячейка не горит , но тогда враг не может сделать никакого движения так , как он является препятствием для самого себя. Вот как теперь убрать препятствие, когда мне это будет нужно?
Добавлено (22.06.2013, 17:10) --------------------------------------------- Наверное опять нифига не понятно , вот картинка! После нажатия клавиши Z синий объект становится препятствием для красного ,при помощи этой строки: mp_grid_add_instances(global.cmbt_mpgrid,id,1) Вот как теперь сделать чтобы он перестал быть препятствием? .bmp_File.BMP
mp_grid_add_instances(global.cmbt_mpgrid,id,1) - создал препятствие на месте объекта у которого находится эта запись , а как его убрать используя скрипт?(Сделать врагов препятствиями пока они не ходят , а потом сделать их активными)
Препятствия: Они очень простые Объект может иметь любой размер и находится там , где захотите и ячейки под собой удалять необязательно(хотя удалить их стоит , чтобы они не светились , когда на них наводите мышкой).
GameMix, А как же объект 0 или он не учитывается? Я пока не очень понимаю массивы , поэтому написал примерный скрипт , как он должен выглядеть Не хватает только ожидания между переходами . Массив ,как я понял ,перебирает все сразу по очереди без ожидания. (Опс, выше, немного не так написал)
Гайдов по теме TBS почти нету , пришлось мучить исходник. После долгих пыток исходника боя героев ,пока не осталось только перемещение по сетке объекта , осталась еще одна проблема=( Как сделать чтобы сетка перемещения была точной, а не такой какая она там ?(влево идет на 3 шага а вправо на 4 O_o) Также не удается избавиться от родителя , а может это и не нужно.... Вот файл: heroescombat.gmk
Добавлено (15.06.2013, 21:08) --------------------------------------------- Исправил , оказалось нужно было ,чтобы ячейка была в центре ,а потом изменить немного скрипт и вуаля:
Создаем два пути без изменений: path_combat_check path_combat
Создаем 4 спрайта: Игрок в движении Игрок без движения Ячейка (Первый кадр - обычная , второй кадр- выбранная , третий кадр - недоступная - размер ячейки: 64 х 64) Препятствия(1-5 кадров препятствий в любом размере)
combat_tile - Объект ячейки
Step:
Код
show= false if mp_grid_path(global.cmbt_mpgrid,path_combat_check,x,y,global.currentcreature.x,global.currentcreature.y,true)=true and path_get_length(path_combat_check)<global.currentcreature.movement { show= true }
Draw:
Код
if global.currentcreature.status!= ""{exit} if point_distance(x,y,mouse_x,mouse_y)<32 and show= true {draw_sprite_ext(sprite_index,1,x,y,1,1,0,c_white,0.5) global.currenttile= id} if point_distance(x,y,mouse_x,mouse_y)<32 and show= false {draw_sprite_ext(sprite_index,2,x,y,1,1,0,c_white,0.5) global.currenttile= id} if show= false {exit;} if point_distance(x,y,global.currentcreature.x,global.currentcreature.y)<32 {image_index= 1}else{image_index= 0} draw_sprite_ext(sprite_index,-1,x,y,1,1,0,c_white,image_alpha)
global.dslist= ds_list_create() global.cmbt_mpgrid= mp_grid_create(0,0,floor((room_width)/64),floor((room_height)/64),64,64); global.changecreature= true with Player { ds_list_add(global.dslist,id) } global.currentcreature= ds_list_find_value(global.dslist,0) movement=global.creaturemovement[creature] status= "" move= true
{ instance_create(128+floor(random(640)),128+floor(random(640)),obstacle) //Создает препятствие в случайном месте }
Create:
Код
global.creaturemovement[1]= 240 //отвечает за дальность хода ( на данный момент стоит 240) spr_walk= arc_walk spr_stand= arc_stand sprite= arc_stand creature= 1 event_inherited()
Добавлено (19.06.2013, 19:47) --------------------------------------------- Теперь убрал все лишнее и осталось самое главное: Скрипт отвечает за отображение сетки вокруг игрока и перемещение по ней Создаем 2 объекта и 2 спрайта 1)Ячейка (64х64 с центром 32х32) 2)Игрок(64х64 с центром 32х32)
Игрок:
Create:
Код
global.cmbt_mpgrid= mp_grid_create(0,0,floor((room_width)/64),floor((room_height)/64),64,64); //Создаем сетку 64 на 64 по всей комнате move= true //Разрешаем игроку двигаться
Glob Left Button:
Код
if move= true {if global.currenttile.show= true and distance_to_object(global.currenttile)>10 //Если можно двигаться и если ячейка (Curenttile) отображена , а также мы не кликаем по самому игроку , то.. { if mp_grid_path(global.cmbt_mpgrid,path_combat,x+0,y+0,global.currenttile.x,global.currenttile.y,false)= true //Не очень понимаю эту строку { path_start(path_combat,10,0,false) //Начать путь move= false //Двигаться нельзя(Во время пути) intention=1 //Переменная (Можно ввести другую) global.Moving=1 //Глобальная переменная (Она отвечает за отображение ячеек во время хода - они будут скрыты) } } }
End Patg:
Код
if intention= 1 //Если наша переменная 1 { intention= 0 //То эта переменная становится 0 move= true //Можно опять двигаться global.Moving=0 //И снова показать все ячейки }
Ячейка: (Любое имя)
Step:
Код
show= false //Все ячейки скрыты всегда if mp_grid_path(global.cmbt_mpgrid,path_combat_check,x,y,Player.x,Player.y,true)=true and path_get_length(path_combat_check)< 250{ //Не понимаю эту строку , но число 250 отвечает за дальность отображаемых клеток , можно свободно его изменять show= true //Все ячейки на расстоянии 250 от игрока(Player) отображаются }
Draw:
Код
if global.Moving=1 {exit;} //Скрыть все ячейки(Не выполнять этот скрипт пока двигается игрок) if point_distance(x,y,mouse_x,mouse_y)<32 and show= true //При наведении на ячейку(Одну любую) , которая видна {draw_sprite_ext(sprite_index,1,x,y,1,1,0,c_white,0.5) global.currenttile= id} //Переходит на спрайт под номером 1 (Засвечивается) if point_distance(x,y,mouse_x,mouse_y)<32 and show= false //При наведении на ячейку(Одну любую) , которая не видна {draw_sprite_ext(sprite_index,2,x,y,1,1,0,c_white,0.5) global.currenttile= id} //Переходит на спрайт под номером 2 (Показывает наличие ячейки) if show= false {exit;} //Если ячейка скрыта , то ничего не происходит if point_distance(x,y,Player.x,Player.y)<32 //Если игрок в ячейке {image_index= 1}else{image_index= 0} //Переходит на спрайт под номером 1(Засвечивается) иначе на нулевой (Обычная ячейка) draw_sprite_ext(sprite_index,-1,x,y,1,1,0,c_white,image_alpha) //Отобразить спрайт
Сетка получилась неточная - например у нас 2 шага , но мы можем сделать 3 если например пойти вправо , вверх и вверх. Все неопознанные переменные равны 0 (Настройки GM) Все ячейки должны быть расставлены по комнате вплотную друг к другу , а игрок размещен на любой ячейке. Пример:heroescombat.gmk
Fade, O_1 Step; ..... global.x=1 if global.hod=1 { То он начинает ходить , а если экземпляров 10 ,то ходят все сразу 10 , а хотелось бы ,чтобы получилась очередь, используя один объект в нескольких экземплярах.} ....... O_2 Step: ....... if global.x=1 { global.hod=1 } ..........
Fade, Объясню понятнее: Есть объект , и он один , но на карте он находится в 10 экземплярах , и каждый одновременно выдает одну и ту же переменную(Так и должо быть),а дальше все действуют одновременно Как сделать так ,чтобы они ходили по очереди ,а не одновременно? Или Можно тогда делать разные объекты , но как сделать так: global.Enemy_Hod=1 global.Enemy_Phase_1=1 И другие... Стали: global.Enemy1_Hod=1 global.Enemy1_Phase_1=1 Enemy и Enemy1- это имена , и они сами вставлялись в переменные global.Имя_Hod=1 global.Имя_Phase_=1 (Наверное это фигня , а возможно невозможное) Просто изменять каждую переменную для каждого объекта - это просто писец какой труд.... Особенно если этих объектов 10-20-100-200
Ладно , хрен с ним если это невозможно или очень трудно (Но хотелеось бы узнать)=) Мне пришла в голову очень клевая и простая идея=)
Как решить проблему:? Одинаковые объекты выкидывают одинаковые переменные и совершают одинаковые действия одновременно, а должно быть так: одинаковые объекты выкидывают одинаковые переменные и совершают свои действия по очереди. Одинаковых объектов 10
2 персонажа набивают инициативу (Их может быть и больше) 1 персонаж набил 100 Курсор(Квадрат) сам направляется на персонажа , который сейчас будет ходить , ну потом он исчезает и персонаж ходит , а потом снова появляется и идет на следующего персонажа. Не удается его перемещение Сначала он идет по оси х потом по оси у (как бы по сетке,углом или напрямую) Получалось используя стандартные эти фигни справа , но потом я решил все переделать в скрипт и курсор начал тупо вылетать , ну по оси х он двигался а на ось у не переходил и не понятно почему... if (Cursor.x == Enemy.x) {} вот эта штука , мне показалось ,не срабатывает Это конечная точка движения , потом начинается движение вниз или вверх к объекту "Enemy" И потом срабатывает переменная , но это уже другая история
Добавлено (13.06.2013, 21:42) --------------------------------------------- Короче , я поставил авто-путь и все проблемы исчезли=) Чуть сложнее ,но фиг с ним..
Один объект(O_3) получает две одинаковых команды к нему от других объектов other.X от O_1 и other.X от O_2
К одному их них нужно отправить от O_3 сигнал (типа other.Y) к O_1 или к O_2 (По случайности) Потом O_1 (Пусть выпал O_1) отправляет сигнал other.Z к O_3 Потом O_3 отправляет сигнал other.Y к O_2 (Если бы выпал O_2 ,то тогда к O_1) (Это пример двух , а может получиться от 2 до бесконечности) Как это сделать? Не знаю ,как вбить такое в поиске , а то что вбил результатов не дало...
Не не, курсор это такой квадратик ,который автоматически наводится на врага или союзника , который сейчас будет ходить , а потом он исчезает и начинается ход.Курсор нужен для того , чтобы за ним следовала камера , а то будет какой-нибудь хаотичный бред , а так с ним должно получиться все очень слаженно и спокойно.