创建具有全局名称的对象的函数

时间:2016-03-04 11:54:59

标签: lua

我有这个代码只显示我在游戏中需要的图片。

DeckOfPlayingCards = display.newImageRect("Graphics/ImproveMenu/Wealth/Luxury/Buy/DeckOfPlayingCards.png", 96*6, 96)
DeckOfPlayingCards.x = centerX
DeckOfPlayingCards.y = -90
DeckOfPlayingCards.name = "DeckOfPlayingCards"

现在,由于我计划将很多这些图片放在我的游戏菜单中,因此我不想复制粘贴该代码。我想做一个能为我做的简单功能。这是我尝试过的,但失败了,不知道为什么。

function DisplayObject(object, x, y, name)
        object = display.newImageRect("Graphics/ImproveMenu/Wealth/Luxury/Buy/" ..name..".png", 96*6, 96)
        object.x = x
        object.y = y
        object.name = name

        scrollView:insert(object)
end

DisplayObject(DeckOfPlayingCards, centerX, -90, "DeckOfPlayingCards")

此功能可以成功显示图片,但每当我尝试用它做一些事情(将其设为按钮)时,它表示值为零。完成这个功能后,我试着像这样打印名称:

function DisplayObject(object, x, y, name)
        object = display.newImageRect("Graphics/ImproveMenu/Wealth/Luxury/Buy/" ..name..".png", 96*6, 96)
        object.x = x
        object.y = y
        object.name = name

        scrollView:insert(object)
end

DisplayObject(DeckOfPlayingCards, centerX, -90, "DeckOfPlayingCards")

print(DeckOfPlayingCards.name)

崩溃并说价值为零。

现在,我怎么能完全使用函数来创建我的对象,就像我试图像第一个代码一样编写它?我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

DeckOfPlayingCards

我认为您希望这可以将名称 DisplayObject传递给nil,但它只是传递DisplayObject,因为它是&#39 ; s是一个未定义的变量。

一种选择是简单地在DeckOfPlayingCards中创建对象,将其返回,然后将其分配给function DisplayObject(x, y, name) local object = display.newImageRect( "Graphics/ImproveMenu/Wealth/Luxury/Buy/" ..name..".png", 96*6, 96) object.x = x object.y = y object.name = name scrollView:insert(object) return object end DeckOfPlayingCards = DisplayObject(centerX, -90, "DeckOfPlayingCards") print(DeckOfPlayingCards.name)

CREATE VIEW YourViewName AS
SELECT * FROM tablex

GO

ALTER VIEW YourViewName AS
SELECT * FROM tabley

答案 1 :(得分:0)

错误消息告诉您出了什么问题。您无法索引零值。 因此,DeckOfPlayingCards必须为零。

你在哪里初始化DeckOfPlayingCards?我知道当您将其移动到新函数DisplayObject时,第一个代码块不是当前脚本的一部分。

当您调用DisplayObject(对象,x,y,name)时,假设DeckOfPlayingCards为nil,则对象在您的函数中也是零。 由于lua只创建函数参数的本地副本,因此将局部变量对象设置为display.newImageRect的返回值...

这不会改变DeckOfPlayingCards的值!它仍然没有。

你所做的与以下相同:

function DisplayObject(x, y, name)        
  local object = display.newImageRect("Graphics/ImproveMenu/Wealth/Luxury/Buy/" ..name..".png", 96*6, 96)
        object.x = x
        object.y = y
        object.name = name

        scrollView:insert(object)
end

返回对象并将其存储在DeckOfPlayingCards中以解决您的问题。