一、新建工程
初次建工程的准备工作:
之后的建工程,相信用过eclipse的都会的吧。继续。。。先睹为快:
-----------》 先来know一眼程序入口:main.lua 《-------------
主要干两件事:1.创建场景;2.显示场景
require "Cocos2d" --引用cocos lua函数库,避免重复引用
-- cclog --声明cclog函数,用于打印日志信息
local cclog = function(...)
print(string.format(...))
end
-- for CCLuaEngine traceback --声明__G__TRACKBACK__(msg)函数,当程序出错时,由下面的 xpcall(main, __G__TRACKBACK__)调用,输出堆栈信息
function __G__TRACKBACK__(msg),
cclog("----------------------------------------")
cclog("LUA ERROR: " .. tostring(msg) .. "\n")
cclog(debug.traceback())
cclog("----------------------------------------")
return msg
end
local function main() --入口函数
collectgarbage("collect") --垃圾收集器,括号的的参数表示:执行一次全垃圾收集周期。还有其他option tag供选择
-- avoid memory leak --避免内存泄露
collectgarbage("setpause", 100) --setpause取arg/100的值作为垃圾收集暂停时长
collectgarbage("setstepmul", 5000) --setstepmul取arg/100的作为补偿的增幅,新步长 = 旧步长*(arg/100)
--添加文件搜索路径
cc.FileUtils:getInstance():addSearchPath("src") --相信有过安卓开发经验的会很熟悉
cc.FileUtils:getInstance():addSearchPath("res")
--设置屏幕适配
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(960, 640, 0)
--create scene 1。创建一个场景
local MS=require("MyScene") --加载“MyScene”模块,返回值是table类型全局变量
local ms_scene=MS:create() --通过静态函数create创建场景
--2,显示这个场景
if cc.Director:getInstance():getRunningScene() then --[[判断当前有没有正在运行的场景;有,则用ms_scene替换它;否则,直接运行ms_scene
cc.Director:getInstance():replaceScene(ms_scene) --总之,此处运行的必须是进入ms_scene 场景 ]]
else
cc.Director:getInstance():runWithScene(ms_scene)
end
end
local status, msg = xpcall(main, __G__TRACKBACK__) --真正的程序入口,由Lua提供,调用main函数,并且可以捕获到错误。返回值为错误状态和错误消息
if not status then --xpcall(f , err) f:要调用的函数;err:捕获到错误的时候调用的函数
error(msg)
end
-----------------------》 MyScene.lua 《-----------------------------
--定义第一个场景
--定义一个类 MyScene 继承cc.Scene
local MyScene=class("MyScene",function () --通过Lua创建对象,class(classname,super),classname为字符串类型函数名,super为调用父类构造函数。“快捷键F3”源码
return cc.Scene:create()
end)
-------------------------------------------------1.创建函数-------------------------------------------------------------------------------------
function MyScene:create() --声明MyScene:create() 函数,在main.lua中通过scene.create()调用
print("MyScene:create")
local ms=MyScene.new() --创建MyScene对象,new()函数会调用 构造函数 MyScene:ctor()来 初始化MyScene对象
ms:addChild(ms:init()) --MyScene对象ms调用初始化函数,将层添加到场景,返回场景对象
return ms
end
------------------------------------------------2.构造函数----------------------------------------------------------
function MyScene:ctor()
print("MyScene:ctor")
--添加成员属性
self.winsize=cc.Director:getInstance():getWinSize()
end
-------------------------------------------------3.初始化函数------------------------------------------------------
function MyScene:init()
print("MyScene:init")
local layer=cc.Layer:create()
--添加背景图片层到场景
local sp_bk=cc.Sprite:create("bbg_burning_land.jpg")
layer:addChild(sp_bk)
sp_bk:setPosition(self.winsize.width/2,self.winsize.height/2)
-- 添加人物层到场景
local sp=cc.Sprite:create("kick07.png")
layer:addChild(sp)
sp:setAnchorPoint(0,1) --为精灵添加锚点
sp:setPosition(self.winsize.width/2,self.winsize.height/2) --为精灵设置位置
sp:setRotation(40) --旋转
sp:setLocalZOrder(3) --设置当前图层的显示顺序 --zorder垂直屏幕方向向外为Z轴正方向,值越大,显示在最外层
--让人物运行动作
--sp:runAction(cc.RotateBy:create(5,720))
--添加文字层
local txt01=cc.Label:createWithSystemFont("第一个LuaGame","",40)
layer:addChild(txt01)
txt01:setPosition(self.winsize.width/2,self.winsize.height/2+70)
--添加人物层
local hero01=cc.Sprite:create("hero01.png")
hero01:setAnchorPoint(0.5,0.5)
hero01:setPosition(480,320)
hero01:setLocalZOrder(4)
layer:addChild(hero01)
hero01:setScale(0.3)--缩放到原有尺寸的30%
return layer
end
return MyScene