저는 Corona SDK로 타일 기반의 플랫폼 게임을 만들고 있습니다. Box2D 물리 엔진을 여러 가지 이유로 스크랩하기로 결정했고, 필자는 자체 물리 시스템을 만들려고 시도하고 있습니다. 다시 말하지만, 내 게임은 가능한 충돌자를 쉽게 수집 할 수 있도록 타일로 제작되었습니다. 또한 타일과 충돌해야하는 유일한 객체는 내 플레이어이기 때문에 더 쉽게 만들 수 있습니다.Corona SDK가 포함 된 Box2D가 아닌 물리학
중력과 속도가 작동하고 있으며 이제 충돌로 시작합니다. 나는 그것을하는 방법을 여러 사이트에서 읽었지만 결코 나를 위해 일하는 것 같습니다. 내가 본 과정은 이런 식입니다 :
- 하여 (타일 기반 게임 쉬운) 충돌 (AABB의 내 경우)
- 계산 침투 깊이의 X 및 Y 에 대한
- 확인 가능 colliders 찾기 어떤 이유에 대한 침투
- 가 침투 나는 아래 1-3 단계를 가지고
에 따라 속도를 조정 금액 만에 의해
나는 (간단한 AABB 충돌 검사로 발견 된 후) 플레이어와 충돌되는 각 타일이 함수를 호출 :
local resolveCollision = function(guy, tile)
local guyX, guyY, tileX, tileY = guy.x, guy.y, tile.x, tile.y
local guyHW, guyHH = guy.width * 0.5, guy.height * 0.5
local tileHW, tileHH = tile.width * 0.5, tile.height * 0.5
local distX = guyX - tileX
local minDistX = guyHW + tileHW
local absDistX = (distX < 0 and -distX) or distX
-- Calculate X penetration
local xPen = 0
if absDistX >= minDistX then
xPen = 0
else
xPen = (distX > 0 and minDistX - distX) or -minDistX - distX
end
local distY = guyY - tileY
local minDistY = guyHH + tileHH
local absDistY = (distY < 0 and -distY) or distY
-- Calculate Y penetration
local yPen = 0
if absDistY >= minDistY then
yPen = 0
else
yPen = (distY > 0 and minDistY - distY) or -minDistY - distY
end
local absXPen = (xPen < 0 and -xPen) or xPen
local absYPen = (yPen < 0 and -yPen) or yPen
-- Trim off larger penetration
if absXPen > absYPen and absYPen ~= 0 then
xPen = 0
guy.setYVel(0)
elseif absYPen > absXPen and absXPen ~= 0 then
yPen = 0
guy.setXVel(0)
end
guy:translate(xPen, yPen)
end
사람이 정확한 충돌 응답을하는 방법을 알고 있나요
?obj.setXVel(n) - Set X-velocity
obj.setYVel(n) - Set Y-velocity
obj.setVelocity(x, y) - Set both velocities at once
obj.xVel - Read-only, X-velocity value
obj.yVel - Read-only, Y-velocity value
'enterFrame' 이벤트 중에 충돌을 확인 하시겠습니까? –