代码之家  ›  专栏  ›  技术社区  ›  Ross Watson

根据随机值更改精灵帧

  •  1
  • Ross Watson  · 技术社区  · 9 年前

    我有一个按钮列表(当前图像),我想根据列表中的值更改图像颜色

    buttons = {"btn1","btn2","btn3","btn4"}
    
    local buttonSheetData = {
        width = 150,
        height = 150,
        numFrames = 2,
        sheetContentWidth = 300,
        sheetcontentheight = 150,
    }
    
    local buttonSheet = graphics.newImageSheet("image/buttonSS.png", buttonSheetData)
    
    local sequenceData = {
        {name = "black", start = 1, count = 1},
        {name = "red", start = 2, count = 1}
    }
    
    local btn1 = display.newSprite(buttonSheet, sequenceData)
    btn1.x = 100
    btn1.y = 90
    
    local btn2 = display.newSprite(buttonSheet, sequenceData)
    btn2.x = 200
    btn2.y = 230
    
    local btn3 = display.newSprite(buttonSheet, sequenceData)
    btn3.x = 300
    btn3.y = 90
    
    local btn4 = display.newSprite(buttonSheet, sequenceData)
    btn4.x = 400
    btn4.y = 230
    
    x = buttons[math.random(#buttons)] 
    x:setFrame(2)
    

    圆圈当前为黑色。每次运行代码时,我都希望它从列表中取一个随机值,并将颜色更改为红色。因此,当我运行代码时有一个不同的红色圆圈

    我一直在犯错误: “试图调用方法'setSequence'(一个nill值)”

    1 回复  |  直到 9 年前
        1
  •  2
  •   ryanpattison    9 年前

    您的代码将字符串和变量名称视为可互换。第一行:

    buttons = {"btn1","btn2","btn3","btn4"}
    

    创建字符串表,因此该行:

    x = buttons[math.random(#buttons)]
    

    将设置 x 随机进入 buttons 这是字符串,所以下一行( x:setFrame(2) )正在调用字符串上不存在的方法。

    相反,创建一个按钮表:

    buttons = {btn1,btn2,btn3,btn4} -- creates a table of buttons
    x = buttons[math.random(#buttons)] -- x is a random entry of buttons (a button)