Мне нужно ограничить движение изображения 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

person hexagonest    schedule 08.02.2013    source источник


Ответы (2)


Как насчет этого 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

Обычно вы хотите сказать if a movement key is down и the object can move, а затем двигайтесь.

Также я бы использовал центр нижнего края спрайта в качестве точки поворота. Тогда вам нужно будет использовать ox = 32 и ox = 64 (смещение исходной точки), если у вас есть спрайт 64 x 64.

person muhuk    schedule 09.02.2013
comment
Спасибо за ответ, но вчера поздно вечером я нашла свой путь. Я собираюсь ответить на свой вопрос прямо сейчас. Спасибо за попытку :) - person hexagonest; 10.02.2013

Я нашел ответ. Вот код

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

Может показаться, что это не исправит, но это исправило для меня. Я просто установил, что если он на грани, это не позволит ему пойти дальше.

person hexagonest    schedule 09.02.2013