Corona Lua中的组显示对象与表格

时间:2012-01-18 03:14:18

标签: lua corona

第一次发帖和我真诚地道歉,如果在任何其他帖子中已经回答了这个问题,但我无法找到我在这个或任何其他网站上遇到的问题的解决方案。我是一名新的程序员自学,有网络教程和我找到的任何其他资源。我正在尝试创建将生成字符并允许您调用它们的代码。我无法为使用for函数创建的各个实例分配索引值。我试图将实例建立为表和组显示对象。如果有人能够指出我的任何资源的方向,以更深入地了解Lua的Corona SDK实现的表和组显示对象,我确信我的问题是我没有足够的理解这些特殊功能及其工作原理。这是我到目前为止编写的代码。

-- Character Game

require "sprite"

require "ui"

local background = display.newImage("Background Placeholder.png") 

halfW = display.viewableContentWidth / 2
halfH = display.viewableContentHeight / 2

local numCharacters = 20

local roundedRect = display.newRoundedRect( 365, 20, 110, 40, 8 )
roundedRect:setFillColor( 0, 255, 0, 80 )

score = 0

t = ui.newLabel{ bounds = { 370, 30, 100, 40 },
text = "Score " ..  score,
textColor = { 255, 0, 20, 255 },
size = 18,
align = "center"
}

local scoreboard = function ( event )
    t:setText( "Score " .. score )
end

Runtime:addEventListener( "enterFrame", scoreboard )


local group = display.newGroup()

local character = sprite.newSpriteSheetFromData( "Character Placeholder.png", require("Character Placeholder").getSpriteSheetData() )

local characterSet1 = sprite.newSpriteSet(character,1,8)

sprite.add(characterSet1,"character",1,8,1500,0)

local characterplay = function( event )
    score = score + group.points
    group[i]:removeSelf()
end

do  
    for i=1, numCharacters do
        group:insert(sprite.newSprite(characterSet1))
        group[i].xScale = .2
        group[i].yScale = .2
        group.points = 50
        group[i]:setReferencePoint ( display.BottomCenterReferencePoint )
        group[i]:translate( halfW + math.random( -100, 100 ), halfH + math.random( -130, -110 ) )
    end 

    timer.performWithDelay( 500, charactermovie )

    for i=1, 21 do
        timer.performWithDelay( math.random( 500, 5000 ) , charactermove )

        charactermove = function(event )
            transition.to( group[i], { time=10000, y = 580 } )
            transition.to( group[i], { time=8000, x = math.random( 0, 480 ) } )
            transition.to( group[i], { time=7000, xScale = 1.5} )
            transition.to( group[i], { time=7000, yScale = 1.5} )
            group[i]:prepare("character")
            group[i]:play()
        end

        group[i]:addEventListener( "tap", characterplay )
    end
end




charactermovie = function( event )
group[i]:prepare("character")
group[i]:play()
end

local function spriteListener( event )
    print( "Sprite event: ", event.sprite, event.sprite.sequence, event.phase )
end

for i, group in pairs(group) do print (group, i, v) end

我目前正在“尝试索引字段”?在包含此代码的行“group [i]:addEventListener(”tap“,zombieplay)”在启动时和“为属性查找提供的nil键”错误在“group [i]:removeSelf()”行的“ zombieplay“function。我已经尝试将有问题的代码移动到各种位置以查看这是否是一个范围问题,但我在很大程度上遇到了同样的错误,并且相信我可能无法正确理解索引和密钥......我发现了应用程序按预期运行,但我必须调用索引键1到21才能使它们全部移动,即使我只调用20个字符并且removeSelf行抛出错误不会删除单个字符。我要尝试为角色写一个模块,看看是否有助于明确这一点。我将很快发布我的结果。

1 个答案:

答案 0 :(得分:0)

您的角色扮演和charactermovie函数正在尝试使用变量i,这超出了函数范围。

有一个名为target的事件属性,用于获取被调用者的事件。你想做这样的事情:

local characterplay = function( event )
    score = score + group.points
    event.target:removeSelf()
end