cocos2dx-3.3 lua实现一个单选按钮
2014-12-04 12:09
369 查看
cocos2dx_3.3 lua实现一个单选按钮
实现单选按钮主要是为了切换的时候更加明显的提醒用户,这里主要的做法是用了cocos2d-x lua里面的cc.Menu的api,老实说,这个引擎封装的api更加的丰富,用起来也很巧妙,主要是看怎么用,我这里只是用简单的方法实现出来,我是用Cocos Code IDE去编辑的,只有一个main.lua的文件,请看下面的代码:tab = {} -- 这里是个table,存储一个cc.MenuItemImage local item1_1 = 1 --这些是标记 local item1_2 = 2 local item1_3 = 3 local item1_4 = 4 local item1_5 = 5 local TTF = "fonts/Marker Felt.ttf" require "Cocos2d" require "Cocos2dConstants" require "AudioEngine" -- cclog cclog = function(...) print(string.format(...)) end -- for CCLuaEngine traceback function __G__TRACKBACK__(msg) cclog("----------------------------------------") cclog("LUA ERROR: " .. tostring(msg) .. "\n") cclog(debug.traceback()) cclog("----------------------------------------") return msg end local function main() collectgarbage("collect") -- avoid memory leak collectgarbage("setpause", 100) collectgarbage("setstepmul", 5000) -- initialize director local director = cc.Director:getInstance() local glview = director:getOpenGLView() if nil == glview then glview = cc.GLView:createWithRect("HelloLua", cc.rect(0,0,960,640)) director:setOpenGLView(glview) end --turn on display FPS director:setDisplayStats(true) --set FPS. the default value is 1.0/60 if you don't call this director:setAnimationInterval(1.0 / 60) cc.FileUtils:getInstance():addSearchPath("src") cc.FileUtils:getInstance():addSearchPath("res") local visibleSize = cc.Director:getInstance():getVisibleSize() local origin = cc.Director:getInstance():getVisibleOrigin() local function createLayerFarm() local layerFarm = cc.Layer:create() -- add in farm background local bg = cc.Sprite:create("farm.jpg") bg:setPosition(origin.x + visibleSize.width / 2 + 80, origin.y + visibleSize.height / 2) layerFarm:addChild(bg) --设置显示数字的文本 local txt = cc.Label:create() txt:setString( "wuxinchagn" ) txt:setSystemFontSize( 50 ) txt:setSystemFontName( "Arial" ) txt:setPosition(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - txt:getContentSize().height) txt:setAnchorPoint( cc.p( 0.5, 0.5 ) ) local fade = cc.FadeOut:create(1.0) local fade_in = fade:reverse() local seq = cc.Sequence:create(fade,fade_in) local repeatAction = cc.RepeatForever:create(seq) txt:runAction(repeatAction) layerFarm:addChild(txt,2,1) local function menuCallback(tag,sender) --第一个参数是number型,第二个才是菜单调用传进来的node for k,v in pairs(tab) do if v:getTag() == sender:getTag() then v:setEnabled(false) --先设置不可以点击 v:selected() --然后才设置选中的状态 print("menuCallback == " .. sender:getTag()) local str = "menuCallback == " .. sender:getTag() txt:setString( str ) txt:setColor(cc.c3b(255,0,0)) else v:setEnabled(true) v:unselected() end end end local item1 = cc.MenuItemImage:create("btn/1.png","btn/1-1.png") --创建一个图片菜单 item1:registerScriptTapHandler(menuCallback) --监听这个函数 item1:setTag(item1_1) --设置这个item1的tag table.insert(tab,item1) --插入到一个表中 local item2 = cc.MenuItemImage:create("btn/2.png","btn/2-2.png") item2:registerScriptTapHandler(menuCallback) item2:setTag(item1_2) table.insert(tab,item2) local item3 = cc.MenuItemImage:create("btn/3.png","btn/3-3.png") item3:registerScriptTapHandler(menuCallback) item3:setTag(item1_3) table.insert(tab,item3) local item4 = cc.MenuItemImage:create("btn/4.png","btn/4-4.png") item4:registerScriptTapHandler(menuCallback) item4:setTag(item1_4) table.insert(tab,item4) local item5 = cc.MenuItemImage:create("btn/5.png","btn/5-5.png") item5:registerScriptTapHandler(menuCallback) item5:setTag(item1_5) table.insert(tab,item5) local menu = cc.Menu:create() menu:addChild(item1) menu:addChild(item2) menu:addChild(item3) menu:addChild(item4) menu:addChild(item5) menu:setAnchorPoint(0,0) menu:setPosition(visibleSize.width / 3,visibleSize.height / 2) menu:alignItemsVertically() --设置垂直排列 menu:setScale(1.5) --设置menu的大小 layerFarm:addChild(menu) --添加到层中 return layerFarm --返回到一个层 end cclog("run here") local sceneGame = cc.Scene:create() --创建场景 sceneGame:addChild(createLayerFarm()) --将层添加到场景中 cclog("run here2") if cc.Director:getInstance():getRunningScene() then cc.Director:getInstance():replaceScene(sceneGame) else cc.Director:getInstance():runWithScene(sceneGame) end end local status, msg = xpcall(main, __G__TRACKBACK__) if not status then error(msg) end运行了上面的代码之后就是下面这个
在用lua写的时候,记住一定要把顺序理清了,不然的话,是不会达到你想要的效果的,或者说有bug,lua它是有顺序需求的,多写一下代码就能发现里面的规律了,谢谢
相关文章推荐
- cocos2dx 3.3 Lua 实现倒计时功能
- 笔记:利用Cocos2dx 3.3 lua 做一个动作类游戏(一)
- cocos2dx 3.3 quick lua 实现返回键退出程序
- 两个单选按钮(一个是,一个否 ),一个div层,实现点击隐藏,显示div
- HTML的radio单选按钮实现男、女性别只能选择一个
- cocos2dx 3.x (单选,多选,复选checkBox按钮的实现) RadioButton
- html中点击radio后的文字相当于选中该单选按钮如何实现?怎么实现两个redio,选中一个,取消另一个?
- 窗体上有两个文本框:一个文本框中最多输入字符6个;一个文本框中输入任何内容都显示*号。再添加一个按钮、2个单选按钮。实现单击按钮后,根据单选按钮,将对应文本框中内容显示在标签
- Cocos2dx2.2.1中单选按钮的实现
- cocos2dx lua实现按钮的放大和缩小功能
- C#--第11周实验--任务3--设计一个窗体,窗体上有两个文本框,一个按钮,2个单选按钮--实现单击按钮后,根据单选按钮,将对应文本框中内容显示在标签。
- 动态创建一个CButton按钮并实现其ON_BN_CLICKED消息
- Struts 实现动态单选按钮
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(2) IntCell类
- JSP单选按钮验证、下拉框验证、复选框验证实现代码
- 一个简单的菜单按钮的实现
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(6)高效率的幂运算
- 有一个table表格,选中某一行后,点击“查看(button)”按钮可以实现对该行内容的显示
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(4)二分搜索算法