登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入 新註冊 | 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / EMS,時效:出貨後2-3日

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

2023年11月出版新書

2023年10月出版新書

2023年09月出版新書

2023年08月出版新書

2023年07月出版新書

2023年06月出版新書

2023年05月出版新書

2023年04月出版新書

2023年03月出版新書

2023年02月出版新書

『簡體書』Cocos2d-x实战:Lua卷(第2版)

書城自編碼: 2943275
分類: 簡體書→大陸圖書→計算機/網絡圖形圖像/多媒體
作者: 关东升
國際書號(ISBN): 9787302457305
出版社: 清华大学出版社
出版日期: 2017-02-01
版次: 2 印次: 1

書度/開本: 32开 釘裝: 平装

售價:NT$ 641

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
妓女与文人
《 妓女与文人 》

售價:NT$ 179.0
舵手证券图书 短线交易大师:工具和策略 24年新修订版 实战验证的交易技术 经典外版书
《 舵手证券图书 短线交易大师:工具和策略 24年新修订版 实战验证的交易技术 经典外版书 》

售價:NT$ 437.0
中国古兵器集成
《 中国古兵器集成 》

售價:NT$ 3808.0
空腹力+轻断食:正在横扫全球的瘦身革命(全2册)
《 空腹力+轻断食:正在横扫全球的瘦身革命(全2册) 》

售價:NT$ 577.0
临床牙周病学和口腔种植学 第7版
《 临床牙周病学和口腔种植学 第7版 》

售價:NT$ 7269.0
粤港澳大湾区文化产业圈论纲
《 粤港澳大湾区文化产业圈论纲 》

售價:NT$ 717.0
粤港澳大湾区蓝皮书:粤港澳大湾区建设报告(2023)
《 粤港澳大湾区蓝皮书:粤港澳大湾区建设报告(2023) 》

售價:NT$ 1053.0
邂逅晚清——中美的对望与凝视(罕见国内作者所著全面反映晚清中美交往历史的通俗作品)
《 邂逅晚清——中美的对望与凝视(罕见国内作者所著全面反映晚清中美交往历史的通俗作品) 》

售價:NT$ 493.0

建議一齊購買:

+

NT$ 641
《 Cocos2d-x实战:JS卷——Cocos2d-JS开发(第2版) 》
+

NT$ 713
《 Cocos2d-x实战:C++卷(第2版) 》
+

NT$ 407
《 iOS实战:苹果“生态圈”编程卷(Swift版) 》
+

NT$ 656
《 iOS实战:入门与提高卷(Swift版) 》
+

NT$ 801
《 Cocos2d-x实战:C++卷(清华游戏开发丛书) 》
+

