Lua 更改为在corona中显示对象位置
我是编程新手,这个问题可能听起来很简单。 我已经创建了一个名为box的模块Lua 更改为在corona中显示对象位置,lua,coronasdk,moai,Lua,Coronasdk,Moai,我是编程新手,这个问题可能听起来很简单。 我已经创建了一个名为box的模块 box = {} m={} m.random = math.random function box:new(x,y) box.on=false local box = display.newRect(0,0,100,100) box:setFillColor(m.random(120,200),m.random(120,200),m.random(120,200)) box.x
box = {}
m={}
m.random = math.random
function box:new(x,y)
box.on=false
local box = display.newRect(0,0,100,100)
box:setFillColor(m.random(120,200),m.random(120,200),m.random(120,200))
box.x = x
box.y = y
box.type = "box"
return box
end
return box
在my main.lua中,我想创建尽可能多的盒子,就像一个冒险游戏一样,我如何切换两个盒子的位置,例如,我单击其中一个,然后它被选中,只需单击另一个,它们就会相互改变位置。
提前谢谢我不知道科罗纳,但你所做的一般逻辑是:
- 添加一个事件处理程序,允许您在单击框时进行检测
- 添加一些跟踪所选框的方法
- 单击框时:
- 如果尚未选择任何框,请选择当前框
- 如果以前选择了另一个框,请与当前框交换
- 如果单击了已选定的框,则忽略(或关闭选定)
总体思路(不确定这是否是有效的Corona事件处理,但应该让您接近):
谢谢,有一个问题,为什么要将selected=nil放在函数之外?纯粹是为了说明我们正在创建该名称的全局名称,而不是在
框:touch
中偷偷创建它。更好的做法是将其本地化,以限制其范围(我现在将进行更改)。更好的做法是将其作为box类本身的属性(而不是box实例)。但是,您将box类和box实例命名为相同的名称,因此我必须对代码进行更多更改以实现该方法,并且我尝试将更改保持在最低限度。非常感谢。您知道如何使用“local select=nil”作为标志,我尝试将“box.on=false”作为标志和box属性,而不是“local selected=nil”,我对此有点困难。这有什么原因吗?是的,因为标志必须由所有box实例共享。你给每个box指定了自己的标志。你可以将标志放在box类中(你有新的方法),但考虑到您当前的代码,这将很难实现,因为您将类和实例命名为相同的名称。如果您将类重命名为Box,则可以使用Box.on
。很清楚,我已将其另存为Box.lua as class Box={}m={}m.random=math.random函数Box:new(x,y)Box.on=false local Box=display.newRect(0,0100100)return Box end------然后在我的main.lua中创建了这样的实例------在main.lua中需要“Box.lua”box1=Box:new(23,55)box2=Box:new(44,66)---这就是你的意思吗?提前谢谢
box = {}
m={}
m.random = math.random
-- track the currently selected box
local selected = nil
function box:new(x,y)
box.on=false
local box = display.newRect(0,0,100,100)
box:setFillColor(m.random(120,200),m.random(120,200),m.random(120,200))
box.x = x
box.y = y
box.type = "box"
function box:touch(event)
if not selected then
-- nothing is selected yet; select this box
selected = self
-- TODO: change this box in some way to visually indicate that it's selected
elseif selected == self then
-- we were clicked on a second time; we should probably clear the selection
selected = nil
-- TODO: remove visual indication of selection
else
-- swap positions with the previous selected box, then clear the selection
self.x, self.y, selected.x, selected.y
= selected.x, selected.y, self.x, self.y
selected = nil
end
end
return box
end