Никак не могу прикинуть как в Love2D с Box2D нормально сделать физический персонаж.
Просто я хочу, что бы перст был как перс для платформера, но с учетом физики.
Проблема в том, что:
1. Он скользит
2. Не падает кирпичом с обрыва, а по дуге, так как скорость горизонтальная остается.
3. Толкает физ объекты как сверхсильный.
Более-менее рабочий код:
function playerRayCast(f,x,y,nx,ny,d)
player.ground=0
if(d<0.1) then --земля
player.ground=1
end
return 0
end
function updPlayer()
local touch = love.touch
local imx=0
local jump = 0
local px = player.body:getX()
local py = player.body:getY()
--player.ground = 0
world:rayCast(px-player.w/2,py+player.h/2, px-player.w/2, py+player.h, playerRayCast)
world:rayCast(px+player.w/2,py+player.h/2, px+player.w/2, py+player.h, playerRayCast)
if(touch) then
tc = touch.getTouchCount()
if(tc>0 and player.ground==1 ) then
for i=1, tc do
local i,x,y,p = touch.getTouch(i)
y = y*SCR_H
imx = -2*(0.5 - x)
if(y>100 and y<200 ) then
jump=1
end
end
end
end
kid=love.keyboard.isDown
if(player.ground==1) then
if(kid("left"))then imx=-1 end
if(kid("right"))then imx=1 end
if(kid("up"))then jump = 1 end
end
lx, ly = player.body:getLinearVelocity() --хз как парабалический прыжок сделать
if(imx~=0 or jump==1) then
player.body:setLinearVelocity(player.speed*imx,ly-player.speed*1.5*jump)
end
end
Проблема в том, что в Box2D под Love только мировой рейкаст для всех объектов, из-за этого как-то криво перехватываться он.
Так же порой вертикальная скорость не равна нулю, а дрыгается вокруг него.
Так же в Box2d нету капсуля: прямоугольник, круг и полигон, - все для коллайда.
Трудно адаптироваться с Юнити.
Можно конечно и кинематично сделать все, но тогда не так 'круто'.