我把一个玩家画进了我的love2d,但它只填了1/4?

时间:2013-11-10 11:23:57

标签: lua love2d

这是我在跳跃时对爱情的追逐。 看起来不错但是......

This is my charecter in love2d

当我到达地面时它看起来像这样。

enter image description here

我发现它可能与img有一些关系,它没有填满整个方块。 所以它只是在碰撞方块之外。

enter image description here

这应该是它应该进入的广场,但由于我对编程很新,我无法弄清楚如何去做。 我一直在寻找解决方案,但找不到一台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

如果您需要查看我的碰撞或其他任何问题,我会将其粘贴在下方:)

我非常感谢您的帮助!

2 个答案:

答案 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)