这是我在跳跃时对爱情的追逐。 看起来不错但是......
当我到达地面时它看起来像这样。
我发现它可能与img有一些关系,它没有填满整个方块。 所以它只是在碰撞方块之外。
这应该是它应该进入的广场,但由于我对编程很新,我无法弄清楚如何去做。 我一直在寻找解决方案,但找不到一台ATM。
这是我的 love.load
function love.load()
love.graphics.setBackgroundColor( 204, 255, 204 )
crazy = love.graphics.newImage("player.png")
pwidth = crazy.getWidth
pheight = crazy.getHeight
AdvTiledLoader.path = "maps/"
map = AdvTiledLoader.load("map.tmx")
map:setDrawRange(0, 0, map.width * map.tileWidth, map.height * map.tileHeight)
camera:setBounds(0, 0, map.width * map.tileWidth - love.graphics.getWidth(), map.height * map.tileHeight - love.graphics.getHeight() )
world = {
gravity = 1536,
ground = 512,
}
player = {
x = 256,
y = 256,
x_vel = 0,
y_vel = 0,
jump_vel = -1024,
speed = 512,
flySpeed = 700,
state = "",
h = 32,
w = 32,
standing = false,
}
function player:jump()
if self.standing then
self.y_vel = self.jump_vel
self.standing = false
end
end
function player:right()
self.x_vel = self.speed
end
function player:left()
self.x_vel = -1 * (self.speed)
end
function player:stop()
self.x_vel = 0
end
function player:collide(event)
if event == "floor" then
self.y_vel = 0
self.standing = true
end
if event == "cieling" then
self.y_vel = 0
end
end
我的爱。拉
function love.draw()
camera:set()
love.graphics.draw(crazy, player.x , player.y)
love.graphics.setColor( 255, 255, 255 )
map:draw()
camera:unset()
end
如果您需要查看我的碰撞或其他任何问题,我会将其粘贴在下方:)
我非常感谢您的帮助!
答案 0 :(得分:1)
最有可能发生的是你有x,y坐标作为精灵的中心。所以当地图遇到中心时它就会停止。
当您在地图前绘制精灵时,您只会看到地图未覆盖的位。
证明这一点的一种简单方法是在地图后绘制精灵,你应该在地图上看到整个精灵。
有几种方法可以解决这个问题。将碰撞留在原处并用ox = -width / 2,oy = -height / 2绘制精灵。
或者通过向碰撞点添加width / 2和height / 2来在sprite底部进行碰撞。
如果这没有用,那么我们可能需要碰撞逻辑。
答案 1 :(得分:0)
首先,我假设您希望pwidth / pheight为数字,而不是get函数。
pwidth = crazy.getWidth()
pheight = crazy.getHeight()
图像是从它的角落中抽出的,但我猜你的碰撞逻辑让击中框位于玩家的位置上。
您可以通过更改绘图功能的坐标进行补偿,也可以将原点偏移传递给图像。指定原点偏移的优点是,您可以相对于该原点旋转和缩放。
love.graphics.draw(crazy, player.x - pwidth/2 , player.y - pheight/2)
或
rotation, scalex, scaley = 0, 1, 1
love.graphics.draw(crazy, player.x, player.y, rotation, scalex, scaley, pwidth/2, pheight/2)