Corona Storyboard,声明一个对象并使其可移动,尝试使用nil值。

我正在创建一个游戏,在第一关中我想加载几个代表字母的图片,并添加它们的功能。其中之一是能够移动它们。

因此在我的enterScene函数中:

function scene:enterScene(event)
...
    letA = display.newImage("media/letters/A.png", display.contentWidth/4 - 20, display.contentHeight/5 - 18)

    letC = display.newImage("media/letters/C.png", display.contentWidth/4 + 35, display.contentHeight/5 - 18)
    letR= display.newImage("media/letters/R.png", display.contentWidth/4 + 90, display.contentHeight/5 - 18)
    letE=display.newImage("media/letters/E.png", display.contentWidth/4 + 145, display.contentHeight/5 - 18)

    screenGroup:insert(letA)
    screenGroup:insert(letC)
    screenGroup:insert(letR)
    screenGroup:insert(letE)

    letA:addEventListener("touch", letA)
    letC:addEventListener("touch", letC)
    letR:addEventListener("touch", letR)
    letE:addEventListener("touch", letE)

现在我为letA添加了移动函数:

function letA:touch(event)

    if event.phase=="began" then
        display.getCurrentStage():setFocus(self, event.id)
        self.isFocus = true

        self.markX = self.x
        self.markY = self.y

        elseif self.isFocus then
            if event.phase=="moved" then
                self.x = event.x - event.xStart + self.markX
                self.y = event.y - event.yStart + self.markY
            elseif event.phase=="ended" or event.phase == "cancelled" then
                display.getCurrentStage():setFocus(self,nil)
                self.isFocus = false
            end
        end

        return true
end

然后当我尝试进入场景时,它在函数letA:touch(event)的那一行报错,说“尝试索引全局变量'letA'”。

那我该怎么办呢?我这样设计是因为我希望当用户点击 Play 时,它会加载字母,如果他按返回,则会将它们从屏幕上卸载。

点赞
用户1605727
用户1605727

你可以这样做,通过“ **:**”(冒号)声明touch函数,这样letA或其他对象就不是表格。

local letA = display.newImage("media/letters/A.png", display.contentWidth/4 - 20, display.contentHeight/5 - 18)

letA.touch = function(self,event)

    if event.phase=="began" then
        display.getCurrentStage():setFocus(self, event.id)
        self.isFocus = true

        self.markX = self.x
        self.markY = self.y

    elseif self.isFocus then
        if event.phase=="moved" then
            self.x = event.x - event.xStart + self.markX
            self.y = event.y - event.yStart + self.markY
        elseif event.phase=="ended" or event.phase == "cancelled" then
            display.getCurrentStage():setFocus(self,nil)
            self.isFocus = false
        end
    end

    return true
end

letA:addEventListener("touch")
2013-07-22 01:25:05