Class corona sdk,旋转同一显示对象类的两个实例

Class corona sdk,旋转同一显示对象类的两个实例,class,rotation,lua,coronasdk,displayobject,Class,Rotation,Lua,Coronasdk,Displayobject,我已经创建了一个名为moonclass.lua的lua文件 它创建了一个月球的显示对象 我已经创建了这个类的两个实例,也就是两个卫星, 这些是在level1.lua中创建的 但是,当我尝试旋转两个月亮时,无论旋转指向哪一个,只有创建的最后一个月亮会旋转 moonclasss.lua如下: local moon = {} local moon_mt = { __index = moon } -- metatable local sprite function moon.new(name)

我已经创建了一个名为moonclass.lua的lua文件 它创建了一个月球的显示对象 我已经创建了这个类的两个实例,也就是两个卫星, 这些是在level1.lua中创建的

但是,当我尝试旋转两个月亮时,无论旋转指向哪一个,只有创建的最后一个月亮会旋转

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
和级别1.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
local storyboard=require(“故事板”)
本地场景=故事板.newScene()
storyboard.purgesene(“菜单”)
display.setStatusBar(display.HiddenStatusBar)
本地物理=要求(“物理”)
物理开始
物理学.重力设置(0,0)
功能场景:CreateSecene(事件)
本地组=self.view
本地背景=display.newGroup()
本地前台=display.newGroup()
分组:插入(背景)
组:插入(前景)
--背景
backgroundimage=display.newImage(“image/galaxy background.png”)
前景:插入(背景图像)
backgroundimage.x=display.contentWidth/2
backgroundimage.y=display.contentWidth//1
需要“星级”
需要“控制”
本地月球=需要(“月球级”)
本地月亮1=月亮。新(“月亮1”)
月亮1:绘制(0400,前景)
本地月亮2=月亮新(“月亮2”)
月亮2:绘制(300400,前景)
月1:talk()
月亮2:talk()
本地平台=需要“平台类”
平台图(512200,前景)
本地平台2=需要“平台类”
平台2.绘制(50,0,前景)
本地火箭=需要“火箭级”
火箭图(200600,前景)
函数gameloop(事件)
--如果(rockety>-1920和rockety<320),则
--前景y=rockety+320
--结束
月亮2:旋转(1)
月亮1:旋转(-2)
结束
运行时:addEventListener(“enterFrame”,gameloop)
结束
--进入场景--
功能场景:进入场景(事件)
--local Chapter1Level 1=需要(“场景对象”)。loadlevelenterscene()
结束
--退出场景--
函数scene.exitScene(事件)
控制推力:移除VentListener(“触摸”,推力)
controlleft:移除EventListener(“触摸”,旋转左)
controlright:removeEventListener(“触摸”,右旋转)
运行时:removeEventListener(“enterFrame”,gameloop)
结束
场景:addEventListener(“创建场景”,场景)
场景:addEventListener(“进入场景”,场景)
场景:addEventListener(“exitScene”,场景)
返场
这些行返回相同的对象。
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
这些行返回相同的对象。
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

如果你能给我看一个我将创建的构造函数的例子,因为我不太确定该在构造函数中添加什么,以及如何调用上面的代码,它现在显示了我的构造函数及其实现方式,但我仍然得到了完全相同的问题。@Krisdom-
sprite
也必须是每个
moon
的私有。至于现在,你的
moon
s只有一个
sprite
实例……我不太清楚你的意思there@Krisdom-
sprite
必须在
newMoon
内。如果您能给我看一个我将创建的构造函数的示例,因为我不太确定要在构造函数中添加什么以及如何调用itIve,所以我更新了上面的代码,它现在显示了我的构造函数及其实现方式,但我仍然得到完全相同的问题。@Krisdom-
sprite
也必须是每个
moon
的私有。至于现在,你的
moon
s只有一个
sprite
实例……我不太清楚你的意思there@Krisdom-
sprite
必须在
newMoon
内。