0

Lua とコロナのポイント アンド クリック ゲームの投資システムについて多くの研究を行ってきました。この例に出くわしました。これに似たようなことをしていますが、動的在庫システムが必要です。つまり、4 つのスロットがあり、それらがすべて埋まっている場合、5 番目のオブジェクトは次のスロットに移動するので、右に矢印が表示され、クリックして次のページに移動できます。5 つの項目があり、4 つのスロットがあるとします。5 番目のスロットは次のページになります。3 番目のアイテムを使用すると、3 番目のスロットが空になるので、4 番目と 5 番目のアイテムを自動的に 3 番目と 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
4

2 に答える 2

3
local itemImages =
{
    [0] = display.newImage('MISSING_ITEM_IMAGE.PNG'),
    [3] = display.newImage('hammer.png'),
    [7] = display.newImage('metalpipe.png'),
}

function getImageForItem(itemId)
    return itemImages[itemId] or itemImages[0]
end

local myInventoryBag={}
local maxItems = 10 -- change this to how many you want
local visibleItems = 4 -- show this many items at a time (with arrows to scroll to others)

-- show inventory items at index [first,last]
local function displayInventoryItems(first,last)
    local x = 0 -- first item goes here
    local y = 0 -- top of inventory row
    for i=first,last do
        image = getImageForItem(myInventoryBag[i])
        image.x = x
        image.y = y
        x = x + image.width
    end
end

-- show inventory items on a given "page"
local function displayInventoryPage(page)
    page = page or 1 -- default to showing the first page
    if page > maxItems then
        -- error! handle me!
    end
    local first = (page - 1) * visibleItems + 1
    local last = first + visibleItems - 1
    displayInventoryItems(first, last)
end

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

displayInventoryPage(1)
displayInventoryPage(2)
于 2012-09-27T21:57:07.137 に答える
2

基本的には、すべてのインベントリスロットをループして、スロットが空かどうかを確認します。空の場合は、そのスロットにアイテムを配置し、ループを停止します。そうでない場合は、次のものに進みます。

インベントリからアイテムを削除したい場合は、を呼び出すだけtable.delete(myInventoryBag, slotToEmpty)です。

ページの場合、単純にpage変数があります。インベントリスロットを描画するときは、スロットからにループするだけ(page-1) * 4 + 1ですpage * 4

(編集:コードがはるかに読みやすくなるため、適切なインデントを使用することを強くお勧めします。)

于 2012-09-27T07:51:04.610 に答える