2013-02-09 111 views
0

我已經創建稱爲moonclass.lua 一個Lua文件,該文件創建一個月亮 我已經建立這個類的兩個實例的顯示對象相同的顯示對象類的兩個實例,又名兩顆衛星,這些都是在level1.lua電暈SDK,旋轉

但是,當我嘗試旋轉兩個衛星,只有最後創建的月亮將旋轉,無論我指的是旋轉到哪一個。下面

moonclasss.lua:

local moon = {} 

local moon_mt = { __index = moon } -- metatable 
local sprite 


function moon.new(name) -- constructor 

local newMoon = { 
name = name or "unnamed", 

} 
return setmetatable(newMoon, moon_mt) 
end 


function moon:draw(x,y,group) 

sprite = display.newImage("image/moon.png") 
sprite.x = x 
sprite.y = y 
physics.addBody(sprite, "dynamic", { density=1, friction=0.8, bounce=0.05, radius=145 }) 
group:insert (sprite) 
end 

function moon:talk() print(self.name .. " is called.")end 

function moon:y(y) 
sprite.y = sprite.y + y 
return y 
end 


function moon:x(x) 
sprite.x = sprite.x + x 
return x 
end 

function moon:rotate(r) 
sprite.rotation = sprite.rotation + r 
return sprite 
end 



return moon 

和level1.lua:

local storyboard = require ("storyboard") 
local scene = storyboard.newScene() 
storyboard.purgeScene ("menu") 
display.setStatusBar(display.HiddenStatusBar) 

local physics = require("physics") 
physics.start() 
physics.setGravity(0, 0) 

function scene:createScene(event) 

local group = self.view 
local background = display.newGroup() 
local foreground = display.newGroup() 
group:insert(background) 
group:insert(foreground) 

--BACKGROUND 
backgroundimage = display.newImage("image/galaxy background.png") 
foreground:insert(backgroundimage) 
backgroundimage.x = display.contentWidth/2 
backgroundimage.y = display.contentWidth/-1 
require "starclass" 
require "controls" 

local moon = require ("moonclass") 
local moon1 = moon.new("moon1") 
moon1:draw(0,400,foreground) 


local moon2 = moon.new("moon2") 
moon2:draw(300,400,foreground) 

moon1:talk() 
moon2:talk() 


local platform = require "platformclass" 
platform.draw(512,200,foreground) 
local platform2 = require "platformclass" 
platform2.draw(50,0,foreground) 

local rocket = require "rocketclass" 
rocket.draw(200,600,foreground) 


function gameloop(event) 

--if (rockety > -1920 and rockety < 320) then 
    --foreground.y = rockety + 320 
--end 
moon2:rotate(1) 
moon1:rotate(-2) 

end 

Runtime:addEventListener("enterFrame", gameloop) 

end 

-- ENTER SCENE -- 
function scene:enterScene (event) 

--local chapter1level1 = require("scene objects").loadlevelenterscene() 


end 
-- EXIT SCENE -- 
function scene.exitScene(event) 
controlthrust:removeEventListener("touch", thrust) 
controlleft:removeEventListener("touch", rotateleft) 
controlright:removeEventListener("touch", rotateright) 
Runtime:removeEventListener("enterFrame", gameloop) 
end 

scene:addEventListener("createScene", scene) 
scene:addEventListener("enterScene", scene) 
scene:addEventListener("exitScene", scene) 

return scene 

回答

3
local moon = require("moonclass") 
local moon2 = require ("moonclass") 

這些線返回相同的對象。
require不會加載模塊兩次。
第二個require只是返回第一個require返回的值。
您必須定義一個構造函數並調用它來創建新的對象。


編輯:

local moon = {} 

local moon_mt = { __index = moon } -- metatable 

function moon.new(name) -- constructor 
    local newMoon = { 
    name = name or "unnamed" 
    } 
    return setmetatable(newMoon, moon_mt) 
end 

function moon:draw(x,y,group) 
    self.sprite = display.newImage("image/moon.png") 
    self.sprite.x = x 
    self.sprite.y = y 
    physics.addBody(self.sprite, "dynamic", { density=1, friction=0.8, bounce=0.05, radius=145 }) 
    group:insert (self.sprite) 
end 

function moon:talk() print(self.name .. " is called.")end 

function moon:y(y) 
    self.sprite.y = self.sprite.y + y 
    return y 
end 

function moon:x(x) 
    self.sprite.x = self.sprite.x + x 
    return x 
end 

function moon:rotate(r) 
    self.sprite.rotation = self.sprite.rotation + r 
    return self.sprite 
end 

return moon 
+0

如果你能告訴我一個構造函數我想創建的一個例子,作爲即時通訊也不太清楚怎麼添加到構造函數,我怎麼會那麼叫它 – Krisdom 2013-02-09 15:05:45

+0

@Krisdom - [來自PiL的簡單例子](http://www.lua.org/pil/16.1.html) – 2013-02-09 15:30:24

+0

我更新了上面的代碼,現在顯示了我的構造函數以及它如何實現,但我仍然得到完全相同的問題。 – Krisdom 2013-02-09 19:37:41