-1. 本文原创于http://blog.csdn.net/MingZznet
0. http://www.cocos2d-x.org/reference/html5-js/V2.2.2/index.html 有事没事多查文档
1.图片如果需要拉伸 用 9sprite
2.9sprite的图片在用TP打包的时候不能够旋转,如何设置不旋转请看下一条
3.图片用于9sprite的时候,TP打包不能旋转,将Allow rotation勾掉即可
4.图片有透明的部分时,TP打包的时候不要用Trim mode,选择为None
5.当cocosbuilder中设计的labelTTF与 模拟器中显示的比例不一样的时候,设置document-》edit resolutions-》scale-》改一下,然后labelTTF的font size设置为miltiply by resolution scale
6.cocosbuilder中设置好的 模拟器中位置变了怎么办,在cocosbuilder中将所有的节点的position设为 百分比显示(percentage of container)
7.CClayer中放了一个CCNode,CCNode下又有几个sprite,可是这些sprite不能够移动位置怎么办,将CCNode的content size设置足够大
8.设计屏幕的时候要预留一些素材,用于适配不同屏幕尺寸,比如960*640的scene,可在scene左右两边分别加一条88*640的图片,并且纹理和scene的背景相连接,(X)
实验证明,这样做有点问题,应该将地图的尺寸做成(960+88*2 )* 640 然后遇见比例不同的屏幕尺寸,会匹配高度,然后将宽度减少显示或增多显示。
不好理解??首先背景图片不会拉伸宽高比例,(会拉伸整体大小),然后把宽度做的足够宽,以适配宽度比例最大的屏幕,然后如果屏幕小于这个宽度尺寸,则有左右有一部分图片会不显示,,
9.ignore anchor point 忽略锚点
10. var origin = cc.Director.getInstance().getVisibleOrigin(); //可视区域的起点坐标(可视区域的左下角,用于分辨率适配)
11.找出设计时的坐标乘以分辨率变化的比例分辨率变化比例为 getWinSize
/当前分辨率
12.几个control button绑定同一个事件函数,只会有一个button被响应,就是这样的,所以要用不同的事件函数
13.Math.random() 取0.0 - 1 的随机数
14.button中三张图片必须都换掉,否则会出错
15.从spriteframecatch 中获取图片时,如果有子路径,需要写完整
16.sprite切换图片 s.setDisplayFrame(frame);
17.cocosbuilder中新建ccb时,选择Resolution时,要新建一个自己的尺寸,然后别忘了勾选掉默认的,将自己新建的勾选上
18.cocosbuilder 快捷键: commond + 上下左右 缓慢移动 command + shift + 上下左右 快速移动
19.对于 CCLayer -> CCNode -> CCSprite 可先求CCNode左下角坐标,再根据其 去求CCSprite的位置
20.模态对话框:在CCB中摆layer,最好用layercolor , 然后在代码里获取layer,设置touchPriority,触摸优先级
21.时刻注意cocosbuilder和代码的配合使用,比如可以在代码中获取到CCB中得sprite,然后加到cc.ProcessTimer.Create(sprite)中,会有意想不到的效果
22.围绕着图片周围一圈进度条,可用一张圆圈的图片和cc.ProgressTimer实现
23.CCB Bug:图片名称相同,目录不同,总会相互搞混。。。怎么办?起不同的名称??
本身就忌讳内存中存在两个同名的纹理。,所以改不同的名称
24. ProgressTimer中需要放置一个sprite,
我给progressTimer 做 cc.ProgressFromTo.create(4, 100, 0)动作,
同时给ProgressTimer做 cc.Sequence.create(
cc.TintTo.create(0.8, 46, 233, 21),
cc.TintTo.create(1, 244, 255, 18),
cc.TintTo.create(0.4, 244, 153, 18),
cc.TintTo.create(1.8, 233, 21, 21)
) 动作,
发现颜色变换每次都是从sprite的初始状态变换到这四种颜色,这不是我想要的,我想的是在这四个颜色之间循环渐变,,,
后来发现给ProgressTimer做TintTo动作时,sprite默认颜色不会改变,而给sprite做TintTo变换时,颜色会改变,,
所以我的解决方法是:给ProgressTimer做ProgressFromTo动作,同时给其对应的sprite做颜色变换动作,问题解决。。
25.alt + 鼠标左键 在指定的位置加关键帧,v, p, s, r, 在时间轴当前帧加关键帧,分别对应visible,position, scale, Rotation, (Skew没有快捷键)
26.在时间轴最上方Callbacks上加关键帧,双击,添加函数名,可在运行到此帧的时候出发此函数
27.scale9sprite 不要改 scale值,而是改 preferred size,最后也要改成 % 形式
28.一般将node设置成其子对象中最大尺寸对象的尺寸,
29.如果需要将多张图片组成的node做成button,并有缩放效果,可将controlbutton添加进这个node,将此controlbutton 设置成透明图片,大小和node一样大,点击controlbutton的回调函数中用node.setScale()模拟button点击的缩放效果
30. cocosbuilder 中 commond + +- 放大缩小 视图区域
31. 项目结构:
res(cocos2d-x的资源目录)->cocosbuilderProjectDir->res_art->美工上传素材
->ccbi->导出的ccbi文件
->font->字体
->img->TP打包的图片
->res_bak->未打包的图片
->Resources->ccb文件
->script->JS代码
->cocosbuilderProject.ccbproj(cocosbuilder工程文件)
32.当项目中有两套纹理文件名一样,又不想将一套改名,可以将这两套纹理放到不同的目录,然后作为子目录打包到同一个plist中,
plist->BigImg->1.png
->2.png
->SmallImg->1.png
->2.png
33.CCbi文件调用失败?CCB有没有绑定controller?
34.this.SPRITE_FRAME_CACHE = cc.SpriteFrameCache.getInstance();
this.SPRITE_FRAME_CACHE.addSpriteFrames(this.IMG_PATH + "TP.plist", this.IMG_PATH + "TP.png");// 将TP打包的图一次加载到内存,以后可以直接从此缓存中用纹理名读取此plist目录下得图片,而不用加目录名
this.sprite.setDisplayFrame(
tm.gameWorld.SPRITE_FRAME_CACHE.getSpriteFrame("img.png")//直接从内存中找这张图,不用加目录
);
35.所有纹理名用小写字母或数字,用scene或layer名做前缀,不要有同名的纹理,否则android系统运行会报错
36.cocosbuilder commond + 鼠标左键拖动设计视图显示 commond+ +/- 控制视图放大缩小
37.cocosbuilder同时运行多个动画而不相互影响,分割成不同的CCB
38.可以给sprite货label货其他什么东西定义名称 lbltest1, lbltest2等,然后 这样索引 this["lbltest" + i].setString("test");
39.更改调用CCB的启动界面?? (1)cocosbuilder中File->project setting->Start ccb-file name:->更改为要启动的CCB名字 如 MainScene (2) 代码中 tm.openScene(tm.MainScene, tm.gameWorld.CCBI_PATH + 'MainScene.ccbi') // controller , ccbi tm.openScene = function (ctor, ccbiFileName, parameter) { var director = cc.Director.getInstance(); var scene = cc.Scene.create(); var controller = new ctor(); controller.init(ccbiFileName, parameter); var getNode = controller.view.ccbRootNode; if (getNode) scene.addChild(getNode); var runningScene = director.getRunningScene(); if (runningScene === null) director.runWithScene(scene); else director.replaceScene(scene); };
不是 parentcontroller,,很坑。。。