NT$ 621
《 Swift开发指南(修订版) 》
編輯推薦:
Cocos2d-x实战:Lua卷(第2版)(清华游戏开发丛书)是在畅销书《Cocos2d-x实战:Lua卷》基础上的全面升级。本书不仅适合于企业一线开发人员学习和参考,也同样适合于广大高校老师和学生学习Cocos2d-x Lua开发。配套资源:本书配套提供源代码下载、勘误和技术支持,网址见书中前言。
內容簡介:
本书是介绍Cocos2dx Lua游戏编程和开发技术的书籍。书中介绍了使用Cocos2dx Lua中的核心类、瓦片地图、物理引擎、音乐音效、Cocos2dx GUI控件、Cocos2dx中的3D特性、数据持久化、网络通信、性能优化、多平台移植、程序代码管理、两大应用商店发布产品。
全书分为6篇: 基础篇、进阶篇、数据与网络篇、优化篇、多平台移植篇和实战篇。
基础篇包括第1~9章,内容涵盖了Lua语言基础、Cocos2dx Lua介绍、环境搭建、标签、菜单、精灵、场景、层、动作、特效、动画和用户事件。
进阶篇包括第10~15章,内容涵盖了游戏音乐与音效、粒子系统、瓦片地图、物理引擎、Cocos2dx GUI控件和Cocos2dx中的3D特性。
数据与网络篇包括第16~18章,内容涵盖了数据持久化、基于HTTP网络通信和Node.js与WebSocket网络通信。
优化篇包括第19章性能优化。
多平台移植篇包括第20和第21章,分别是移植到Android平台和移植到iOS平台。
实战篇包括第22~25章,分别是使用Git管理程序代码、项目实战: 迷失航线
關於作者:
关东升:国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。担任51CTO社区iOS技术顾问,精通iOS、Android、Windows Phone及HTML5等移动开发技术。曾先后主持开发大型网络游戏《神农诀》的iOS和Android客户端开发,国家农产品追溯系统的iPad客户端开发,酒店预订系统的iOS客户端开发,金融系统的iOS、Windows Phone 及Android客户端开发。在App Store上发布数款游戏和应用软件,擅长移动平台的应用和游戏类项目开发。长期为中国移动研究院、云南移动、东软、方正科技、大唐电信、中石油、深圳康拓普、上海财富168、天津港务局等企事业单位授课。著有《iOS实战:入门与提高卷(Swift版)》《iOS实战:传感器卷(Swift版)》《iOS实战:图形图像、动画和多媒体卷(Swift版)》《iOS开发指南从零基础到App Store上架》《交互设计的艺术iOS 7拟物化到扁平化革命》《Cocos2d-x实战:C卷(第2版)》《Cocos2d-x实战:Lua卷(第2版)》《Cocos2d-x实战:JS卷Cocos2d-JS开发(第2版)》《Cocos2d-x实战:工具卷(第2版)》等专业图书。
內容試閱
前言Cocos2dx实战系列图书第1版出版后,得到业界一致好评,随着Cocos2dx版本的变化,很多API有了较大变化,很多读者希望升级Cocos2dx实战系列图书。经过几个月努力,我们终于在2016年7月完成初稿,几个月来我们智捷iOS课堂团队夜以继日,我几乎推掉一切社交活动,推掉很多企业邀请讲课的机会,每天工作12小时,不敢有任何松懈和徘徊,只做一件事情编写此书。书中每一个文字、每一幅图片、每一个实例都是精心制作。这次Cocos2dx实战系列图书升级版包括如下4本书:(1) 《Cocos2dx实战: C卷》(第2版)。(2) 《Cocos2dx实战: JS卷Cocos2dJS开发》(第2版)。(3) 《Cocos2dx实战: Lua卷》(第2版)。(4) 《Cocos2dx实战: 工具卷》(第2版)。本书是Cocos2dx游戏引擎Lua卷,就是使用Cocos2dx的Lua语言API。关于本系列图书的具体进展请读者关注智捷课堂官方网站http:www.51work6.com。关于源代码为了更好地为广大读者提供服务,专门为本书建立了一个网站,具体网址是www.51work6.combookcocos23.php,读者可以对书中内容发表评论,提出宝贵意见。勘误与支持我们在网站www.51work6.combookcocos23.php中建立了一个勘误专区,及时地把书中的问题、失误和纠正反馈给广大读者,您如果发现有什么问题,可以在网上留言,也可以发送电子邮件到: eorient@sina.com,我们会在第一时间回复您; 也可以在新浪微博中与我们联系: @tony_关东升。本书主要由关东升撰写,智捷课堂团队的赵大羽、赵志荣、关锦华参与了部分内容的编写。感谢赵大羽老师手绘了书中全部草图,并从专业的角度修改书中图片,力求更加真实完美地奉献给广大读者。在此感谢清华大学出版社的盛东亮编辑给我们提供了宝贵的意见。最后感谢家人对我的宽容以及对我的关心和照顾,使我能抽出这么多时间,投入全部精力专心地编写此书。由于时间仓促,书中难免存在不妥之处,请读者原谅,并提出宝贵意见。关东升2017年1月于北京


