我需要限制图像移动LOVE2D。

我正在使用Love2d和Lua制作游戏。目前,我有一个人物,可以从左到右“滑动”。我想要限制他的移动,以便他不会掉出屏幕。我尝试使用if语句检测他的X是否大于800(因为我的窗口大小为800x600),但它最终会导致出现故障...这是代码。请帮帮我?

```function love.load() love.graphics.setBackgroundColor(92,217,255) person={} person.image=love.graphics.newImage('/sprites/spriteTest.png') person.x=400 person.y=303 person.speed=200 hills=love.graphics.newImage('/sprites/spriteHills.png') end function love.update(dt)

if (person.x>735) then

if (love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
    if (love.keyboard.isDown('left') or love.keyboard.isDown('a')) then
        person.x=person.x+(person.speed*dt)
    else
        person.x=person.x
    end

elseif (love.keyboard.isDown('left') or love.keyboard.isDown('a')) then
    if (love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
        person.x=person.x+(person.speed*dt)
    else
        person.x=person.x
    end

end

elseif (person.x<0) then

if (love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
    if (love.keyboard.isDown('left') or love.keyboard.isDown('a')) then
        person.x=person.x+(person.speed*dt)
    else
        person.x=person.x
    end

elseif (love.keyboard.isDown('left') or love.keyboard.isDown('a')) then
    if (love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
        person.x=person.x+(person.speed*dt)
    else
        person.x=person.x
    end

end

else

if (love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
    person.x=person.x+(person.speed*dt)
elseif (love.keyboard.isDown('left') or love.keyboard.isDown('a')) then
    person.x=person.x-(person.speed*dt)
end

end

end function love.draw() love.graphics.draw(hills, 0, 0) love.graphics.draw(person.image, person.x, person.y) end```

点赞
用户42188
用户42188

你认为如何修改这个 update 方法:

function love.update(dt)
  if ((love.keyboard.isDown('right') or love.keyboard.isDown('d')) and person.x < 735) then
    person.x = person.x + person.speed * dt
  end
  if ((love.keyboard.isDown('left') or love.keyboard.isDown('a')) and person.x > 0) then
    person.x = person.x - person.speed * dt
  end
end

基本上你想要说的是如果按下的是移动键 并且 对象可以移动 就移动。

另外我建议以精灵底部中心点作为旋转点。如果你有一个 64 × 64 的精灵,那么你需要使用 ox = 32oy = 64(原点偏移)。

2013-02-09 07:05:31
用户2036003
用户2036003

我找到了答案。以下是代码

function love.update(dt)

if (player.x>735) then

    if (love.keyboard.isDown('left') or love.keyboard.isDown('a') or love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
        player.x=player.x-(player.speed*dt)
    end

elseif (player.x<-10) then

    if (love.keyboard.isDown('left') or love.keyboard.isDown('a') or love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
        player.x=player.x+(player.speed*dt)
    end

else

    if (love.keyboard.isDown('right') or love.keyboard.isDown('d')) then
        person.x=person.x+(person.speed*dt)
    elseif (love.keyboard.isDown('left') or love.keyboard.isDown('a')) then
        person.x=person.x-(person.speed*dt)
    end

end

end

它可能看起来似乎不能解决问题,但对我来说它解决了问题。我刚刚设置了它,如果他到达边缘,它将不允许他进一步前进。

2013-02-09 21:14:29