0

这是我在love2d中跳跃时的角色。看起来不错但是..

这是我在love2d中的角色

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

在此处输入图像描述

我发现它可能与 img 有关,它没有填满整个正方形。所以它简直就是冲出方阵。

在此处输入图像描述

那是它应该在的广场,但是由于我对编程很陌生,所以我不知道该怎么做。我一直在寻找解决方案,但找不到一台 ATM。

这是我的爱.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

还有我的爱.draw

function love.draw()
camera:set()

love.graphics.draw(crazy, player.x , player.y)


love.graphics.setColor( 255, 255, 255 )
map:draw()

camera:unset()
end

如果您需要查看我的碰撞或其他任何内容,请询问,我将其粘贴在下面:)

我真的很感谢你的帮助谢谢!

4

2 回答 2

1

最有可能发生的是您将 x,y 坐标作为精灵的中心。所以当地图遇到中心时它会停止。

当您在地图之前绘制精灵时,您只会看到地图未覆盖的位。

证明这一点的一种简单方法是在地图之后绘制精灵,您应该在地图上看到整个精灵。

有几种方法可以解决这个问题。要么将碰撞留在原处,然后使用 ox=-width/2,oy=-height/2 绘制精灵。

或者,通过将 width/2 和 height/2 添加到碰撞点,在精灵底部发生碰撞。

如果这没有帮助,那么我们可能需要碰撞逻辑。

于 2013-11-10T20:08:14.427 回答
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)
于 2015-03-09T10:12:49.660 回答