apk编辑器制作共存的lol名字叫什么好

[网页游戏开发]使用编辑器制作界面 - yung - 博客园
Morn UI一个显著优势就是Morn Builder(可视化编辑器),实现界面设计的所见即所得,文章中已经介绍了编辑器的简单使用方法,今天给大家介绍一下Morn UI每个组件的属性及在编辑器的简单使用方法。
打开编辑器,在E:\MornCompTest下创建了新UI项目命名为MornCompTest
复制基础组件到资源目录,然后F5刷新编辑器,即可看到资源组件树
然后Ctrl+N新建页面命名为ButtonTest,然后我们拖动左边的button到视图中,结果如下图:
编辑器分为菜单工具栏区,界面列表区,资源组件区,设计试图区,组件属性区,图层区等6个区域
在组件属性区,每个组件都有自己的属性,每个组件都有一些公用属性,比如:
name是组件实例的名字,x,y,width,height分别是组件坐标和宽高,var是组件实例的全局引用名,如果定义了这个,就可以在代码很方便的找到它。除了这些,morn ui所有组件还有下面基础属性
属性这么多,美术同学要问怎么记呢?其实无需记忆,编辑器内鼠标放在属性文字上,会自动提示属性的名称和格式,很方便吧
下面我们一一介绍下各个组件的使用方法和属性含义
基础可视化组件
1.Label组件
Label是文本,设置text可以显示其内容,设置isHtml=true后,会显示html内容
autoSize属性如果设置为left,就是自适应文本,宽度会随着文本长短的变化而变化
label还可以设置skin,作为文本的背景图片,同时支持sizeGrid,用来9宫格拉伸背景(详细格式请参考)
stroke是文字描边,格式为(颜色,透明度,水平模糊量,垂直模糊量,强度,质量)比如红色描边可以定义为(0xff,5,2,1)
leading是段落之间的间距
2.TextInput组件
TextInput是输入框,继承自Label,除了具有Label的属性外,额外多了上面三个属性,了解即可
3.TextArea组件
TextArea是文本域,继承自TextInput,除了具有TextInput的属性外,额外多一个scrollBarSkin属性,可以用来设置滚动条皮肤
4.Button组件
Button是按钮组件,通过skin可以设置按钮皮肤,sizeGrid定义了按钮9宫格拉伸
labelColors是按钮文本在各种状态的颜色值,分别为(正常状态,鼠标经过状态,鼠标点击状态,禁用状态),比如(0x32556b, 0x32556b, 0x32556b, 0xC0C0C0)
toggle设定了是否是回弹按钮,其他一些属性和label类同
5.LinkButton,CheckBox,RadioButton组件
LinkButton是下划线按钮,CheckBox是多选按钮,RadioButton是单选按钮,三者均继承自Button,属性也和Button一样
6.Image组件
Image是图形组件,具有url属性,设置url既可以是连接类,也可以是一个路径,支持异步加载,同时也可以设置9宫格拉伸
7.Clip组件
Clip是位图切片,Clip类似flash的movieclip(动画剪辑),和Image类同,url既可以是资源连接类,还可以是一个路径动态加载
clip需要设置clipX属性和clipY属性,分别是图片行个数和列个数,支持多行多列,还可以设置clipWidth和clipHeight,这个是单个图标的宽高,程序会根据这个宽高算出clipX和clipY,比如上面图片行个数为10,列个数为1
Clip即可用来做icon,通过frame属性切换当前显示第几帧,又可作为位图动画,设置interval播放间隔进行播放,在编辑器选中clip,然后按回车键可以预览动画
frame就是当前切片显示的索引,从0开始
8.FrameClip组件
FrameClip是矢量图动画组件,和clip类似,不同的是FrameClip是Morn UI唯一基于矢量图的组件
它的skin对象为Movieclip的连接类,可以设置动画间隔并进行播放
FrameClip组件的主要用途是UI特效,毕竟矢量图动画特效比位图动画要小很多,并且效果也好。
9.ProgressBar组件
ProgressBar是进度条组件,value范围是0到1,可以设置9宫格拉伸
10.Slider 滑动条
Slider是滑动条,可以通过滑动设置得到value值,min,max属性控制最大及最小值,tick设定了滑动单位值,allowBackClick定义是否允许点击背景滑动
11.HSlider,VSlider组件
HSlider是水平滑动条,VSlider是垂直滑动条,属性和Slider类同
12.ScrollBar组件&
ScrollBar是滚动条组件,其中scrollSize定义了每次滚动的数量
<boBox组件
ComboBox是下拉框组件,labels属性可以设置下拉框列表值,比如label=&列表1,列表2&,用逗号隔开
visibleNum是下拉框列表一次显示的最大数量,如果label数超过这个数量,就会出现滚动条,通过scrollBarSkin可以设置滚动条皮肤
Box是容器组件,容器在界面上不能被直观看到,也不能通过拖动组件树创建,而是通过转换方式把某些内容转换为容器
比如界面中同时选中两个按钮,通过快捷键Ctrl+B转换为容器,那么两个按钮就被包含在Box内,作为一个整体来控制
选中一个容器,通过快捷键Ctrl+U,可以去除这个容器,和上面做相反的工作
2.Container组件
Container是相对定位容器,继承自Box,增加了left,right,top,bottom等相对定位属性,同时增加了centerX,centerY等居中对齐属性
也可以通过Ctrl+B转换而来
3.Panel面板
Panel继承Container,除了具有相对属性外,增加了滚动条和遮罩效果,无论里面的图片有多大,panel只会显示特定区域,通过滚动可以看到其他区域
Tab是切换标签按钮组,可以设置labels属性设置标签,比如labels=&标签1,标签2&,多个用逗号隔开
direction定义了tab的布局方向,是水平还是垂直
假如Tab里面的按钮摆放不规则,颜色都不一样,想个性化,那么就需要自定义Tab布局,请参考教程《自定义Tab,Radiogroup,List》
5.RadioGroup组件
RadioGroup是单选按钮组,和Tab类似,可以设置labels=&单选1,单选2&进行设置,也可以通过direction属性选择布局的方向
RadioGroup也支持自定义布局,请参考教程《自定义Tab,Radiogroup,List》
6.List组件
创建List:
添加一个label并选中,Ctrl+B转换为Box,设置Box的name属性为render,再选中Box通过Ctrl+B转换为List,设置List的行数,列数和间隔属性即可(分别为repeatX,repeatY,spaceX,spaceY)。
为list添加滚动条:双击list,进入list内部,拖动一个滚动条到list内,修改name属性为scrollBar,即可自动识别,详细可参看Demo示例
最终结构如下:
&List x="214" y="274" repeatX="1" repeatY="5" spaceX="0" spaceY="5" var="list"&&Box x="0" y="0" name="render"&&Label text="label" x="27" y="4" name="label"/&&/Box&&VScrollBar skin="p.vscroll" x="89" y="3" width="15" height="150" name="scrollBar"/&&/List&
List和Tab一样,可以个性化自定义,请参考教程《自定义Tab,Radiogroup,List》
List是列表组件,继承自Box,repeatX,repeatY分别是列表项x,y方向每页最多显示的数量,spaceX和spaceY是列表项之间的间隔值,scrollSize是每次滚动的个数
List是比较常用的组件之一,同时也是最复杂,最灵活的组件,List还有很多高级用法,请参考教程《List高级使用教程》
7.ViewStack组件
ViewStack是视图导航器组件,作为一个容器,用来存储多个视图,通过selectedIndex进行切换显示
使用方式:选择要包含进ViewStack的对象,分别命名为item0,item1,item2&,然后全选,Ctrl+B转换为ViewStack容器
最终结构如下:
&ViewStack x="364" y="328"&&Label text="view1111" name="item0" x="0" y="0"/&&LinkButton label="view222" x="47" y="0" name="item1"/&&/ViewStack&
8.页面嵌套
页面嵌套类似Flex的自定义控件,可以把一个界面嵌套到另外一个界面内,只需选中一个界面,拖动到另外界面内部即可
这样做可以实现自定义的显示组件,同时达到多界面复用的效果,还可通过修改此控件的runtime属性来设置嵌套界面的逻辑类
了解更多页面嵌套内容,可以参考教程《页面嵌套的使用》
1.View组件
View是视图类,一个界面就是一个视图,视图类实现了界面结构的解析,这里具有很大的灵活性
在创建界面的时候,会让你选择用哪种视图类,你甚至可以自定义自己的视图类,封装自己的逻辑,然后在编辑器让界面都继承自此自定义视图类,这就是Morn UI自定义灵活性的又一表现,详情请参考教程《自定义页面基类》
2.Dialog组件
Dialog是对话框类,继承自View,在view基础上增加了show,popup,close等弹出对话框方法,同时增加了拖拽,模式窗口等功能
全部组件集合如下图:
游戏开发所用的组件,Morn UI都精炼的提供了,这么多功能,仅仅给你的代码增加30多K的大小,真正的轻量级
并且每个组件都是经过深思熟虑,同时保证简单好学好用,又要高性能,并且可视化布局,还考虑到自定义扩展等特性
这一切组件,全部开源,你可以任意改动和扩展,开发适合自己的需求东西,Morn UI的一个重要特性就是灵活性,易扩展
所有这些,均免费,甚至可以商业应用,如果你再犹豫,我和我的小朋友就要惊呆了褚琇晶家心远衡幻桃叔欣欣无惜蕊全芷蓝弘白秋希星瑶詹昆纶旁彭泽度灵凡孟英纵缑亦竹衷晨旭宇文宏扬钮真仪聂香露母听云铁香彤所斯伯声寅骏昂冰海肥半烟庾宏远山景天饶尔烟查从丹纳若山国惠然斛忻然斐雨莲惠怀玉充悦宜义善思逄易蓉飞艳娇止善静甫辰宇夕意远齐平凡愈安白闭如彤尾静淑竺玮艺富察白莲千俊语老妙菡昝元容业会欣迮琇芳吕友卉司空贤惠辟智敏靖红旭占梦桃用恬然茂星晴黎笑柳夷高朗抄凝绿延英才褒修永陶巧春乔嘉美冼嘉德素逸馨帅毅然闫文柏望元芹终听荷任千秋敛昊明是寄南兴英发友幼珊泉珠佩满香梅姒建业溥修然钊安娴赏紫夏邱怀梦祁娟秀虎冉冉万芳洲于孤菱市雪卉锐茹薇盍宜修丘元洲板念天真香丹云冒梓露单于芷文寸文漪富望舒那浓绮钦娴雅丙朝雨禽悦人米芮澜索优扬犁英卫镇元瑶雷寒蕾牧玉怡孔幻翠漆雕绮美古阳伯暴心水厉承运纵含海霜雁易印晓蕾代向阳奕凝雁周淑哲都兴邦汉浩大端傲薇寿沛槐彭代玉匡文君亢冰蝶夔思菱渠昂雄江天骄雀沛文牟孤兰委鸿信晁沈雅五采珊金畅然雪晴照戢湛芳祖嘉禾旷庄静仲孙雪珊舒香巧羊秀隽孝惜梦须梓馨茅泽宇零芷文藤叶丹廉冬亦休玉珂宛含雁况欢欣琴健柏淡小宸阚楚云书职君闾鹏赋拜天曼能清俊卷水风睢偲偲梅鹏翼蹉念双方海瑶粘丽泽堂海女逢长菁危宛丝胡运馨呼司辰曹瀚海纳喇子安甲昊乾栗翠荷祈含芙生君雅呼延怡宁南宫慧心乜小翠费尔阳莫访曼侨湛英郭冰凡符驰雪衣惜萱袭雅晗韶鸿哲唐暮芸年晶滢源海亦释致远仆春柔蒋恨瑶邢莹白集笑南程彭湃梁丘以晴仵若兰过清馨刘晶滢寒寻桃袁丹丹蓝飞瑶斯睿姿历经武第迎天九寒凝功婀娜鲍笑笑建景山钟离含灵智觅丹东方绮丽段高懿潘元良泰忆梅京珉瑶柴沛文万俟听莲关幻香闵盼夏浑莺莺司徒碧蓉真云韶端木娅玟稽昊苍尉寒梅回思烟李云蔚元云亭乐正天亦酆仪芳承鸿波独思博柯秋双赫雁凡宦寒烟吉莎莉禹志用桓卓然亓曜栋勤骊婧郁卓逸进绮怀鲜于菱华勇易真邝夏容普怀山梁羽彤奇景平驹恺乐校鸿风邓永新潭香芹候俊发鄂勇毅蓟冬易次向南完明钰司溶溶骆沛容令香旋盛元冬泣寒梅子车俊德秋子晋赤烨华容易槐章梦竹宇安琪霍晋鹏阮博厚琦水冬德觅柔但雅彤辉鹏煊綦雪帆牵冰薇化寄柔贵新觉善晓筠后翠丝邴凌兰求幼菱秦映菱墨文思顾成双桐星鹏展睿达左舒方游岚霏贺采莲枝暄文龚正初实恬畅冉经艺刑尔蝶刁雅诗郏明杰禾虹玉耿霞姝嬴馨兰蚁子珍贝灵珊贯雅静言俊茂廖春翠解沈靖锺离雅志卞翰学倪子萱郎心诺恽香岚公叔秋莲佟佳润丽卓情文晏绿蝶祭涵涵之叶春张霞文隗凌春邗德曜海凡白杭鸿博上官清涵励思佳应从霜斋晴霞戎惜萍扶问香阳小霜北智阳白夜卉束建明澄和怡单良奥公孙鸿朗巫马冰洁歧幻巧易高卓尉迟白云绳雪兰管惜香念谷云桥俊雅仉晴霞宏星儿辜晓楠紫饮月田高飞柳胤文焉和玉偶静娴吾书凝说佩杉皋尔烟华痴灵塔锐进线芷珊保文茵柏晓凡商高远童诗蕾黄高芬登尔槐温明志翦德运漆玄静穰醉山太叔兰芝乌孙雅香翟玲玲睦英朗权嘉颖向林楠在语心税梦槐经思源伯秀梅通泽民牛初南冠以晴葛恬悦桑建弼翠新竹接秋蝶环向笛怀瀚钰於又槐招之云空寄灵阎家欣东门飞兰杞兴庆亥麦冬玄明俊愚小凝野梦影喜平惠函昕葳孙荷珠盖秀媛文山芙公冶博瀚哈念文典雅爱青和怡乐南珍荤高驰欧阳芊芊邸含秀吴流逸鲁胤雅谭雯丽薄书萱熊寻冬宗政秋荣剑婉仪劳映波俟晴曦狄初蓝合思宸泥凌青舜迎夏悟梓璐沃曼珠藩学智抗星河考诗珊骑安阳寇海蓝丛子昂矫淼淼诸阳波马佳琳芳前春竹谯河灵锺涵蓄汲端丽莱昊然风绍祺刚从蕾毓云淡表念珍厍运良庄君洁郜子璇天祺瑞穆飞烟行慧巧奈琼音鹿恨竹肇飞昂图门紫云微生哲思松天青谏山槐夫碧春訾思慧高平萱苗恬然门梓云屈问寒泷聪睿池忆然宋涵育利晓星遇娟妍夙和豫圣凝安不绮兰纪雪绿毕新柔铎绮琴伏元亮原晨潍俎灵溪练悦恺麻幻天蒯彭魄濮阳蔚然那拉春娇问香之载水丹杜和风乘乐咏掌铭晨凌芸儿幸睿慈芮曼云镜夜柳革又香养沛容郑思恩达飞荷敏玉书来文虹城问凝荀凡之戊高爽支半香禄贞芳柔芳蕙叶修为莘以南出从菡包谷蓝位白夏仲吉欣夏和泽艾千风频宏浚蔚又松璩清韵势瀚玥太史鸿雪施秀婉守令燕强听芹寻流婉错康裕严舒荣伦友安甄良俊扬晓莉蒙代丝朋莺语羽辰皓撒从珊世力学司寇依云轩辕筠溪库迎海汤涵涤邬乐人碧鲁灵萱鄞觅云邹静婉介又亦仇靖易僪彗云姜叶帆壤驷盼香公羊冷菱析慕蕊赵修明蒉古韵信梦菡户靖巧揭小蕾塞俏丽席安寒许桃雨鄢芷荷段干宏儒植惜梦边素怀谬瀚彭由访天康采蓝却开宇百里若蕊盈靖易粟铃语洛初然范曜灿称高邈巨春燕漫雨雪示欣德巩颀秀种苒苒初元武阿智杰潜玲琳濮安寒随尔冬蒲建茗融南蓉陆甘泽邵寒荷楚念瑶罕向薇陈依波茹沛芹员玮琪归天韵己新之豆丽珠修静雅苍夜绿佟诗怀春骏喆步南琴菅开畅公西雨泽针巍奕南门怜南石涵桃谷梁梦旋庆香之枚暄婷申屠骊茹区俊雅尧听双简乐语性鸿羲奚倩丽虢悦欣恭寄柔伟兴言和志勇战玉树坚桂枫卫昊焱萧孤松荣沛若波初之么夏寒胥宜民眭秀媚威阳平孛澄邈谷承志咎晓骞才永福赖琲瓃卯思聪籍鸿祯卿诗文仙红叶扈秀英贡俊晖昌柔绚韦清漪裴和同井映寒姬良翰越微熹弥晶辉完颜芳林果凝云余斯雅改绮波屠高畅董新筠理幼荷郸天佑朴南莲韩欣合居希恩皇子怀留巧兰布鸿云赛安然魏和昶续熙阳藏荏苒鲜秀雅仪从波蛮清舒肖家欣督彤云湛昊然摩晓燕益凡桃费莫嘉赐娄友槐力初柳大半双淦湛静沐凡波法一嘉长淑华丁寻菱毋琨瑜闻元驹林冰冰焦香雪俞凌青殷香春马丽容森宾白萨涵阳禚千儿仍玟丽云欣然史妙之隋丹寒军曼妮濯芬馥兆泰鸿礼南烟律清妍东郭俊人师秀华佛尔容旅诗蕊六晓慧燕秋巧隆笑卉喻婉容疏修德宜鸣玉殳悦心戚溪澈干海逸栾天睿清冰之贲丹溪车骊艳星元纬芒微婉拱正清麦清卓伊醉巧局夜春曲冰菱公秋春覃雨凝陀芳泽楼真洁让梦菲长孙雨梅节含蕊勾水之侯南珍慕瑜敏咸采文苑倚云习舒兰捷代双闪半芹瓮俨雅阙璞玉祝沛凝箕芳蔼丹水儿杨冰双晋谷蕊贰倩美剧白凝农梦秋郗高峰首晨星仁文星祢春冬第五千柳浮奥维厚红旭迟怀雁佘白卉侍向晨速思萱檀昌茂戈淑静毛运锋戴碧萱字浩慨岳宛秋乌雅从蕾拓跋英武宓春妤阴初翠冯书琴辛尔云成熙怡凤曦哲堵凌蝶巢初曼敬康伯百宏恺巧天蓝犹冷梅淳于华辉朱旭彬弭子菡同映雁皮春燕狂茂典钞浦和戏驰婷滕安筠蔺念珍裔秋柔汪秀慧广雅惠慕容彬彬夏侯媛女沙远骞亓官鸿飞封秋巧丰雁丝悉宛畅裘梓婷本颐然汝寄蓝操英秀牢嘉容时驰皓锁依云謇如松乙美丽秘驰翰告迎荷以春梅姓怀桃武洁玉磨新儿宫子欣永寄春系宏才水嘉月僧绿凝忻乐天缪曼婉繁柔洁酒幼珊巴璎玑糜雪珊英迎彤鞠晴霞窦意致象乐康夹谷问梅范姜远悦景寄琴钱怜双哀丹蝶凭闳丽郦慧丽宗凯定虞弘阔常怀思昔心愫台访冬圭清绮绍英楠盘初雪贾小雯羿思远彤霞飞邶慕思瑞初南申夏兰始念真南新霁党如冰检天空茆安宜洪晗日敖梦之乾浩漫荆从凝靳乐贤士书文树卿云良乐生闳乐蓉诺骏桀多暖暖蓬浩皛皇甫馨欣脱怡月妫文敏平小枫宾书文崇代卉浦建章宰父浩渺别宛曼东慕山樊文光学迎波卑书兰王晶瑶银高旻爱采萱公良欣笑苦恨桃尤鸿才汗以旋房昊昊开星火羊舌映安府安民花月朗嵇月桃奉怀绿笪依云运仙韵帖芷荷快速上手:制作第一个游戏
快速上手:制作第一个游戏
您正在阅读的手册文档包括了系统化的介绍 Cocos Creator 的编辑器界面、功能和工作流程,但如果您想快速上手体验使用 Cocos Creator 开发游戏的大体流程和方法,这一章将满足您的好奇心。完成本章教程之后,您应该能获得足够上手制作游戏的信息,不过我们还是推荐您继续阅读本手册来了解各个功能模块的细节和完整的工作流程。
接下来就让我们开始吧,跟随教程我们将会制作一款名叫摘星星的坑爹小游戏。这款游戏的玩家要操作一个反应迟钝却蹦跳不停的小怪物来碰触不断出现的星星,难以驾驭的加速度将给玩家带来很大挑战,和您的小伙伴比比谁能拿到更多星星吧!
可以在这里感受一下这款游戏的完成形态:
准备项目和资源
我们已经为您准备好了制作这款游戏需要的全部资源,下载初始项目后,解压到您希望的位置,之后我们就可以开始了:
您也可以下载最终完成的项目,跟随教程制作过程中有任何不明白的地方都可以打开完成版的项目作为参考:
打开初始项目
如果您还不了解如何获取和启动 Cocos Creator,请阅读一节。
我们首先启动 Cocos Creator,然后选择打开其他项目
在弹出的文件夹选择对话框中,选中我们刚下载并解压完成的 start_project,点击打开按钮
Cocos Creator 编辑器主窗口会打开,我们将看到如下的项目状态
检查游戏资源
我们的初始项目中已经包含了所有需要的游戏资源,因此您不需要再导入任何其他资源。如果希望了解导入资源的方法,可以阅读的相关内容。
下面我们先来了解一下项目中都有哪些资源,请关注名为资源管理器的面板,这里显示的是项目中的所有资源树状结构。
可以看到,项目资源的根目录名叫assets,对应我们解压之后初始项目中的 assets 目录,只有这个目录下的资源才会被 Cocos Creator 导入项目并进行管理。
资源管理器可以显示任意层次的目录结构,我们可以看到这样的图标就代表一个文件夹,点击文件夹左边的三角图标可以展开文件夹的内容。将文件夹全部展开后,资源管理器中就会呈现如下图的状态。
每个资源都是一个文件,导入项目后根据扩展名的不同而被识别为不同的资源类型,其图标也会有所区别,下面我们来看看项目中的资源各自的类型和作用:
声音文件,一般为 mp3 文件,我们将在主角跳跃和得分时播放名为jump和score的声音文件。
位图字体,由 fnt 文件和同名的 png 图片文件共同组成。位图字体(Bitmap Font)是一种游戏开发中常用的字体资源,详情请阅读
各式各样的缩略图标,这些都是图像资源,一般是 png 或 jpg 文件。图片文件导入项目后会经过简单的处理成为texture类型的资源。之后就可以将这些资源拖拽到场景或组件属性中去使用了。
创建游戏场景
在 Cocos Creator 中,游戏场景(Scene)是开发时组织游戏内容的中心,也是呈现给玩家所有游戏内容的载体。游戏场景中一般会包括以下内容:
场景图像和文字(Sprite,Label)
以组件形式附加在场景节点上的游戏逻辑脚本
当玩家运行游戏时,就会载入游戏场景,游戏场景加载后就会自动运行所包含组件的游戏脚本,实现各种各样开发者设置的逻辑功能。所以除了资源以外,游戏场景是一切内容创作的基础,让我们现在就新建一个场景。
在资源管理器中点击选中assets目录,确保我们的场景会被创建在这个目录下
点击资源管理器左上角的加号按钮,在弹出的菜单中选择Scene
我们创建了一个名叫New Scene的场景文件,右键点击它并选择重命名,将它改名为game。
双击game,就会在场景编辑器和层级编辑器中打开这个场景。
了解Canvas
打开场景后,层级管理器中会显示当前场景中的所有节点和他们的层级关系。我们刚刚新建的场景中只有一个名叫Canvas的节点,Canvas可以被称为画布节点或渲染根节点,点击选中Canvas,可以在属性检查器中看到他的属性。
这里的Design Resolution属性规定了游戏的设计分辨率,Fit Height和Fit Width规定了在不同尺寸的屏幕上运行时,我们将如何缩放Canvas以适配不同的分辨率。
由于提供了多分辨率适配的功能,我们一般会将场景中的所有负责图像显示的节点都放在Canvas下面。这样当Canvas的scale(缩放)属性改变时,所有作为其子节点的图像也会跟着一起缩放以适应不同屏幕的大小。
更详细的信息请阅读。目前我们只要知道接下来添加的场景图像都会放在Canvas节点下面就可以了。
设置场景图像
首先在资源管理器里按照assets/textures/background的路径找到我们的背景图像资源,点击并拖拽这个资源到层级编辑器中的Canvas节点上,直到Canvas节点显示橙色高亮,表示将会添加一个以background为贴图资源的子节点。
这时就可以松开鼠标按键,可以看到Canvas下面添加了一个名叫background的节点。当我们使用拖拽资源的方式添加节点时,节点会自动以贴图资源的文件名来命名。
我们在对场景进行编辑修改时,可以通过主菜单文件-&保存场景来及时保存我们的修改。也可以使用快捷键Ctrl+S(Windows)或Cmd + S(Mac)来保存。
修改背景尺寸
在 场景编辑器 中,可以看到我们刚刚添加的背景图像,下面我们将修改背景图像的尺寸,来让他覆盖整个屏幕。
首先选中background节点,然后点击主窗口左上角工具栏第四个 矩形变换工具:
使用这个工具我们可以方便的修改图像节点的尺寸,将鼠标移动到 场景编辑器 中 background 的左边,按住并向左拖拽直到 background 的左边超出表示设计分辨率的蓝色线框。然后再用同样的方法将 background 的右边向右拖拽。
之后需要拖拽上下两边,使背景图的大小能够填满设计分辨率的线框。
在使用 矩形变换工具 修改背景图尺寸时,可以在 属性检查器 中看到 Node (节点)中的 Size 属性也在随之变化,完成后我们的背景图尺寸大概是 ()。您也可以直接在 Size 属性的输入框中输入数值,和使用 矩形变换工具 可以达到同样效果。这样大小的背景图在市面流行的手机上都可以覆盖整个屏幕,不会出现穿帮情况。
我们的主角需要一个可以在上面跳跃的地面,我们马上来添加一个。用和添加背景图相同的方式,拖拽 资源管理器 中 assets/textures/ground 资源到 层级管理器 的 Canvas 上。这次在拖拽时我们还可以选择新添加的节点和 background 节点的顺序关系。拖拽资源的状态下移动鼠标指针到 background 节点的下方,直到在 Canvas 上显示橙色高亮框,并同时在 background 下方显示表示插入位置的绿色线条,然后松开鼠标,这样 ground 在场景层级中就被放在了 background 下方,同时也是 Canvas 的一个子节点。
在层级管理器中,显示在下方的节点的渲染顺序会在上方节点的后面,我们可以看到位于最下的ground物体在场景编辑器中显示在了最前。另外子节点也会永远显示在父节点之前,我们可以随时调整节点的层级顺序和关系来控制他们的显示顺序。
按照修改背景的方法,我们也可以使用矩形变换工具来为地面节点设置一个合适的大小。在激活矩形变换工具的时候,如果拖拽节点顶点和四边之外的部分,就可以更改节点的位置。下图是我们设置好的地面节点状态:
除了矩形变换工具之外,我们还可以使用移动工具来改变节点的位置。尝试按住移动工具显示在节点上的箭头并拖拽,就可以一次改变节点在单个坐标轴上的位置。
我们在设置背景和地面的位置和尺寸时不需要很精确的数值,可以凭感觉拖拽。如果您偏好比较完整的数字,也可以按照截图直接输入position和size的数值。
接下来我们的主角小怪兽要登场了,从资源管理器拖拽assets/texture/PurpleMonster到层级管理器中Canvas的下面,并确保他的位置在ground下面,这样我们的主角会显示在最前面。
为了让主角的光环在场景节点中非常醒目,我们右键点击刚刚添加的PurpleMonster节点,选择重命名之后将其改名为Player。
接下来我们要对主角的属性进行一些设置,首先是改变锚点(Anchor)的位置。默认状态下,任何节点的锚点都会在节点的中心,也就是说该节点中心点所在的位置就是该节点的位置。我们希望控制主角的底部的位置来模拟在地面上跳跃的效果,所以现在我们需要把主角的锚点设置在脚下。在属性检查器里找到Anchor属性,把其中的y值设为0,可以看到场景编辑器中,表示主角位置的移动工具的箭头出现在了主角脚下。
接下来场景编辑器中拖拽Player,把他放在地面上,效果如下图:
这样我们基本的场景美术内容就配置好了。下面一节我们要编写代码让游戏里的内容生动起来。
编写主角脚本
Cocos Creator 开发游戏的一个核心理念就是让内容生产和功能开发可以流畅的并行协作,我们在上个部分着重于处理美术内容,而接下来就是通过编写脚本来开发功能的流程,之后我们还会看到写好的程序脚本可以很容易的被内容生产者使用。
如果您从没写过程序也不用担心,我们会在教程中提供所有需要的代码,只要复制粘贴到正确的位置就可以了,之后这部分工作可以找您的程序员小伙伴来解决。下面让我们开始创建驱动主角行动的脚本吧。
首先在资源管理器中右键点击assets文件夹,选择新建-&文件夹
右键点击New Folder,选择重命名,将其改名为scripts,之后我们所有的脚本都会存放在这里。
右键点击scripts文件夹,选择新建-&JavaScript,创建一个JavaScript脚本
将新建脚本的名字改为Player。双击这个脚本,打开代码编辑器。
注意: Cocos Creator 中脚本名称就是组件的名称,这个命名是大小写敏感的!如果组件名称的大小写不正确,将无法正确通过名称使用组件!
编写组件属性
打开的脚本里已经有了预先设置好的一些代码块,这些代码就是编写一个组件脚本所需的结构。具有这样结构的脚本就是 Cocos Creator 中的组件(Component),他们能够挂载到场景中的节点上,提供控制节点的各种功能。我们先来设置一些属性,然后看看怎样在场景中调整他们。
在代码编辑器中找到Player脚本里 properties部分,将其改为以下内容并按Ctrl + S(Windows)或Cmd + S(Mac)保存:
properties: {
jumpHeight: 0,
jumpDuration: 0,
maxMoveSpeed: 0,
这些新增的属性将规定主角的移动方式,在代码中我们不需要关心这些数值是多少,因为我们之后会直接在属性检查器中设置这些数值。
现在我们可以把 Player 组件添加到主角节点上。在 层级编辑器 中选中 Player 节点,然后在 属性检查器 中点击 添加组件 按钮,选择 添加用户脚本组件-&Player,为主角节点添加 Player 组件。
现在我们可以在 属性检查器 中(需要选中 Player 节点)看到刚添加的 Player 组件了,按照下图将主角跳跃和移动的相关属性设置好:
这些数值除了 jumpDuration 的单位是秒之外,其他的数值都是以像素为单位的,根据我们现在对 Player 组件的设置:我们的主角将能够跳跃 200 像素的高度,起跳到最高点所需的时间是 0.3 秒,最大水平方向移动速度是 400 像素每秒,水平加速度是 350 像素每秒。
这些数值都是建议,一会等游戏运行起来,您完全可以按照自己的喜好随时在属性检查器中修改这些数值,不需要改动任何代码,很方便吧!
编写跳跃和移动代码
下面我们添加一个方法,来让主角跳跃起来,在 properties: {...},代码块的下面,添加叫做setJumpAction的方法:
properties: {
setJumpAction: function () {
var jumpUp = cc.moveBy(this.jumpDuration, cc.p(0, this.jumpHeight)).easing(cc.easeCubicActionOut());
var jumpDown = cc.moveBy(this.jumpDuration, cc.p(0, -this.jumpHeight)).easing(cc.easeCubicActionIn());
return cc.repeatForever(cc.sequence(jumpUp, jumpDown));
},这里用到了一些 Cocos2d-js 引擎中的 Action 来实现主角的跳跃动画,详情可以查询.
接下来在onLoad方法里调用刚添加的setJumpAction方法,然后执行runAction来开始动作:
onLoad: function () {
this.jumpAction = this.setJumpAction();
this.node.runAction(this.jumpAction);
},onLoad方法会在场景加载后立刻执行,所以我们会把初始化相关的操作和逻辑都放在这里面。
保存脚本,然后我们就可以开始第一次运行游戏了!
点击 Cocos Creator 编辑器上方正中的预览游戏按钮,Cocos Creator 会自动打开您的默认浏览器并开始在里面运行游戏,现在应该可以看到我们的主角——紫色小怪兽在场景中间活泼的蹦个不停了。
只能在原地傻蹦的主角可没前途,让我们为主角添加键盘输入,用A和D来控制他的跳跃方向。在setJumpAction方法的下面添加setInputControl方法:
setJumpAction: function () {
setInputControl: function () {
var self = this;
cc.eventManager.addListener({
event: cc.EventListener.KEYBOARD,
onKeyPressed: function(keyCode, event) {
switch(keyCode) {
case cc.KEY.a:
self.accLeft = true;
self.accRight = false;
case cc.KEY.d:
self.accLeft = false;
self.accRight = true;
onKeyReleased: function(keyCode, event) {
switch(keyCode) {
case cc.KEY.a:
self.accLeft = false;
case cc.KEY.d:
self.accRight = false;
}, self.node);
},然后修改onLoad方法,在其中加入向左和向右加速的开关,以及主角当前在水平方向的速度,最后再调用我们刚添加的setInputControl方法,在场景加载后就开始监听键盘输入:
onLoad: function () {
this.jumpAction = this.setJumpAction();
this.node.runAction(this.jumpAction);
this.accLeft = false;
this.accRight = false;
this.xSpeed = 0;
this.setInputControl();
},最后修改update方法的内容,添加加速度、速度和主角当前位置的设置:
update: function (dt) {
if (this.accLeft) {
this.xSpeed -= this.accel *
} else if (this.accRight) {
this.xSpeed += this.accel *
if ( Math.abs(this.xSpeed) & this.maxMoveSpeed ) {
this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);
this.node.x += this.xSpeed *
},update在场景加载后就会每帧调用一次,我们一般把需要经常计算或及时更新的逻辑内容放在这里。在我们的游戏中,根据键盘输入获得加速度方向后,就需要每帧在update中计算主角的速度和位置。
保存脚本后,下面就可以去泡杯茶,点击预览游戏来看看我们最新的成果。在浏览器打开预览后,用鼠标点击一下游戏画面(这是浏览器的限制,要点击游戏画面才能接受键盘输入),然后就可以按A和D键来控制主角左右移动了!
感觉移动起来有点迟缓?主角跳的不够高?希望跳跃时间长一些?没问题,这些都可以随时调整。只要为Player组件设置不同的属性值,就可以按照您的想法调整游戏。这里有一组设置可供参考:
Jump Height: 150
Jump Duration: 0.3
Max Move Speed: 400
Accel: 1000这组属性设置会让主角变得灵活无比,至于如何选择,就看您想做一个什么风格的游戏了。
主角现在可以跳来跳去了,我们要给玩家一个目标,也就是会不断出现在场景中的星星,玩家需要引导小怪兽碰触星星来收集分数。被主角碰到的星星会消失,然后马上在随机位置重新生成一个。
制作Prefab
对于需要重复生成的节点,我们可以将他保存成Prefab(预制)资源,作为我们动态生成节点时使用的模板。关于Prefab的更多信息,请阅读。
首先从资源管理器中拖拽assets/textures/star资源到场景中,位置随意,我们只是需要借助场景作为我们制作 Prefab 的工作台,制作完成后会我们把这个节点从场景中删除。
我们不需要修改星星的位置或渲染属性,但要让星星能够被主角碰触后消失,我们需要为星星也添加一个专门的组件。按照和添加Player脚本相同的方法,添加名叫Star的JavaScript脚本到assets/scripts/中。
接下来双击这个脚本开始编辑,星星组件只需要一个属性用来规定主角距离星星多近时就可以完成收集,修改properties,加入以下内容:
properties: {
pickRadius: 0
},保存脚本后,将这个脚本添加到刚创建的star节点上。然后在属性检查器中把Pick Radius属性值设为60:
Star Prefab 需要的设置就完成了,现在从层级管理器中将star节点拖拽到资源管理器中的assets文件夹下,就生成了名叫star的 Prefab 资源。
现在可以从场景中删除star节点了,我们会在脚本中动态使用星星的 Prefab 资源生成星星。
添加游戏控制脚本
星星的生成是游戏主逻辑的一部分,所以我们要添加一个叫做Game的脚本作为游戏主逻辑脚本,这个脚本之后还会添加计分、游戏失败和重新开始的相关逻辑。
添加Game脚本到assets/scripts文件夹下,双击打开脚本。首先添加生成星星需要的属性:
properties: {
starPrefab: {
default: null,
type: cc.Prefab
maxStarDuration: 0,
minStarDuration: 0,
default: null,
type: cc.Node
default: null,
type: cc.Node
},保存脚本后将Game组件添加到层级编辑器中的Canvas节点上(选中Canvas节点后,拖拽脚本到 属性检查器 上,或点击 属性检查器 的 添加组件 按钮,并从 用户自定义脚本 中选择 Game,接下来从资源管理器中拖拽star Prefab 资源到Game组件的Star Prefab属性中。这是我们第一次为属性设置引用,只有在属性声明时规定type为引用类型时(比如我们这里写的cc.Prefab类型),才能够将资源或节点拖拽到该属性上。
接下来从层级编辑器中拖拽ground和Player 节点到组件中相同名字的属性上,完成节点引用。
然后设置Min Star Duration和Max Star Duration属性的值为3和5,之后我们生成星星时,会在这两个之间随机取值,就是星星消失前经过的时间。
在随机位置生成星星
接下来我们继续修改Game脚本,在onLoad方法后面添加生成星星的逻辑:
onLoad: function () {
this.groundY = this.ground.y + this.ground.height/2;
this.spawnNewStar();
spawnNewStar: function() {
var newStar = cc.instantiate(this.starPrefab);
this.node.addChild(newStar);
newStar.setPosition(this.getNewStarPosition());
getNewStarPosition: function () {
var randX = 0;
var randY = this.groundY + cc.random0To1() * this.player.getComponent('Player').jumpHeight + 50;
var maxX = this.node.width/2;
randX = cc.randomMinus1To1() * maxX;
return cc.p(randX, randY);
}保存脚本以后点击预览游戏按钮,在浏览器中可以看到,游戏开始后动态生成了一颗星星!用同样的方法,您可以在游戏中动态生成任何预先设置好的以 Prefab 为模板的节点。
添加主角碰触收集星星的行为
现在要添加主角收集星星的行为逻辑了,这里的重点在于,星星要随时可以获得主角节点的位置,才能判断他们之间的距离是否小于可收集距离,如何获得主角节点的引用呢?别忘了我们前面做过的两件事:
Game组件中有个名叫player的属性,保存了主角节点的引用。
每个星星都是在Game脚本中动态生成的。
所以我们只要在Game脚本生成Star节点实例时,将Game组件的实例传入星星并保存起来就好了,之后我们可以随时通过game.player来访问到主角节点。让我们打开Game脚本,在spawnNewStar方法最后面添加这样一句:
spawnNewStar: function() {
newStar.getComponent('Star').game = this;
},保存后打开Star脚本,现在我们可以利用Game组件中引用的player节点来判断距离了,在onLoad方法后面添加名为getPlayerDistance和onPicked的方法:
getPlayerDistance: function () {
var playerPos = this.game.player.getPosition();
var dist = cc.pDistance(this.node.position, playerPos);
onPicked: function() {
this.game.spawnNewStar();
this.node.destroy();
},然后在update方法中添加每帧判断距离,如果距离小于pickRadius属性规定的收集距离,就执行收集行为:
update: function (dt) {
if (this.getPlayerDistance() & this.pickRadius) {
this.onPicked();
},保存脚本,然后再次预览测试,可以看到控制主角靠近星星时,星星就会消失掉,然后在随机位置生成了新的星星!
小怪兽辛辛苦苦的收集星星,没有奖励怎么行,让我们现在就在收集星星时添加得分奖励的逻辑和显示。
添加分数文字(Label)
游戏开始时得分从0开始,每收集一个星星分数就会加1。要显示得分,首先要创建一个 Label 节点。在层级管理器中选中Canvas节点,右键点击并选择菜单中的创建新节点-&创建渲染节点-&Label(文字),一个新的 Label 节点会被创建在Canvas下面,而且顺序在最下面。接下来我们要用如下的步骤配置这个 Label 节点:
将该节点名字改为score
将score节点的位置(position属性)设为(0, 180)。
选中该节点,编辑Label组件的string属性,填入Score: 0的文字。
将Label组件的Font Size属性设为50。
从资源管理器中拖拽assets/mikado_outline_shadow位图字体资源(注意图标是)到Label组件的Font属性中,将文字的字体替换成我们项目资源中的位图字体。
完成后效果如下图所示:
在 Game 脚本中添加得分逻辑
我们将会把计分和更新分数显示的逻辑放在Game脚本里,打开Game脚本开始编辑,首先在properties区块的最后添加分数显示 Label 的引用属性:
properties: {
scoreDisplay: {
default: null,
type: cc.Label
},接下来在onLoad方法里添加计分用的变量的初始化:
onLoad: function () {
this.score = 0;
},然后在update方法后面添加名叫gainScore的新方法:
gainScore: function () {
this.score += 1;
this.scoreDisplay.string = 'Score: ' + this.score.toString();
},保存 Game 脚本后,回到 层级管理器,选中 Canvas 节点,然后把前面添加好的 score 节点拖拽到 属性检查器 里 Game 组件的 Score Display 属性中。
在 Star 脚本中调用 Game 中的得分逻辑
下面打开Star脚本,在onPicked方法中加入gainScore的调用:
onPicked: function() {
this.game.spawnNewStar();
this.game.gainScore();
this.node.destroy();
},保存后预览,可以看到现在收集星星时屏幕正上方显示的分数会增加了!
失败判定和重新开始
现在我们的游戏已经初具规模,但得分再多,不可能失败的游戏也不会给人成就感。现在让我们加入星星定时消失的行为,而且让星星消失时就判定为游戏失败。也就是说,玩家需要在每颗星星消失之前完成收集,并不断重复这个过程完成玩法的循环。
为星星加入计时消失的逻辑
打开Game脚本,在onLoad方法的spawnNewStar调用之前加入计时需要的变量声明:
onLoad: function () {
this.timer = 0;
this.starDuration = 0;
this.spawnNewStar();
this.score = 0;
},然后在spawnNewStar方法最后加入重置计时器的逻辑,其中this.minStarDuration和this.maxStarDuration是我们一开始声明的Game组件属性,用来规定星星消失时间的随机范围:
spawnNewStar: function() {
this.starDuration = this.minStarDuration + cc.random0To1() * (this.maxStarDuration - this.minStarDuration);
this.timer = 0;
},在update方法中加入计时器更新和判断超过时限的逻辑:
update: function (dt) {
if (this.timer & this.starDuration) {
this.gameOver();
this.timer +=
},最后加入gameOver方法,游戏失败时重新加载场景。
gameOver: function () {
this.player.stopAllActions();
cc.director.loadScene('game');
}对Game脚本的修改就完成了,保存脚本,然后打开Star脚本,我们需要为即将消失的星星加入简单的视觉提示效果,在update方法最后加入以下代码:
update: function() {
var opacityRatio = 1 - this.game.timer/this.game.starD
var minOpacity = 50;
this.node.opacity = minOpacity + Math.floor(opacityRatio * (255 - minOpacity));
}保存Star脚本,我们的游戏玩法逻辑就全部完成了!现在点击预览游戏按钮,我们在浏览器看到的就是一个有核心玩法、激励机制、失败机制的合格游戏了。
尽管很多人玩手游的时候会无视声音,我们为了教程展示的工作流程尽量完整,还是要补全加入音效的任务。
首先加入跳跃音效,打开Player脚本,添加引用声音文件资源的jumpAudio属性:
properties: {
jumpAudio: {
default: null,
url: cc.AudioClip
},然后改写setJumpAction方法,插入播放音效的回调,并通过添加playJumpSound方法来播放声音:
setJumpAction: function () {
var jumpUp = cc.moveBy(this.jumpDuration, cc.p(0, this.jumpHeight)).easing(cc.easeCubicActionOut());
var jumpDown = cc.moveBy(this.jumpDuration, cc.p(0, -this.jumpHeight)).easing(cc.easeCubicActionIn());
var callback = cc.callFunc(this.playJumpSound, this);
return cc.repeatForever(cc.sequence(jumpUp, jumpDown, callback));
playJumpSound: function () {
cc.audioEngine.playEffect(this.jumpAudio, false);
},得分音效
保存Player脚本以后打开Game脚本,来添加得分音效,首先仍然是在properties中添加一个属性来引用声音文件资源:
properties: {
scoreAudio: {
default: null,
url: cc.AudioClip
},然后在gainScore方法里插入播放声音的代码:
gainScore: function () {
this.score += 1;
this.scoreDisplay.string = 'Score: ' + this.score.toString();
cc.audioEngine.playEffect(this.scoreAudio, false);
},保存脚本,回到层级编辑器,选中Player节点,然后从资源管理器里拖拽assets/audio/jump资源到Player组件的Jump Audio属性上。
然后选中Canvas节点,把assets/audio/score资源拖拽到Game组件的Score Audio属性上。
这样就大功告成了!完成形态的场景层级和各个关键组件的属性如下:
现在我们可以尽情享受刚制作完成的游戏了,您能打到多少分呢?别忘了您可以随时修改Player和Game组件里的移动控制和星星持续时间等游戏参数,来快速调节游戏的难度。修改组件属性之后需要保存场景,修改后的数值才会被记录下来。
恭喜您完成了用 Cocos Creator 制作的第一个游戏!希望这篇快速入门教程能帮助您了解 Cocos Creator 游戏开发流程中的基本概念和工作流程。如果您对编写和学习脚本编程不感兴趣,也可以直接从完成版的项目中把写好的脚本复制过来使用。
接下来您还可以继续完善游戏的各方各面,以下是一些推荐的改进方向:
加入简单的开始菜单界面,在游戏运行的一开始显示开始按钮,点击按钮后才会开始游戏
为游戏失败加入简单的菜单界面,游戏失败后点击按钮才会重新开始
限制主角的移动不能超过视窗边界
为主角的跳跃动作加入更细腻的动画表现
为星星消失的状态加入计时进度条
收集星星时加入更华丽的效果
为触屏设备加入输入控制
以上这些方向都得到改善的游戏版本可以下载 来参考和学习,这里就不再赘述了。
此外如果希望将完成的游戏发布到服务器上分享给好友玩耍,可以阅读一节的内容。
今天的教程就到这里了,您可以立刻开始制作您的第二款 Cocos Creator 游戏,或者继续阅读本手册。关于本快速开始教程的任何问题,都可以在提交反馈。
说明文档。
沪ICP备号-5

我要回帖

更多关于 三国志13名字编辑器 的文章

 

随机推荐