Corona SDK 表格

balls = {}
createBall()

function checkLocation()
    for i,v in pairs(balls) do --循环所有的球
        if v.x>320 or v.x<-50 or v.y<-30 then --删除屏幕外的球
            v:removeSelf()
            balls[i]=nil
            print "gone"
        end
    end
end

function shoot(x, y)
    if balls[#balls].inAir==false then --检查最后一个球是否已经射出去
        balls[#balls]:setLinearVelocity(-x,-y) --为最后一个球设置速度
        balls[#balls].inAir=true; --已经发射
    end
    timer.performWithDelay( 1000, createBall ) --一秒后创建新的球
end

function createBall()
    boll = {};
    boll = display.newCircle( 160, 400, 20 )
    boll.x, boll.y = 160, 400
    boll:setFillColor(255,0,0)
    physics.addBody( boll, { density=1.0, friction=0.3, bounce=0.3, radius=25} )
    boll:setLinearVelocity(0,0)
    boll.inAir=false
    balls[#balls+1] = boll; --将新球添加到balls表中
    timer.performWithDelay( 1000, shoot ) --一秒后发射球
end

我的程序可以处理3个球,它们被创建、发射和删除,但不能发射第四个球。如果我删除整个checkLocation函数,程序就可以工作,但我想删除球。我做错了什么?也许是balls[#balls]有问题,但对我来说,它应该表示选择最后一个创建的球。

点赞
用户561242
用户561242

你有一个球的数组,不能使用 balls[i]=nil,而必须使用 table.remove(balls, i),否则你的数组中间会有一个 nil 值,导致数组停止正常工作。使用 table.remove 可以移除一个项目并且移动剩余的项目。

2013-12-04 03:18:31