0

私は複数のオブジェクトと複数のコンテナーを持っています。私の計画では、任意のオブジェクトを任意のコンテナーにドロップできますが、コンテナーにオブジェクトがドロップされたら、コンテナーを占有し、それ以上のオブジェクトを許可しないようにします。isOcuppied 呼び出しなどはありますか。この例は見つかりません。

    local function onTouch( event )
local t = event.target

local phase = event.phase
if "began" == phase then
    -- Make target the top-most object
    local parent = t.parent
    parent:insert( t )
    display.getCurrentStage():setFocus( t )


    -- Spurious events can be sent to the target, e.g. the user presses 
    -- elsewhere on the screen and then moves the finger over the target.
    -- To prevent this, we add this flag. Only when it's true will "move"
    -- events be sent to the target.
    t.isFocus = true

    -- Store initial position
    t.x0 = event.x - t.x
    t.y0 = event.y - t.y
elseif t.isFocus then
    if "moved" == phase then
        -- Make object move (we subtract t.x0,t.y0 so that moves are
        -- relative to initial grab point, rather than object "snapping").
        t.xScale = 1.7
        t.yScale = 1.7
        t.x = event.x - t.x0
        t.y = event.y - t.y0
        --t1 = t1..t.value
    elseif "ended" == phase or "cancelled" == phase then
    for i = 1, #posX do
     if (((t.x >= ((sizeX/2) + posX[i] - ((2/3) * sizeX))) and (t.y >= ((sizeY/2) + posY - ((1/3) * sizeY))) and (t.x <= ((sizeX/2) + posX[i] + ((2/3) * sizeX))) and (t.y <= ((sizeY/2) + posY + ((1/3) * sizeY)))) or ((t.x >= ((sizeX/2) + posX[i] - ((1/3) * sizeX))) and (t.y >= ((sizeY/2) + posY - ((2/3) * sizeY))) and (t.x <= ((sizeX/2) + posX[i] + ((1/3) * sizeX))) and (t.y <= ((sizeY/2) + posY + ((2/3) * sizeY)))) or ((t.x >= ((sizeX/2) + posX[i] - ((1/2) * sizeX))) and (t.y >= ((sizeY/2) + posY - ((1/2) * sizeY))) and (t.x <= ((sizeX/2) + posX[i] + ((1/2) * sizeX))) and (t.y <= ((sizeY/2) + posY + ((1/2) * sizeY))))) then
        t.x, t.y = posX[i] + (sizeX/2), posY + (sizeY/2);
     elseif  (((t.x >= ((sizeX/2) + posX1[i] - ((2/3) * sizeX))) and (t.y >= ((sizeY/2) + posY1 - ((1/3) * sizeY))) and (t.x <= ((sizeX/2) + posX1[i] + ((2/3) * sizeX))) and (t.y <= ((sizeY/2) + posY1 + ((1/3) * sizeY)))) or ((t.x >= ((sizeX/2) + posX1[i] - ((1/3) * sizeX))) and (t.y >= ((sizeY/2) + posY1 - ((2/3) * sizeY))) and (t.x <= ((sizeX/2) + posX1[i] + ((1/3) * sizeX))) and (t.y <= ((sizeY/2) + posY1 + ((2/3) * sizeY)))) or ((t.x >= ((sizeX/2) + posX1[i] - ((1/2) * sizeX))) and (t.y >= ((sizeY/2) + posY1 - ((1/2) * sizeY))) and (t.x <= ((sizeX/2) + posX1[i] + ((1/2) * sizeX))) and (t.y <= ((sizeY/2) + posY1 + ((1/2) * sizeY))))) then
        t.x, t.y = posX1[i] + (sizeX/2), posY1 + (sizeY/2);
        t2[i] = t.value
        --t1 = t1..t.value
     -- elseif  (((t.x >= ((sizeX/2) + posX2 - ((2/3) * sizeX))) and (t.y >= ((sizeY/2) + posY2 - ((1/3) * sizeY))) and (t.x <= ((sizeX/2) + posX2 + ((2/3) * sizeX))) and (t.y <= ((sizeY/2) + posY2 + ((1/3) * sizeY)))) or ((t.x >= ((sizeX/2) + posX2 - ((1/3) * sizeX))) and (t.y >= ((sizeY/2) + posY2 - ((2/3) * sizeY))) and (t.x <= ((sizeX/2) + posX2 + ((1/3) * sizeX))) and (t.y <= ((sizeY/2) + posY2 + ((2/3) * sizeY)))) or ((t.x >= ((sizeX/2) + posX2 - ((1/2) * sizeX))) and (t.y >= ((sizeY/2) + posY2 - ((1/2) * sizeY))) and (t.x <= ((sizeX/2) + posX2 + ((1/2) * sizeX))) and (t.y <= ((sizeY/2) + posY2 + ((1/2) * sizeY))))) then
        -- t.x, t.y = posX2 + (sizeX/2), posY2 + (sizeY/2);
    end
    end
        t1 = t1..t.value
        t.xScale = 1
        t.yScale = 1
        --print(tile.label)
        display.getCurrentStage():setFocus( nil )
        t.isFocus = false
        --n = n + 1
        --value = " "
    end
end

これが私のコードです。また、各タイルに値が付けられています。たとえば、タイル a = "A" です。現在、タイルが移動するたびに文字列を追加するだけですが、文字列が必要な場合や、a を使用する場合があります。タイルがコンテナーに入れられたときにのみ追加されるテーブル。たとえば、1 つの文字が間違った場所にあり、それを正しい場所に移動した場合、2 回触れているため、最終的な文字列が間違っています。

4

1 に答える 1

1

コンテナに値を設定しない理由:

myContainer.isOccupied = false

次に、イベントハンドラーで、終了フェーズに到達するたびに、簡単にチェックを行うことができます:

if not myContainer.isOccupied then
    -- code to drop
    myContainer.isOccupied = true
end
于 2013-01-20T21:25:07.417 に答える