1

私は自分の問題についてできるだけ簡潔にしようとします。

まず、ファイルは次のとおりです。

block.lua
base.lua
main.lua

block.lua でブロックを作成し、衝突検出とクリーンアップ コードを追加します。base.lua で、4 列 10 行からなるベースを作成します。全部で40ブロック。main.lua では、base.class から作成された 4 つのベースを作成します。

ゲームが始まると、すべてが正常に機能します。基地を取り除き、レベル 2 で再度呼び出します。それらは自分自身を正常に作成しますが、敵が再び破壊され、基地が再建されると、次のメッセージが表示されます。

array index 1 is beyond array bounds:1..1 

-- ずっと --

array index 800 is beyond array bounds:1..159 

次に、基地を作成し、敵が破壊されるまで続行し、次の時点から同じことを繰り返します。

array index 800 is beyond array bounds:1..159 

-- ずっと --

array index 4000 is beyond array bounds:1..159

端末は block.lua の 23 行目を指しています

blockGroup:insert(blockNum,self.block)

今、私はクラスで何も間違っているのを見ることができません。何時間も見てグーグルで検索しましたが、すべて役に立ちませんでした。ここで私を導いてくださる手助けをいただければ幸いです。「クリーンアップ」などを書き直そうとしましたが、喜びはありません。そこにコメントアウトしたビットをいくつか残し、無関係なものをいくつか削除しました。関連するコードの下に投稿します。

--MAIN.LUA--

function gameOver()
  Runtime:removeEventListener("enterFrame", onEnterFrame)
  Runtime:removeEventListener("enterFrame", movePlayer)

  layers:removeSelf()
  layers = nil

  enemyCount = 0

   for i = 1,#allEnemys do
     timer.cancel(allEnemys[i].clock)
     Runtime:removeEventListener( "enterFrame", allEnemys[i] )
     display.remove(allEnemys[i].image)
     allEnemys[i].image=nil
   end
     allEnemys=nil

cleanupBlocks()
   end
----------------------------------------------------------------------
              -- LEVEL UP --
 ----------------------------------------------------------------------
function levelUp(level)
enemyCount = 0

local enemys = require("modules.enemy")
    if allEnemys ~= nil then
      for i = 1,#allEnemys do
           timer.cancel(allEnemys[i].clock)
           Runtime:removeEventListener( "enterFrame", allEnemys[i] )
           display.remove(allEnemys[i].image)
           allEnemys[i].image=nil
      end
    end
           allEnemys=nil
 cleanupBlocks()
 levels()

 end
----------------------------------------------------------------------
              -- LEVELS --
----------------------------------------------------------------------
function levels(level)

function createInvader(x, y, row)
  for j = 1, 2 do
    for i = 1, 2 do
      if allEnemys == nil then
       allEnemys = {}
      else
       enemysCount=#allEnemys
      end
      allEnemys[#allEnemys + 1] = enemys:new()
      allEnemys[#allEnemys ]:init(i * 60, j * 70 + 70,j) 
      allEnemys[#allEnemys ]:start()
    end
  end
end
createInvader()

--[[function createBases1()

local base = require("modules.base")
  for i = 1, 4 do
    base:new()
    base:init(i * 180 - 130, 850)
  end
end  ]]--

createBases()
end

--BLOCK.LUA--

local block = {}
local block_mt = { __index = block}
local scene = scene
local blockGroup = display.newGroup()
local blockNum = 0


function block:new() -- constructor
local group = {}
return setmetatable( group, block_mt )
end

function block:init(xloc,yloc) --initializer
-- Create attributes

self.block = display.newRect( xloc,yloc,10,10)
self.block:setFillColor ( 2, 255, 14  )

blockNum = blockNum + 1
blockGroup:insert(blockNum,self.block)

local blockCollisionFilter = { categoryBits = 128, maskBits = 387}
physics.addBody( self.block,  "static", {filter = blockCollisionFilter})
self.count = 1

end
function cleanupBlocks()

--[[ print(blockNum, blockGroup.numChildren)
for i=1,blockGroup.numChildren do
blockGroup[1]:removeSelf()
blockGroup[1] = nil
end  ]]--
print(blockNum, blockGroup.numChildren)
while blockGroup.numChildren>0 do

  display.remove(blockGroup[1])
  blockGroup[1]=nil
end

end

function block:start()
---  Create Listeneres
 self.block:addEventListener( "collision", self )
 scene:addEventListener('base_block_event', self)
end

return block

--BASE.LUA--

local base = {}
local base_mt = { __index = base}
local scene = scene

local block = require("modules.block")

function base:new() -- constructor
local group = {}
return setmetatable( group, base_mt )
end

function base:init(xloc, yloc) --initializer
-- Create attributes
local base

for j = 1, 4 do
    for i = 1, 10 do
        base = block:new()
        base:init(xloc+i * 10,yloc+j * 10)
        base:start()

    end
end

end

return base
4

1 に答える 1

0

私はあなたが使用するのを見ます

blockNum = blockNum + 1
blockGroup:insert(blockNum,self.block)

使ってみて

blockGroup:insert(self.block)

それでもエラーが発生するかどうかを確認するだけです。

于 2013-05-05T20:21:57.203 に答える