Как исправить пересечение границ обьектов?

Рейтинг: 0Ответов: 1Опубликовано: 25.08.2023

Настройки области игры:

function love.conf(t)
    t.window.width = 400
    t.window.height = 700

есть основной код:

function love.load()
    -- Left wall
    w1 = {
        m = "fill",
        x = 0,
        y = 0,
        w = 50,
        h = love.graphics.getHeight()
    }

    -- Right wall
    w2 = {
        m = "fill",
        x = love.graphics.getWidth() - 50,
        y = 0,
        w = 50,
        h = love.graphics.getHeight()
    }

    stone = {
        m = "fill",
        x = 200,
        y = 0,
        w = 80,
        h = 20,
        speed = 600
    }
end

function love.update(dt)

    if stone.y > love.graphics.getHeight() then
        stone.y = 0
        stone.x = math.random(50,300)
        stone.w = math.random(25,100)
        stone.h = math.random(10,25)
    else
        stone.y = stone.y + (dt * stone.speed)
    end

end

И происходит пересечение правой границы правой стены, я думаю можно это решить следующим образом:

  1. Определить разницу пикселей между правой стеной и обьектом камень (stone)
  2. Если, широта (stone.w), больше чем результат из 1 пункта, то вычесть
  3. Результат из 2 пункта вычесть из stone.x
  4. Результат из 3 пункта присвоить к stone.x

Я думаю вот тогда пересечении не будет и вот как это пишу:

difference = stone.x - (love.graphics.getWidth() - 50)
if stone.w > difference then
    stone.x = stone.w - difference

Если я правильно думаю то я не знаю где эту проверку прописать :-D

Если не прав, то пожалуйста помогите исправить ошибку...

Ответы

▲ 1Принят

Нужно определить правильный диапазон x и генерировать случайное число из него

        stone.w = math.random(25,100)
        stone.x = math.random(50,w2.x - stone.w)