Гайдов по теме 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
Препятствия: Они очень простые Объект может иметь любой размер и находится там , где захотите и ячейки под собой удалять необязательно(хотя удалить их стоит , чтобы они не светились , когда на них наводите мышкой).