Fixes
This commit is contained in:
parent
ac60c09612
commit
71e3f6157e
18
aabb.p8
18
aabb.p8
|
@ -3,7 +3,7 @@ version 42
|
|||
__lua__
|
||||
local player = {
|
||||
-- position
|
||||
x = 64,
|
||||
x = 67,
|
||||
y = 80,
|
||||
|
||||
-- velocity
|
||||
|
@ -15,23 +15,23 @@ local player = {
|
|||
self.dy = self.dy + 1
|
||||
self.dy = min(self.dy, 10)
|
||||
|
||||
-- collision right
|
||||
if self.dx > 0 and (isColliding(self.x + self.dx + 7, self.y) or isColliding(self.x + self.dx + 7, self.y + 7)) then
|
||||
self.dx = 0
|
||||
end
|
||||
-- collision left
|
||||
if self.dx < 0 and (isColliding(self.x + self.dx, self.y) or isColliding(self.x + self.dx, self.y + 7)) then
|
||||
self.dx = 0
|
||||
end
|
||||
|
||||
-- collision down
|
||||
if self.dy > 0 and (isColliding(self.x, self.y + self.dy + 7) or isColliding(self.x + 7, self.y + self.dy + 7)) then
|
||||
self.dy = 0
|
||||
-- collision right
|
||||
if self.dx > 0 and (isColliding(self.x + self.dx + 7, self.y) or isColliding(self.x + self.dx + 7, self.y + 7)) then
|
||||
self.dx = 0
|
||||
end
|
||||
|
||||
-- collision up
|
||||
if self.dy < 0 and (isColliding(self.x, self.y + self.dy) or isColliding(self.x + 7, self.y + self.dy)) then
|
||||
self.dy = 0
|
||||
end
|
||||
-- collision down
|
||||
if self.dy > 0 and (isColliding(self.x, self.y + self.dy + 7) or isColliding(self.x + 7, self.y + self.dy + 7)) then
|
||||
self.dy = 0
|
||||
end
|
||||
|
||||
-- apply movement
|
||||
self.x = self.x + self.dx
|
||||
|
|
47
aabb2.p8
47
aabb2.p8
|
@ -3,7 +3,7 @@ version 42
|
|||
__lua__
|
||||
local player = {
|
||||
-- position
|
||||
x = 64,
|
||||
x = 67,
|
||||
y = 50,
|
||||
|
||||
-- velocity
|
||||
|
@ -16,20 +16,17 @@ local player = {
|
|||
-- cap the falling speed to 7px/frame
|
||||
self.dy = min(self.dy, 7)
|
||||
|
||||
-- collision right
|
||||
if self.dx > 0 and (isColliding(self.x + self.dx + 7, self.y) or isColliding(self.x + self.dx + 7, self.y + 7)) then
|
||||
self.dx = 0
|
||||
end
|
||||
-- collision left
|
||||
if self.dx < 0 and (isColliding(self.x + self.dx, self.y) or isColliding(self.x + self.dx, self.y + 7)) then
|
||||
-- move the player against the left wall
|
||||
self.x = self.x % 8 == 0 and self.x or flr(self.x / 8) * 8
|
||||
self.dx = 0
|
||||
end
|
||||
|
||||
-- collision down
|
||||
if self.dy > 0 and (isColliding(self.x, self.y + self.dy + 7) or isColliding(self.x + 7, self.y + self.dy + 7)) then
|
||||
-- clip the player to the nearest block down
|
||||
self.y = self.y % 8 == 0 and self.y or flr((self.y + 8) / 8) * 8
|
||||
self.dy = 0
|
||||
-- collision right
|
||||
if self.dx > 0 and (isColliding(self.x + self.dx + 7, self.y) or isColliding(self.x + self.dx + 7, self.y + 7)) then
|
||||
-- move the player against the right wall
|
||||
self.x = self.x % 8 == 0 and self.x or flr((self.x + 8) / 8) * 8
|
||||
self.dx = 0
|
||||
end
|
||||
-- collision up
|
||||
if self.dy < 0 and (isColliding(self.x, self.y + self.dy) or isColliding(self.x + 7, self.y + self.dy)) then
|
||||
|
@ -37,6 +34,22 @@ local player = {
|
|||
self.y = self.y % 8 == 0 and self.y or flr(self.y / 8) * 8
|
||||
self.dy = 0
|
||||
end
|
||||
-- collision down
|
||||
if self.dy > 0 and (isColliding(self.x, self.y + self.dy + 7) or isColliding(self.x + 7, self.y + self.dy + 7)) then
|
||||
-- align the player with the nearest block down
|
||||
self.y = self.y % 8 == 0 and self.y or flr((self.y + 8) / 8) * 8
|
||||
self.dy = 0
|
||||
end
|
||||
|
||||
-- diagonals
|
||||
if self.dx ~= 0 and self.dy ~= 0 and isCollidingRect(self.x + self.dx, self.y + self.dy) then
|
||||
self.dx = 0
|
||||
self.dy = 0
|
||||
-- align with the current cell
|
||||
self.x = flr(self.x / 8) * 8
|
||||
self.y = flr(self.y / 8) * 8
|
||||
printh(self.x .. ", " .. self.y)
|
||||
end
|
||||
|
||||
-- apply movement
|
||||
self.x = self.x + self.dx
|
||||
|
@ -52,6 +65,14 @@ function isColliding(x, y)
|
|||
return fget(mget(flr(x / 8), flr(y / 8)), 0)
|
||||
end
|
||||
|
||||
-- same as isColliding(), but will check the 4 corners at once
|
||||
function isCollidingRect(x, y)
|
||||
return isColliding(x, y)
|
||||
or isColliding(x + 7, y)
|
||||
or isColliding(x, y + 7)
|
||||
or isColliding(x + 7, y + 7)
|
||||
end
|
||||
|
||||
function getBlockCoords(x, y)
|
||||
return flr(x / 8) * 8, flr(y / 8) * 8
|
||||
end
|
||||
|
@ -62,12 +83,12 @@ end
|
|||
function _update()
|
||||
--left
|
||||
if btn(0) then
|
||||
player.dx = -1
|
||||
player.dx = -2
|
||||
end
|
||||
|
||||
-- right
|
||||
if btn(1) then
|
||||
player.dx = 1
|
||||
player.dx = 2
|
||||
end
|
||||
|
||||
-- Up
|
||||
|
|
Loading…
Reference in New Issue
Block a user