2016-03-04 55 views
0

我有这段代码,它只是显示我在游戏中需要的图片。创建具有全局名称的对象的函数

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) 

它崩溃了,说这个值是零。

现在,我怎么能准确地让我的目标与功能,这将是我试图把它写这样的第一码?我希望有人能帮助我。

+0

我的答案可悲的是更多的猜测。我不知道为什么你的代码不工作,但希望返回应该无论如何工作。 – warspyking

+0

不幸的是,这并没有解决它。 http://prntscr.com/ab22dp – FICHEKK

+0

这是一些应用程序特定的事情,那么,你使用什么程序/引擎? – warspyking

回答

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

我想你想到这个作为传递DeckOfPlayingCardsDisplayObject,但它只是路过nil,因为它是一个不确定的变量。

一种选择是简单地在DisplayObject创建对象,返回它,然后将其分配给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) 
+0

非常感谢你!这解决了它! – FICHEKK

0

错误消息告诉你什么是错的。你不能索引一个零值。 因此,DeckOfPlayingCards必须为零。

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

假设DeckOfPlayingCards是,当你调用DisplayObject(对象,X,Y,名)对象为零也是你的函数内为零。 由于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解决您的问题。

+0

上面的人解决了我。正如他和你所说的那样,我试图将一个无价值的东西传递给一个函数。原谅我,我对这一切仍然陌生,试图赶上。但是,感谢您的贡献! – FICHEKK

+0

犯这样的错误是最好的学习方式! – Piglet

+0

真的!再次感谢你! – FICHEKK