Corona OOP多个实例共享属性
对于将OOP应用于Corona,我有点心神不宁。我已经创建了一个类,它是一个时间选择器,我希望在我的应用程序中重复使用多次。我试着将它的两个实例放在同一个故事板场景中,但第一个选择器上的按钮控制数据并在第二个选择器上显示。所以他们共享数据、函数等。我想知道是否有人能告诉我哪里出了问题?这是我的timepicker类(timepicker2.lua): 我有一种感觉,我需要将这些功能与obj联系起来,但我正在为如何做到这一点而苦苦挣扎。希望有人能给我指出正确的方向? 非常感谢 编辑 迄今为止修改(和简化)的等级:Corona OOP多个实例共享属性,oop,lua,coronasdk,Oop,Lua,Coronasdk,对于将OOP应用于Corona,我有点心神不宁。我已经创建了一个类,它是一个时间选择器,我希望在我的应用程序中重复使用多次。我试着将它的两个实例放在同一个故事板场景中,但第一个选择器上的按钮控制数据并在第二个选择器上显示。所以他们共享数据、函数等。我想知道是否有人能告诉我哪里出了问题?这是我的timepicker类(timepicker2.lua): 我有一种感觉,我需要将这些功能与obj联系起来,但我正在为如何做到这一点而苦苦挣扎。希望有人能给我指出正确的方向? 非常感谢 编辑 迄今为止修改(
module(..., package.seeall)
local widget = require "widget"
picker = {}
picker.__index = picker
function picker.new()
local picker_object = {}
setmetatable(picker_object,picker)
pickerGroup = display.newGroup()
picker_object.theHour = 0
picker_object.theMin = 0
picker_object.am = true
picker_object.increaseHrBtn = widget.newButton{
default="gfx/up_regular.png",
over="gfx/up_press.png",
width=40, height=40,
onRelease = picker.incHr
}
picker_object.decreaseHrBtn = widget.newButton{
default="gfx/down_regular.png",
over="gfx/down_press.png",
width=40, height=40,
onRelease = picker.decHr
}
picker_object.decreaseHrBtn.y = 100
pickerGroup:insert(picker_object.increaseHrBtn.view)
pickerGroup:insert(picker_object.decreaseHrBtn.view)
return picker_object
end
function picker:incHr(event)
print("inc")
end
function picker:decHr(event)
print("dec")
end
我称之为:
local TimePicker = require("timepicker2")
local reminderPicker1 = TimePicker.picker.new()
。。。现在想知道如何把这个时间选择器的物理特性放到一个滚动视图中 我对Corona一点也不了解,更不用说它的OOP系统了,但在函数中使用globals的事实引起了怀疑
theHour = 0
theMin = 0
am = true
这些都是全局的,Lua使用全局默认范例。因此,除非您在它们前面加上
local
关键字,否则它们将被整个应用程序共享。您在这里没有使用OOP!完全
您在这里所做的是声明一个函数(尽管是在一个单独的模块中)并调用它
在这里读一读
这里呢
下面是如何在lua中使用OOP的要点(以及由此产生的Corona)
下面是你如何使用这个类
local dog = animals.new{name="dog"}
local cat = animals.new{name="cat"}
local name = dog:getName()
print(name) -- prints "dog"
local name = cat:getName()
print(name) -- prints "cat
您必须注意的是,当您调用一个函数cat:getName而不是cat.getName(使用分号而不是点)时,您将“self”作为参数传递。自我是“动物”类的“客体”
“对不起,我刚开始使用Corona,习惯了ActionScript3的内置OOP,所以我很难理解它。谢谢你的示例,我将尝试将代码应用到我自己的代码中。再次感谢你的代码。我已经开始用它来重建我的课堂,而且似乎进展顺利。我还有一个问题,就是如何从类中返回一组物理按钮等,以便将它们添加到UI中的滚动视图中。谢谢如果希望按钮与每个对象关联,则只需在新函数中创建一个按钮。并添加animal_object.button=按钮。您以后可以在成员函数中以self.button的形式访问它!我已经做到了,但我的问题是,我正在创建这些对象的主场景需要将它们插入到滚动视图中。我无法插入一个对象,它似乎需要一个显示组?将在问题编辑中发布我的代码,向您展示我的意思。
theHour = 0
theMin = 0
am = true
local animals = {}
animals.__index = animals
function animals.new(params)
local animal_object = {}
setmetatable(animal_object,animals)
animal_object.name = params.name
return animal_object
end
function animals:getName()
return self.name
end
local dog = animals.new{name="dog"}
local cat = animals.new{name="cat"}
local name = dog:getName()
print(name) -- prints "dog"
local name = cat:getName()
print(name) -- prints "cat