【问题标题】:Group Display Objects vs. Tables in Corona LuaCorona Lua 中的组显示对象与表格
【发布时间】:2015-01-01 13:15:04
【问题描述】:

第一次发帖,如果已在任何其他帖子中回答此问题,我深表歉意,但我无法找到解决我在此或任何其他网站上面临的问题的方法。我是一名新程序员,通过网络教程和我找到的任何其他资源自学。我正在尝试创建将产生字符并允许您调用它们的代码。我在为使用 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)”的行和“group[i]:removeSelf()”行的“nil key provided for property lookup”错误僵尸播放”功能。我尝试将有问题的代码移动到多个位置,以查看这是否是范围界定问题,但我在很大程度上遇到了同样的错误,并相信我可能无法正确理解索引和键......我发现该应用程序按预期运行,但我必须调用索引键 1 到 21 才能让它们全部移动,即使我只调用 20 个字符并且 removeSelf 行抛出错误不会删除单个字符。我要试试为角色编写一个模块,看看这是否有助于解决这些问题。我会尽快发布我的结果。

【问题讨论】:

  • 您应该缩进您的代码,以便我们可以轻松阅读它
  • 谢谢,我会尽快清理它。
  • 现在已正确格式化。如果有人在这里看到我做错了什么,将不胜感激!我试图在一个模块中设置它,但我遇到了基本上所有相同的问题,所以我将尝试坚持让它以这种方式工作。无论如何,这基本上是模块中的内容......提前感谢任何检查过这个的人!!!!

标签: lua coronasdk


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多