2012-09-12 76 views
0

我對編程此問題感到陌生,聽起來很簡單。 我創建了一個對象作爲一個叫我main.lua箱更改爲在corona中顯示對象位置

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 

我要創造儘可能多的盒子,就像一個冒險遊戲如何切換兩個箱子位置的模塊,例如我點擊其中之一,然後它被選中,只要我點擊另一個,他們彼此改變立場。 在此先感謝

回答

1

不知電暈,但對你在做什麼,一般的邏輯是這樣的:

  • 添加事件處理程序,它允許你點擊一個框,當檢測。
  • 添加一些跟蹤所選框的方法。
  • 當單擊對話框:
    • 如果還沒有選擇框,選擇當前框
    • 如果先前選擇了另一個盒子,如果被點擊與當前框
    • 交換中已經選擇框,忽略(或選擇切換關閉)

總體思路(不知道這是否是有效的電暈事件處理,但應該讓你關閉):

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 
+0

謝謝,一個問題,爲什麼你把選擇= nil函數外? –

+0

純粹是爲了文檔的目的,爲了表明我們正在創建一個全球名稱,而不是在'box:touch'中偷偷創建它。更好的做法是將其設置在本地,以限制其範圍(我現在將做出更改)。更好的是它會成爲box類本身的一個屬性(而不是box * instances *)。但是,您將box * class *和box *實例命名爲相同的東西,所以我必須對代碼進行更多的更改才能實現該方法,並且試圖將更改保持在最低限度。 – Mud

+0

謝謝,很多。你知道你如何使用「local selected = nil」作爲標誌,我試過「box.on = false」作爲標誌和box屬性,而不是「local selected = nil」,而我有一點困難,有沒有什麼理由呢? –

相關問題