Если коллизии спрайт со спрайтом гуглятся на раз, то коллизии спрайта с определенными тайлами происходят по всем канонам «Чужие для Хищников».
И хотя тайлы и спрайты это по сути одно и тоже, но коллизии для спрайтов в качестве тайла естественно делаются по особенному.
Тут все ясно, есть координаты двух спрайтов, их размеры, калькулируем математику и вуаля.. на этот случай мне подошла функция
// find the distance between object 1 and object 2 // useful for a simple circular collision detection distance = function(x1, y1, x2, y2) local a = x2 - x1 local b = y2 - y1 local c = sqrt(pow(a, 2) + pow(b, 2)) return c end
Коллизия в тайлами делается так:
Надо знать важную вещь: Система координат для рисования спрайтов начинается от центра экрана, в то время система координат для работы с картой начинается с левого нижнего угла.
Соберем набор спрайтов которые будут солидами.
collideSprites = ["kust","baker","butchers","postoffice"]
в функции update будем вычислять коллизию, желательно перед установкой камеры.
// detect collision with tiles and back xy if it local currentTile = maps["map"].get(floor((player.x+768/2)/32),floor((player.y+512/2)/32)) for collideSprite in collideSprites if (currentTile.startsWith(collideSprite)) then player.x = oldx player.y = oldy end end
player.x / y — кооординаты плеера
В начало update надо еще положить:
local oldx = player.x local oldy = player.y local collideSprite = ""
Все ! Коллизии должны работать, но это при условии что размер вашей карты 24х16 а размер тайла 32х32, если что-то по другому то придется вам пересчитать..
т.е. 768 из кода это 24*32 , и аналогично для y
Мое впечатление от microStudio относительно pico-8:
Pico-8 mset mget частично упрощали работу со своими визуальными флагами
однако по сути это мало решает проблему, т.к. в результате разработчики Пики все равно потом руками создают таблицу коллиженых блоков. Ну а microStudio мне нравится своим простым АПИ и отсутствием тупых ограничений, но с другой стороны редактор microStudio убивает.. отсутствие элементырных хоткеев делает работу очень кровавой баней…