您的位置:首页 > 移动开发 > Cocos引擎

quick-cocos2d-x lua编写简单的场景

2014-03-03 10:05 323 查看
一、先看看我的目录结构


二、CCloud.lua

require("app.CResource")

local m_rc = RcCloud

CCloud = class("CCloud", function()

return CCSprite : create(m_rc.m_fname)

end)

CCloud.winSize = CCDirector : sharedDirector() : getVisibleSize()

local function call_setPos(this)

local sz = this : getContentSize()
this : setPosition ( ccp( -sz.width,  this.winSize.height / (math.random(5))) )

end

function CCloud : create(pLayer)

local cloud = CCloud.new()

pLayer : addChild(cloud)
math.randomseed(os.time())

local sz 		= cloud : getContentSize()
local by 		= CCMoveBy:create(20.0, ccp(cloud.winSize.width + 2 * sz.width, 0))
local pFun 		= CCCallFuncN : create (call_setPos)
local pRepeat 	= CCRepeatForever : create (CCSequence:createWithTwoActions ( pFun, by) )
cloud : runAction(pRepeat)

end

function CCloud:ctor()

end

return CCloud


二、CMessage.lua

require("app.CResource")

local m_rc = RcMessage

CMessage = class("CMessage", function()

return CCSprite : create(m_rc.m_fname)

end)

CMessage.winSize = CCDirector : sharedDirector() : getVisibleSize()
CMessage.m_lbl = NULL

-- 设置文本
function CMessage : setText(text)

self : setPosition(ccp(self.winSize.width / 2.0, self.winSize.height / 2.0))

self.m_lbl : setString(text)
local sz = self : getContentSize()
self.m_lbl : setPosition(ccp(sz.width / 2.0, sz.height / 2.0))

end

-- 隐藏
local function  call_hide(this)
this : removeFromParent()
end

-- 提示
function CMessage : create(pLayer, text)

local pMsg = CMessage.new()
pLayer : addChild(pMsg)

pMsg.m_lbl = CCLabelTTF : create("", "Tohoma", 35)
pMsg : addChild(pMsg.m_lbl)
pMsg : setText(text)

pMsg : setOpacity(0)
pMsg.m_lbl : setOpacity(0)

local ptOri = ccp(pMsg : getPosition())
local dtPos = ccp(0, 50)
pMsg : setPosition(ccp(ptOri.x, ptOri.y - dtPos.y))
pMsg : setVisible(true)

-- 创建移动动画
local moveByIn  = CCMoveBy : create(0.2, dtPos)
local moveByOut = CCMoveBy : create(0.2, dtPos)

-- 由无变亮、由亮变无
local in1  = CCFadeIn:create(0.2)
local out1 = CCFadeOut:create(0.2)

local spwanIn    = CCSpawn : createWithTwoActions(moveByIn, in1)
local spwanOut   = CCSpawn : createWithTwoActions(moveByOut, out1)
local delay  = CCDelayTime:create(2.0)

-- 消失动作
local fun = CCCallFuncN : create(call_hide)

-- 最终组合动作
local seqArr = CCArray : create()
seqArr : addObject(spwanIn)
seqArr : addObject(delay)
seqArr : addObject(spwanOut)
seqArr : addObject(fun)
local seq = CCSequence:create(seqArr)
pMsg : runAction(seq)

local in2 = CCFadeIn:create(0.2)
local out2 = CCFadeOut:create(0.2)
local delay2  = CCDelayTime:create(2.0)
local seqArr2 = CCArray : create()
seqArr2 : addObject(in2)
seqArr2 : addObject(delay)
seqArr2 : addObject(out2)
local seq2 = CCSequence:create(seqArr2)

pMsg.m_lbl : runAction(seq2)

end

function CMessage:ctor()

end

return CMessage


三、CResource.lua

local winSize = CCDirector : sharedDirector() : getVisibleSize()

-- 定义主场景资源类
RcMainScene = {}

RcMainScene	.m_bg 		= {name = "bg.jpg", pos = ccp(winSize.width / 2.0, winSize.height / 2.0)}
RcMainScene	.m_cityMenu = {name = "", 		pos = ccp(winSize.width / 2.0, winSize.height / 2.0), tag = 100}
RcMainScene	.m_mine	 	= {name = "4.png", 	pos = ccp(-310.3, 130.6),	tag = 101}
RcMainScene	.m_shop	 	= {name = "2.png", 	pos = ccp(-306.7, -96.2), 	tag = 102}
RcMainScene .m_workShop	= {name = "10.png", pos = ccp(-123.1, -185.0), 	tag = 103}
RcMainScene .m_bar	 	= {name = "10.png", pos = ccp(107.3,  -185.0), 	tag = 104}
RcMainScene .m_chooseGen= {name = "6.png",  pos = ccp(346.1,  -120.2),  tag = 105}
RcMainScene .m_train    = {name = "5.png",  pos = ccp(348.5,  50.2),    tag = 106}
RcMainScene .m_trade    = {name = "8.png",  pos = ccp(242.9,  272.2),   tag = 107}
RcMainScene .m_inherit  = {name = "11.png", pos = ccp(-9.1,   287.8),   tag = 108}
RcMainScene .m_genMap   = {name = "14.png", pos = ccp(-252.7, 289.0),   tag = 109}
RcMainScene .m_shrine   = {name = "13.png", pos = ccp(6.5,    52.6),    tag = 110}