第5章
标签和菜单
第5章标签和菜单游戏中文字与菜单很常用,字符串、标签和菜单经常结合在一起使用,因此本章主要介绍Cocos2dx Lua API中的标签与菜单。5.1游戏中的文字游戏场景中的文字包括静态文字和动态文字。静态文字如图51所示游戏场景中①号文字COCOS2DX,动态文字如图51所示游戏场景中的②号文字Hello World。
图51场景中的文字
静态文字一般是由美工使用Photoshop绘制在背景图片上,这种方式的优点是表现力很丰富,例如,①号文字COCOS2DX中的COCOS、2D和X设计的风格不同,而动态文字则不能,但是静态文字无法通过程序访问,无法动态修改内容。动态文字一般是需要通过程序访问,需要动态修改内容。Cocos2dx Lua API可以通过标签类实现。5.2使用标签要想在游戏场景中显示动态文字,可以通过Cocos2dx Lua API提供的标签类Label和LabelAtlas实现,也可通过Cocos2dx GUI标签控件实现。本章介绍标签类Label和LabelAtlas实现方式。5.2.1Label类Label类是Cocos2dx 3.x后推出的新的标签类,这种标签通过使用FreeTypeFreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件。引自百度百科http:baike.baidu.comview4579855.htm来使它在不同的平台上有相同的视觉效果。由于使用更快的缓存代理,它的渲染也将更加快速。Label提供了描边和阴影等特性。Label类可以创建系统字体标签、
图52Label类图
TTF字体标签和位图字体标签。
提示系统字体标签就是当前平台系统中安装的字体,我们要确保所用字体在系统中是存在的。TTF字体TTFTrueTypeFont是Apple公司和Microsoft公司共同推出的字体文件格式,随着Windows的流行,已经变成最常用的一种字体文件表示方式。引自百度百科http:baike.baidu.comview1003637.htm标签是加载TTF字体文件显示文字的标签。位图字体标签加载两个文件: 一个纹理图集.png和一个字体坐标文件.fnt。
Label类的类图如图52所示。创建Label类静态create函数常用的有如下几个:
Label:createWithSystemFonttext,-- 是要显示的文字
font,-- 系统字体名
fontSize,-- 字体的大小
dimensions= size0,0, -- 可省略,参考LabelTTF定义
vAlignment= TEXT_ALIGNMENT_LEFT,-- 可省略,参考LabelTTF定义
vAlignment= VERTICAL_TEXT_ALIGNMENT_TOP -- 可省略,参考LabelTTF定义
Label:createWithTTFconst std∷string & text,
fontFile, -- 字体文件
fontSize,
dimensions= size0,0,
hAlignment= TEXT_ALIGNMENT_LEFT,
vAlignment= VERTICAL_TEXT_ALIGNMENT_TOP
Label:createWithTTFttfConfig,-- 字体配置信息
text,
hAlignment= TEXT_ALIGNMENT_LEFT,
int maxLineWidth = 0-- 可省略,标签的最大宽度
Label:createWithBMFontconst std∷string& bmfontFilePath, -- 位图字体文件
text,
hAlignment= TEXT_ALIGNMENT_LEFT,
int maxLineWidth = 0,
imageOffset = p0,0-- 可省略,在位图中的偏移量
其中createWithSystemFont是创建系统字体标签对象,createWithTTF是创建TTF字体标签对象,createWithBMFont是创建位图字体标签对象。5.2.2实例: 使用系统字体和TTF字体下面用实例说明通过Label类使用系统字体和TTF字体,如图53所示。
图53使用系统字体和TTF字体
GameScene.lua的GameScene:createLayer函数如下:
--创建层
function GameScene:createLayer
cclog"GameScene init"
local layer = cc.Layer:create
--上下两个控件的距离
local gap = 120
local label1 = cc.Label:createWithSystemFont"世界你好1", "Arial", 36①
label1:setPositioncc.psize.width2, size.height - gap
layer:addChildlabel1, 1
local label2 = cc.Label:createWithTTF"世界你好2", "fontsSTLITI.ttf", 36②
label2:setPositioncc.psize.width2, size.height - 2 * gap
layer:addChildlabel2, 1
local ttfConfig = {}③
ttfConfig.fontFilePath="fontsMarker Felt.ttf"
ttfConfig.fontSize = 32
local label3 = cc.Label:createWithTTFttfConfig, "Hello World1"④
label3:setPositioncc.psize.width2, size.height - 3 * gap
layer:addChildlabel3 , 1
ttfConfig.outlineSize = 4⑤
local label4 = cc.Label:createWithTTFttfConfig, "Hello World2"⑥
label4:setPositioncc.psize.width2, size.height - 4 * gap
label5:enableShadowcc.c4b255,255,255,128, cc.size4, -4 ⑦
label5:setColorcc.c3b255, 0, 0 ⑧
layer:addChildlabel4, 1
return layer
end
上述第①行代码是通过createWithSystemFont函数创建系统字体标签对象。第②行代码是通过createWithTTF创建TTF字体标签对象。第③行代码local ttfConfig = {}是声明一个ttfConfig变量,ttfConfig的属性如下:
fontFilePath-- 字体文件路径
fontSize,-- 字体大小
glyphs = GLYPHCOLLECTION_DYNAMIC,-- 字体库类型
customGlyphs-- 自定义字体库
outlineSize-- 字体描边
distanceFieldEnabled-- 开启距离字段字体开关
第④行代码cc.Label:createWithTTFttfConfig, "Hello World1"是通过指定ttfConfig创建TTF字体标签。
图54图片集文件
第⑤行代码ttfConfig.outlineSize = 4设置ttfConfig的描边字段。第⑥行代码cc.Label:createWithTTFttfConfig, "Hello World2"是重新创建TTF字体标签。第⑦行代码label5:enableShadowcc.c4b255,255,255,128,cc.size4, -4是设置标签的阴影效果。第⑧行代码label5:setColorcc.c3b255, 0, 0是设置标签的颜色。5.2.3实例: 使用位图字体位图字体标签加载两个文件: 一个图片集.png和一个字体坐标文件.fnt。图54展示了图片集文件BMFont.png的内容,对应还有一个字体坐标文件BMFont.fnt。字体坐标文件BMFont.fnt代码如下:
info face="AmericanTypewriter" size=64 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=2,2
common lineHeight=73 base=58 scaleW=512 scaleH=512 pages=1 packed=0
page id=0 file="BMFont.png"
chars count=95
char id=124 x=2 y=2 width=9 height=68 xoffset=14 yoffset=9 xadvance=32 page=0 chnl=0 letter="|"
char id=41 x=13 y=2 width=28 height=63 xoffset=1 yoffset=11 xadvance=29 page=0 chnl=0 letter=""
char id=40 x=43 y=2 width=28 height=63 xoffset=4 yoffset=11 xadvance=29 page=0 chnl=0 letter=""
... ...
char id=32 x=200 y=366 width=0 height=0 xoffset=16 yoffset=78 xadvance=16 page=0 chnl=0
letter="space"
使用LabelBMFont需要注意的是图片集文件和坐标文件需要放置在相同的资源目录下,文件命名相同。图片集合和坐标文件是可以通过位图字体工具制作而成的,位图字体工具的使用请参考本系列丛书的工具卷《Cocos2dx实战: 工具卷》。下面用实例说明通过Label类使用位图字体,如图55所示。
图55使用位图字体
下面看一下GameScene.lua的GameScene:createLayer函数如下:
--创建层
function GameScene:createLayer
cclog"GameScene init"
local layer = cc.Layer:create
--上下两个控件的距离
local gap = 90
local label1 = cc.Label:createWithBMFont"fontsbitmapFontChinese.fnt", "中国"①
label1:setPositioncc.psize.width2, size.height - 3 * gap
layer:addChildlabel1, 1
local label2 = cc.Label:createWithBMFont"fontsBMFont.fnt", "Hello World"②
label2:setPositioncc.psize.width2, size.height - 4* gap
layer:addChildlabel2, 1
return layer
end
return GameScene
第①和第②行代码通过Label类的createWithBMFont函数创建位图字体标签对象。
注意标签中显示的文字字符一定包含在位图字体图片集中,例如代码第①行要显示中文,那么位图字体图片集bitmapFontChinese.png文件中应当包含这些中文字。
5.2.4LabelAtlas类LabelAtlas是图片集标签,其中的Atlas本意是地图集、图片集,这种标签显示的文字是从一个图片集中取出的,因此使用LabelAtlas需要额外加载图片集文件。LabelAtlas比LabelTTF快很多。LabelAtlas中的每个字符必须有固定的高度和宽度。下面用实例说明通过LabelAtlas类使用图片集字体,如图56所示。
图56LabelAtlas实现的图片集文字
LabelAtlas实现的图片集文字主要代码如下:
function GameScene:createLayer
local layer = cc.Layer:create
local label = cc.LabelAtlas:create"HelloWorld",
"fontstuffy_bold_italic-charmap.png", 48, 66, string.byte" "①
label:setPositioncc.psize.width2 - label:getContentSize.width 2,
size.height - label:getContentSize.height
图57图片集文件
layer:addChildlabel, 1
local sprite = cc.Sprite:create"HelloWorld.png"
sprite:setPositioncc.psize.width2, size.height2
layer:addChildsprite, 0
return layer
end
上述第①行代码是创建一个LabelAtlas对象,create函数的第一个参数是要显示的文字,第二个参数是图片集文件见图57,第三个参数是字符高度,第四个参数是字符宽度,第五个参数是开始字符。使用LabelAtlas需要注意的是图片集文件需要放置在res目录下。5.3使用菜单菜单中又包含了菜单项,菜单项类是MenuItem,每个菜单项都有三个基本状态: 正常、选种和禁止。回顾一下MenuItem类图如图58所示。
图58MenuItem类图
菜单是按照菜单项进行分类的,从MenuItem类图中可见MenuItem的子类有MenuItemLabel、MenuItemSprite和MenuItemToggle。其中MenuItemLabel类是文本菜单,它有2个子类: MenuItemAtlasFont和MenuItemFont。MenuItemSprite类是精灵菜单,它的子类是MenuItemImage,属于图片菜单。MenuItemToggle类是开关菜单。下面重点介绍文本菜单、精灵菜单、图片菜单和开关菜单。5.3.1文本菜单文本菜单的菜单项只能显示文本,包括MenuItemLabel、MenuItemFont和MenuItemAtlasFont。MenuItemLabel是个抽象类,具体使用时只使用MenuItemFont和MenuItemAtlasFont两个类。
提示目前的Cocos2dx 3.11版本Lua中MenuItemAtlasFont还没有可移植性,因此还不能使用。可以使用LabelAtlas和MenuItemLabel结合来实现MenuItemAtlasFont效果。
本节通过一个实例来介绍文本菜单的使用,如图59所示,其中菜单Start是文本字体菜单项,菜单Help是Atlas字体菜单项。
图59文本菜单实例
GameScene.lua的GameScene:createLayer函数如下:
function GameScene:createLayer
local layer = cc.Layer:create
local sprite = cc.Sprite:create"menubackground.png"
sprite:setPositioncc.psize.width2, size.height2
layer:addChildsprite
cc.MenuItemFont:setFontName"Times New Roman"①
cc.MenuItemFont:setFontSize86 ②
local item1 = cc.MenuItemFont:create"Start"③
local function menuItem1Callbacksender④
cclog"Touch Start Menu Item."
end
item1:registerScriptTapHandlermenuItem1Callback⑤
local labelAtlas = cc.LabelAtlas:create"Help",
"menutuffy_bold_italic-charmap.png", 48, 65, string.byte'' ''⑥
local item2 = cc.MenuItemLabel:createlabelAtlas⑦
local function menuItem2Callbacksender
cclog"Touch Help Menu Item."
end
item2:registerScriptTapHandlermenuItem2Callback
local mn = cc.Menu:createitem1, item2⑧
mn:alignItemsVertically⑨
layer:addChildmn ⑩
return layer
end
上述第①和第②行代码是设置文本菜单的文本字体和字体大小。第③行代码是创建MenuItemFont菜单项对象,它是一个一般文本菜单项,create函数的参数是菜单项的文本内容。第④行代码是定义MenuItemFont菜单项单击事件的回调函数。第⑤行代码是注册MenuItemFont菜单项单击事件,其参数就是前面定义的回调函数。第⑥行代码是定义一个Atlas标签。第⑦行代码是通过Atlas标签创建MenuItemLabel菜单项对象。第⑧行代码cc.Menu:createitem1, item2是创建菜单对象,把之前创建的菜单项添加到菜单中,create函数是这些菜单项的数组。第⑨行代码mn:alignItemsVertically是设置菜单项垂直对齐。第⑩行代码layer:addChildmn是把菜单对象添加到当前层中。5.3.2精灵菜单和图片菜单精灵菜单的菜单项类是MenuItemSprite,图片菜单的菜单项类是MenuItemImage。由于MenuItemImage继承于MenuItemSprite,所以图片菜单也属于精灵菜单。为什么叫精灵菜单呢?那是因为这些菜单项具有精灵的特点,可以让精灵动起来,具体使用时是把一个精灵放置到菜单中作为菜单项。精灵菜单项类MenuItemSprite的一个创建函数create定义如下:
cc.MenuItemSprite:create normalSprite, -- 菜单项正常显示时的精灵
selectedSprite, -- 选择菜单项时的精灵
disabledSprite-- 菜单项禁用时的精灵
使用MenuItemSprite比较麻烦,在创建MenuItemSprite之前要先创建3种不同状态的精灵即normalSprite、selectedSprite和disabledSprite。MenuItemSprite还有一些create函数,在这些函数中可以省略disabledSprite参数。如果精灵是由图片构成的,可以使用MenuItemImage实现与精灵菜单同样的效果。MenuItemImage类的一个创建函数create定义如下:
cc.MenuItemImage:create normalImage, -- 菜单项正常显示时的图片
selectedImage, -- 选择菜单项时的图片
disabledImage -- 菜单项禁用时的图片
MenuItemImage还有一些create函数,在这些函数中可以省略disabledImage参数。本节通过一个实例介绍精灵菜单和图片菜单的使用,如图510所示。
图510精灵菜单和图片菜单实例
GameScene.lua的GameScene:createLayer函数如下:
function GameScene:createLayer
local layer = cc.Layer:create
local director = cc.Director:getInstance
local sprite = cc.Sprite:create"menubackground.png"
sprite:setPositioncc.psize.width2, size.height2
layer:addChildsprite
-- 开始精灵
local startlocalNormal = cc.Sprite:create"menustart-up.png"①
local startlocalSelected = cc.Sprite:create"menustart-down.png"②
local startMenuItem = cc.MenuItemSprite:createstartlocalNormal, startlocalSelected③
startMenuItem:setPositiondirector:convertToGLcc.p700, 170 ④
local function menuItemStartCallbacksender
cclog"Touch Start."
end
startMenuItem:registerScriptTapHandlermenuItemStartCallback
-- 设置图片菜单
local settingMenuItem = cc.MenuItemImage:create
"menusetting-up.png",
"menusetting-down.png"⑤
settingMenuItem:setPositiondirector:convertToGLcc.p480, 400 ⑥
local function menuItemSettingCallbacksender
cclog"Touch Setting."
end
settingMenuItem:registerScriptTapHandlermenuItemSettingCallback
-- 帮助图片菜单
local helpMenuItem = cc.MenuItemImage:create
"menuhelp-up.png",
"menuhelp-down.png"⑦
helpMenuItem:setPositiondirector:convertToGLcc.p860, 480 ⑧
local function menuItemHelpCallbacksender
cclog"Touch Help."
end
helpMenuItem:registerScriptTapHandlermenuItemHelpCallback
local mn = cc.Menu:createstartMenuItem, settingMenuItem, helpMenuItem ⑨
mn:setPositioncc.p0, 0 ⑩
layer:addChildmn
return layer
end
上述第①和第②行代码是创建两种不同状态的精灵。第③行代码是创建精灵菜单项MenuItemSprite对象。第④行代码是设置开始菜单项startMenuItem位置,注意这个坐标是700, 170,由于700, 170的坐标是UI坐标,需要转换为OpenGL坐标。第⑤和⑦行代码是创建图片菜单项MenuItemImage对象。第⑥和⑧行代码是设置图片菜单项位置。第⑨行代码是Menu对象。第⑩行代码是菜单的位置mn:setPositioncc.p0, 0。由于背景图片大小是1136640,而Cocos Code IDE工具模板生成的窗口大小是960640,所以需要重新设置大小,修改main.lua代码如下:
local function main
collectgarbage"collect"
-- avoid memory leak
collectgarbage"setpause", 100
collectgarbage"setstepmul", 5000
cc.FileUtils:getInstance:addSearchPath"src"
cc.FileUtils:getInstance:addSearchPath"res"
cc.Director:getInstance:getOpenGLView:setDesignResolutionSize1136, 640, 0 ①
--create scene
local scene = require"GameScene"
local gameScene = scene.create
if cc.Director:getInstance:getRunningScene then
cc.Director:getInstance:replaceScenegameScene
else
cc.Director:getInstance:runWithScenegameScene
end
end
需要在第①行修改setDesignResolutionSize1136, 640, 0代码。5.3.3开关菜单开关菜单的菜单项类是MenuItemToggle,它是一种可以进行2种状态切换的菜单项。本节通过一个实例介绍其他复杂类型的开关菜单的使用。如图511所示是一个游戏音效和背景音乐设置界面,可以通过开关菜单实现这个功能,美术设计师为每一个设置项目音效和背景音乐分别准备了两张图片。
图511开关菜单实例
GameScene.lua中MenuItemImage菜单项的代码如下:
function GameScene:createLayer
local layer = cc.Layer:create
local director = cc.Director:getInstance
local sprite = cc.Sprite:create"menusetting-back.png"
sprite:setPositioncc.psize.width2, size.height2
layer:addChildsprite
-- 音效
local soundOnMenuItem = cc.MenuItemImage:create"menuon.png", "menuon.png"①
local soundOffMenuItem = cc.MenuItemImage:create"menuoff.png", "menuoff.png"②
local soundToggleMenuItem = cc.MenuItemToggle:createsoundOnMenuItem,
soundOffMenuItem ③
soundToggleMenuItem:setPositiondirector:convertToGLcc.p818, 220
local function menuSoundToggleCallbacksender
cclog"Sound Toggle."
end
soundToggleMenuItem:registerScriptTapHandlermenuSoundToggleCallback
-- 音乐
local musicOnMenuItem = cc.MenuItemImage:create"menuon.png", "menuon.png"④
local musicOffMenuItem = cc.MenuItemImage:create"menuoff.png", "menuoff.png"⑤
local musicToggleMenuItem = cc.MenuItemToggle:createmusicOnMenuItem,
musicOffMenuItem ⑥
musicToggleMenuItem:setPositiondirector:convertToGLcc.p818, 362
local function menuMusicToggleCallbacksender
cclog"Music Toggle."
end
musicToggleMenuItem:registerScriptTapHandlermenuMusicToggleCallback
-- Ok按钮
local okMenuItem = cc.MenuItemImage:create
"menuok-down.png",
"menuok-up.png"
okMenuItem:setPositiondirector:convertToGLcc.p600, 510
local mn = cc.Menu:createsoundToggleMenuItem, musicToggleMenuItem,okMenuItem ⑦
mn:setPositioncc.p0, 0
layer:addChildmn
return layer
end
上面第①行代码是创建音效开的图片菜单项。第②行代码是创建音效关的图片菜单项。第③行代码是创建开关菜单项MenuItemToggle。第④~⑥行代码创建了背景音乐开关菜单项。第⑦行代码是通过上面创建的开关菜单项创建Menu对象。本章小结通过对本章的学习,使读者了解了Cocos2dx Lua API文字和菜单的相关知识,本章介绍了标签类Label和LabelAtlas,另外,在菜单部分还介绍了文本菜单、精灵菜单、图片菜单和开关菜单等。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 海外用户
megBook.com.tw
Copyright (C) 2013 - 2024 (香港)大書城有限公司 All Rights Reserved.