September 7, 2022

Коллизии в microStudio

Если коллизии спрайт со спрайтом гуглятся на раз, то коллизии спрайта с определенными тайлами происходят по всем канонам "Чужие для Хищников".

И хотя тайлы и спрайты это по сути одно и тоже, но коллизии для спрайтов в качестве тайла естественно делаются по особенному.

Коллизия спрайт-спрайт

Тут все ясно, есть координаты двух спрайтов, их размеры, калькулируем математику и вуаля.. на этот случай мне подошла функция

	// 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 убивает.. отсутствие элементырных хоткеев делает работу очень кровавой баней...