0

コロナを使ってモバイルゲームを開発する方法を独学で学んでいますが (これまでのところうまくいっています!)、問題が発生しました。男がコインにぶつかるかどうかをチェックする機能があります。もしそうなら、コインは取り除かれます:

function hitCoin()
--Checks for every item in object to see if it collides with the guy
for o = 1, collectables.numChildren, 1 do       
    local left = guy.contentBounds.xMin <= collectables[o].contentBounds.xMin and guy.contentBounds.xMax >= collectables[o].contentBounds.xMin
    local right = guy.contentBounds.xMin >= collectables[o].contentBounds.xMin and guy.contentBounds.xMin <= collectables[o].contentBounds.xMax
    local up = guy.contentBounds.yMin <= collectables[o].contentBounds.yMin and guy.contentBounds.yMax >= collectables[o].contentBounds.yMin
    local down = guy.contentBounds.yMin >= collectables[o].contentBounds.yMin and guy.contentBounds.yMin <= collectables[o].contentBounds.yMax

    --If there is a collision, we remove the object from the object group
    if (left or right) and (up or down) then
        collectables[o]:removeSelf()
        return true;
    end
end

return false;
end

簡単です。ただし、弾丸が敵と衝突するかどうかを確認するほぼ同じ関数もあります。参照によって表示グループ内のオブジェクトを渡すことは可能ですか? 理想的には、次の関数は、ガイとコインの衝突と弾丸と敵の衝突をチェックできます。

function onCollisionRemoveSecondObject(obj1, obj2)
    local left = obj1.contentBounds.xMin <= obj2.contentBounds.xMin and obj1.contentBounds.xMax >= obj2.contentBounds.xMin
    local right = obj1.contentBounds.xMin >= obj2.contentBounds.xMin and obj1.contentBounds.xMin <= obj2.contentBounds.xMax
    local up = obj1.contentBounds.yMin <= obj2.contentBounds.yMin and obj1.contentBounds.yMax >= obj2.contentBounds.yMin
    local down = obj1.contentBounds.yMin >= obj2.contentBounds.yMin and obj1.contentBounds.yMin <= obj2.contentBounds.yMax

    if (left or right) and (up or down) then
        obj2.isAlive = false
        return true;
    end

return false;
end

for i = 1, collectables.numChildren, 1 do
    onCollisionRemoveSecondObject(guy, collectables[i])
end

for a = 1, bullets.numChildre, 1 do     
    for b = 1, enemies.numChildren, 1 do        
        onCollisionRemoveSecondObject(bullets[a], enemies[b])
    end
end

アドバイスや正しい方向へのナッジは大歓迎です!

4

2 に答える 2

0

私はこの関数に関するコーディングを開始し、実際に機能するようにしました (やや不注意でした)。そして、その厄介な小さなタイプミスも役に立ちませんでした;P これを読んだ人へのボーナスとして、グループ内の各オブジェクトを循環し、「isAlive」パラメーターが false の場合にそれを削除する関数も追加しました。それは私のゲームで役立つので、皆さんにも役立つことを願っています!

function removeObject(object) 
for i = 1, object.numChildren, 1 do
    if object[i].isAlive == false then
        object[i]:removeSelf();
        removeObject(object)
        break;
    end
end
end
于 2013-11-08T03:55:59.213 に答える