Как разработать систему динамического инвентаря для игры «укажи и щелкни»?

Я провел много исследований по системе инвентаризации для игры «укажи и щелкни» в Lua и Corona. Я наткнулся на этот пример, я делаю что-то похожее на это, но мне нужна система динамического инвентаря. Я имею в виду, что если у меня есть 4 слота, и все они заполнены, пятый объект переходит к следующему слоту, поэтому справа будет стрелка, чтобы я мог щелкнуть и перейти на следующую страницу. И представьте, что есть 5 предметов, и у меня есть 4 слота, пятый слот будет на следующей странице. Я использую третий элемент, и тогда третий слот будет пуст, поэтому я хочу, чтобы четвертый и пятый элементы автоматически перемещались обратно в третий и четвертый слоты. Мне трудно в этом разобраться. Спасибо за аванс.

local myInventoryBag={}
local maxItems = 10 -- change this to how many you want

myInventoryBag[5]=3 -- Hammer for instance
myInventoryBag[4]=7 -- A metal Pipe for instance

local function getImageForItem(thisItem)
    local itemNumber = tonumber(thisItem)
    local theImage=""

    if itemNumber==3 then
        theImage="hammer.png"
    elseif itemNumber == 7 then
        theImage="metalpipe.png"
    elseif ... -- for other options
        ...
    else
        return nil
    end

    local image = display.newImage(theImage)
    return image
end

local function displayItems()
    local i
    for i=1,#myInventoryBag do
        local x = 0  -- calculate based on the i
        local y = 0 --  calculate based on the i

        local image = getImageForItem(myInventoryBag[i])

        if image==nil then return end

        image.setReferencePoint(display.TopLeftReferencePoint)
        image.x = x
        image.y = y
    end
end

person Bo Dash    schedule 27.09.2012    source источник


Ответы (2)


По сути, вы должны перебрать все слоты инвентаря и проверить, пуст ли слот. Если он пуст, поместите предмет в этот слот и остановите цикл. Если это не так, перейдите к следующему.

Если вы хотите удалить предмет из инвентаря, вы можете просто позвонить table.delete(myInventoryBag, slotToEmpty).

Для страниц у вас будет просто переменная page. При рисовании слотов инвентаря просто двигайтесь от слотов (page-1) * 4 + 1 к page * 4.

(Редактировать: я настоятельно рекомендую использовать правильный отступ, так как это сделает код намного более читабельным.)

person Darkwater    schedule 27.09.2012
comment
Я немного запутался в варах страниц и числах, которые вы использовали. - person Bo Dash; 27.09.2012
comment
Я думаю, он имеет в виду иметь переменную для отслеживания страницы, на которой находится игрок, а затем использовать ее для проверки всех слотов. - person Jutanium; 28.09.2012

person    schedule
comment
Спасибо за помощь. После того, как я много осмотрелся и поиграл, мне кажется, что есть много способов создать систему динамического инвентаря. Поскольку я занимаюсь программированием уже 7 месяцев и все еще учусь; иногда я склонен думать, должен быть только один путь или решение проблемы. - person Bo Dash; 28.09.2012