-- 定义消息资源类
RcMessage = {}

RcMessage.m_fname = "msg.png"

-- 云资源
RcCloud = {}
RcCloud.m_fname = "cloud.png"


四、scenes/MainScene.lua

require("app.CCloud")
require("app.CMessage")
require("app.CResource")

local m_rc = RcMainScene

-- 定义场景类
local MainScene = class("MainScene", function()
return display.newScene("MainScene")
end)

-- menuItem按钮请求回调函数
local function call_select(tag, pSender)

tag = tag - 100;
local pCityName = {"矿区", "商店", "玉石作坊", "酒馆", "点将台", "校场", "贸易中心", "传承塔", "名将图鉴", "战神殿"}
local pMsg = "没有开启【" .. pCityName[tag] .. "】,尽请期待!"
-- CMessage : create(pSender : getParent() : getParent(), pMsg)
local scene = pSender : getParent() : getParent()
scene : testNet()
end

--功能:读取文件
--输入:文件名
--输出:屏幕上一行一行显示文件里的内容
local function readFile(filename)

local rFile = io.open(filename, "r")
assert(rFile)
for str in rFile.lines() do
print(str)
end
rFile : close()

end

--功能:写入文件
--输入:文件名, 内容
--输出:生成的文件里面包含内容
local function writeFile(filename, info)
local wfile=io.open(filename, "w")--写入文件(w覆盖)
assert(wfile)           --打开时验证是否出错
wfile:write(info)       --写入传入的内容
wfile:close()           --调用结束后记得关闭
end

-- 请求结束

function MainScene : call_request(event, name)

local ok = (event.name == "completed")
local request = event.request

if not ok then
-- 请求失败,显示错误代码和错误消息
CMessage : create(self, "请求失败,代码" .. request:getErrorCode() .. request:getErrorMessage())
return
end

local code = request:getResponseStatusCode()
if code ~= 200 then
-- 请求结束,但没有返回 200 响应代码
CMessage : create(self, "请求失败, 没有返回200 响应代码")
return
end

-- 请求成功,显示服务端返回的内容
local resStr = request : getResponseData()

local path = CCFileUtils : sharedFileUtils() : getWritablePath() .. name ..".png"
writeFile(path, resStr)

CMessage : create(self, "成功从【" .. name .."】请求数据")

--从写入的文件中读取图片
local sprite = CCSprite : create(path)
sprite : setPosition(display.cx, display.cy)
self : addChild(sprite)

sprite : runAction(CCScaleTo : create(1.0, 0))

end

function MainScene : addItemToMenu(menu, res, handler)

local item = CCMenuItemImage : create(res.name, res.name)
item : setTag (res.tag)
item : setPosition(res.pos)

if handler then
item : registerScriptTapHandler( handler )
end

menu : addChild(item)

end

function MainScene : testNet()

local url = {"http://www.baidu.com/img/bdlogo.gif", "http://search.sina.com.cn/images/logo_new.png", "http://img3.cache.netease.com//war/2012/11/01/index/logo-war-107.gif"}
local name = {"百度", "新浪", "网易"}

math.randomseed( os.time() )
local r = math.random(1, 3)

local request = network.createHTTPRequest(function(event)
self : call_request(event, name[r])
end, url[r], "GET")
-- request : addPOSTValue("KEY", "VALUE")
request : start()

end

function MainScene:ctor()

-- 添加一张背景图
local bg = display.newSprite(m_rc.m_bg.name, display.cx, display.cy)
self:addChild(bg)
self:markAutoCleanupImage(m_rc.m_bg.name)

-- 添加菜单
local menu = CCMenu : create()
menu : setPosition(m_rc.m_cityMenu.pos)
self : addChild(menu)

--添加云
CCloud : create(self)
CCloud : create(self)
CCloud : create(self)

-- 添加图片按钮menuItem
self : addItemToMenu(menu ,m_rc.m_mine,     call_select)
self : addItemToMenu(menu ,m_rc.m_shop,     call_select)
self : addItemToMenu(menu ,m_rc.m_workShop, call_select)
self : addItemToMenu(menu ,m_rc.m_bar,      call_select)
self : addItemToMenu(menu ,m_rc.m_chooseGen,call_select)
self : addItemToMenu(menu ,m_rc.m_train,    call_select)
self : addItemToMenu(menu ,m_rc.m_trade,    call_select)
self : addItemToMenu(menu ,m_rc.m_inherit,  call_select)
self : addItemToMenu(menu ,m_rc.m_genMap,   call_select)
self : addItemToMenu(menu ,m_rc.m_shrine,   call_select)

end

function MainScene:onEnter()
if device.platform == "android" then
-- avoid unmeant back
self:performWithDelay(function()
-- keypad layer, for android
local layer = display.newLayer()
layer:addKeypadEventListener(function(event)
if event == "back" then app.exit() end
end)
self:addChild(layer)

layer:setKeypadEnabled(true)
end, 0.5)
end
end

function MainScene:onExit()
end

return MainScene
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