从Cocos2d-html5 v2.2.x到Cocos2d-JS v3.0 alpha2升级指南
1. 事件管理机制
1.1 在2.2.2版中分散的事件分发器cc.TouchDispatcher, cc.MouseDispatcher, cc.KeyboardDispatcher, cc.AccelerometerDispatcher的所有功能都已经被合并到cc.eventManager,所以事件(鼠标,触摸,键盘,陀螺仪, 用户自定义)都将由cc.eventManager负责分发,也都将通过它进行注册。
更多关于cc.eventManager的信息可以查看这篇详细文档
1.2 由于新的事件管理机制支持开发者在任何对象上绑定事件,所以在2.2.2版中的cc.Layer的事件处理相关函数都被删除了,具体被删除的函数列表如下:
isMouseEnabledsetMouseEnabledsetMousePrioritygetMousePriorityregisterWithTouchDispatcherisTouchEnabledsetTouchEnabledgetTouchPrioritysetTouchPrioritygetTouchModesetTouchModeisAccelerometerEnabledsetAccelerometerEnabled (被移到cc.inputManager中) --> cc.inputManager.setAccelerometerEnabledsetAccelerometerInterval (被移到cc.inputManager中) --> cc.inputManager.setAccelerometerIntervalisKeyboardEnabledsetKeyboardEnabledsetKeypadEnabled
2. 游戏创建和配置流程
2.1 游戏创建
在3.0 alpha版本中,
cc.Application
和cc.AppControl
已经被移除了。取而代之,我们重构了整个游戏创建的流程,在3.0中游戏项目创建将变得前所未有的简单,开发者可以使用
cc.game
来创建并开始游戏。cc.game.onStart = function(){ cc.director.runScene(new MyScene());};cc.game.run();
更详细的信息请参见这个文档:cc.game
2.2 游戏配置
在2.2.2版中,游戏的配置列表(包含renderMode, fps...)与初始化代码混在cocos2d.js文件中,这样很不美观,所以3.0版中我们移除了
cocos2d.js
文件并将配置列表单独抽出来放在了project.json
中,所以修改配置非常简单直观。
所有配置项可以参见这篇文档:project.json2.3 Cocos2d-html5模块配置
Cocos2d-html5已经成为了在2d游戏开发的各个方面都非常有竞争力的游戏引擎,引擎拥有覆盖面非常广泛的特性。也正因此,我们的引擎比 市面上大多数的2d游戏引擎占用空间要更大。假设开发者只需要引擎中一部分特性,并且希望引擎占有空间更小,3.0版中我们提供了按需定制引擎的功能。首 先,引擎被分割成了不同的模块,所有模块定义可以参见
cocos2d-html5/moduleConfig.json
,开发者可以在project.json
的modules
字段中指定自己需要的模块。默认情况下,cocos2d
是默认模块,它包含完整的Cocos2d-html5,开发者可以将它替换为自己需要的子模块。
3. 资源加载过程
3.1 cc.loader
cc.Loader
和cc.FileUtils
已经被cc.loader
单例对象所取代。// 设定图片资源路径cc.loader.resPath = "./res";// 设定音频资源路径cc.loader.resPath = "./audio";// 加载资源并获得回调cc.loader.load(res, function(err){ if(err) return console.log("load failed");});
详细文档请参见:cc.loader
3.2 资源加载工具
3.0版不仅提供了更统一易用的cc.loader,还提供了一些配套工具:
4. 属性风格API
4.1 使用Javascript风格的API对对象属性进行直接存取
旧API 新API node.setPosition(x, y); node.x = x; node.y = y; node.setRotation(r); node.rotation = r; 如表格所示,函数调用可以被属性的直接賦值所替代。在3.0版中不仅是
x
,y
和rotation
,cc.Node及其所有子类的属性都可以使用这种方式存取。4.2
attr
函数3.0版同时还提供了一个更加强大的对象配置方法:类似jQuery的
attr
函数可以让你一次性配置多个属性。node.attr({ x: 20, y: 20, anchorX: 0.5, anchorY: 0.5, width: 400, height: 300, scale: 2});
详细文档和具体属性列表参见:Property API
5. 基本数据结构重构
移除的API:
cc.integerToColor3Bcc.c4FFromccc3Bcc.c4FFromccc4Bcc.c4BFromccc4Fcc.PointSpritecc.GridSizecc.gcc.V2F_C4F_T2Fcc.V2F_C4F_T2F_Quad
修改的API:
cc.Color3B, cc.Color4B, cc.Color4F --> cc.Colorcc.c3b, cc.c4b, cc.c4f --> cc.colorcc.c3BEqual, cc.c4FEqual --> cc.colorEqualcc.convertColor3BtoHexString --> cc.colorToHexcc.convertHexNumToColor3B --> cc.hexToColorcc.white --> cc.color.whitecc.yellow --> cc.color.yellowcc.blue --> cc.color.bluecc.green --> cc.color.greencc.red --> cc.color.redcc.magenta --> cc.color.magentacc.black --> cc.color.blackcc.orange --> cc.color.orangecc.gray --> cc.color.gray
6. 单例对象
3.0版将以前的C++风格单例类重构为Javascript对象,方便开发者的使用。下面是被重构的类列表:
// 引擎核心类cc.AudioEngine.getInstance() --> cc.audioEnginecc.Configuration.getInstance() --> cc.configurationcc.Configuration.purgeConfiguration() removedcc.Director.getInstance() --> cc.directorcc.EGLView.getInstance() --> cc.viewcc.ShaderCache.getInstance() --> cc.shaderCachecc.TextureCache.getInstance() --> cc.textureCachecc.TextureCache.purgeSharedTextureCache() --> cc.textureCache._clear()cc.AnimationCache.getInstance() --> cc.animationCachecc.AnimationCache.purgeSharedAnimationCache() --> cc.animationCache._clear()cc.SpriteFrameCache.getInstance() --> cc.spriteFrameCachecc.SpriteFrameCache.purgeSharedSpriteFrameCache() --> cc.SpriteFrameCache._clear()cc.SAXParser.getInstance() --> cc.saxParsercc.PlistParser.getInstance() --> cc.plistParsercc.Screen.getInstance() --> cc.screencc.TIFFReader.getInstance() --> cc.tiffReadercc.IMEDispatcher.getInstance() --> cc.imeDispatcher// 扩展包中的类ccs.GUIReader.getInstance() --> ccs.guiReaderccs.GUIReader.purge() --> ccs.guiReader.clear()ccs.SceneReader.getInstance() --> ccs.sceneReaderccs.SceneReader.purge() --> ccs.sceneReader.clear()ccs.DataReaderHelper --> ccs.dataReaderHelperccs.DataReaderHelper.purge() --> ccs.dataReaderHelper.clear()ccs.SpriteFrameCacheHelper.getInstance() --> ccs.spriteFrameCacheHelperccs.SpriteFrameCacheHelper.purge() --> ccs.spriteFrameCacheHelper.clear()ccs.ArmatureDataManager.getInstance() --> ccs.armatureDataManagerccs.ArmatureDataManager.purge() --> ccs.armatureDataManager.clear()ccs.ActionManager.getInstance() --> ccs.actionManagerccs.ActionManager.purge() --> ccs.actionManager.clear()ccs.TriggerMng.getInstance() --> ccs.triggerManagerccs.ObjectFactory.getInstance() --> ccs.objectFactory
详细文档。
7. [Alpha 2新添加] 对象创建与类的继承
在Cocos2d-html5 2.2.x中,创建一个引擎对象比如cc.Sprite,开发者需要使用正确的create
函数:
var sprite = cc.Sprite.create(filename, rect);var sprite = cc.Sprite.createWithTexture(texture, rect);var sprite = cc.Sprite.createWithSpriteFrameName(spriteFrameName);
在Cocos2d-JS v3.0 alpha中,我们做到一个非常重要的API进化,所有createXXX
都被合并为统一的create
函数:
var sprite = cc.Sprite.create(filename, rect);var sprite = cc.Sprite.create(texture, rect);var sprite = cc.Sprite.create("#" + spriteFrameName);
这个改动不仅适用于cc.Sprite,同样适用于引擎中所有有类似API的类,支持的类列表以及关于create
函数改造的更详细信息请参见create API文档。
我们从未停止改进我们的引擎,所以在Cocos2d-JS v3.0 alpha2中,引擎支持new
直接构造对象!构造函数和create
函数共享完全相同的参数:
var sprite = new cc.Sprite(filename, rect);var sprite = new cc.Sprite(texture, rect);var sprite = new cc.Sprite("#" + spriteFrameName);
与此同时,为了向后兼容性,所有create
函数也被保留,使用哪种API风格完全是开发者自由的选择。更重要的是,这个改进使得类的继承变得前所未有的简单。开发者现在可以完全忽略所有的initXXX
函数,你可以简单得通过重载ctor
函数并使用正确的参数调用this._super
即可完成对象的初始化:
var Enemy = cc.Sprite.extend({ hp: 0, fileName: "enemy.png" ctor: function (hp) { this._super(fileName); this.hp = hp; }});var enemy1 = new Enemy(100);
如上所示,一个init
函数都不需要调用,非常便于使用。所有cocos2d和扩展类都被重构以支持这种风格,而且JSB也同样完美支持。详细内容请参考关于new
对象构造和类的继承的详细文档。
8. GUI控件
8.1 Cocostudio扩展包中的GUI控件已经被移出单独作为独立的扩展包:ccui,所以所有这些控件类的命名空间都从
ccs.
变为ccui.
。这样做的原因在于这些UI控件不仅可以被Cocostudio使用,也可以被不使用Cocostudio的开发者单独使用。下面是所有被重命名的类:ccs.Layout --> ccui.Layoutccs.Margin --> ccui.Marginccs.MarginZero --> ccui.MarginZeroccs.LayoutParameter --> ccui.LayoutParameterccs.RelativeLayoutParameter --> ccui.RelativeLayoutParameterccs.CocosGUIVersion --> ccui.cocosGUIVersionccs.UIHelper --> ccui.helperccs.Widget --> ccui.Widgetccs.Button --> ccui.Buttonccs.CheckBox --> ccui.CheckBoxccs.ImageView --> ccui.ImageViewccs.LoadingBar --> ccui.LoadingBarccs.Slider --> ccui.Sliderccs.Text --> ccui.Textccs.TextAtlas --> ccui.TextAtlasccs.TextBMFont --> ccui.TextBMFontccs.TextField --> ccui.TextFieldccs.UILayer --> deleted
8.2 除此之外,3.0版还提供了一个新的富文本控件
ccui.RichText
.8.3
ccs.UILayer
已经从v3.0a中删除,Widget对象要加到场景中,直接通过addChild加到Node节点中就可以了。示例如下:// v2.2.2用法: widget必须要通过UILayer的addWidget方法加入到UILayer之后,再将UILayer加入场景才行var uiLayer = ccs.UILayer.create();uiLayer.addWidget(aWidget);var node = cc.Node.create();node .addChild(uiLayer);...//v3.0a用法: widget可以直接调用node的addChild方法,就可以加入场景了。var node = cc.Node.create();node .addChild(aWidget);
9. NodeGrid
3.0版提供了一个新的节点cc.NodeGrid
,这个节点可以包含一个目标节点并允许在这个目标节点上应用 ActionGrid类型的动作。在2.2.2版中cc.Node可以直接应用这种动作,但是这个行为会在未来版本中被移除,因为我们希望cc.Node 的逻辑可以更纯粹。下面是2.2.2版与3.0版中的ActionGrid动作使用示例比较:
// 2.2.2版var shaky = cc.Shaky3D.create( duration, cc.size(15,10), 5, false );var sprite = cc.Sprite.create();sprite.runAction( shaky );// 3.0版var shaky = cc.Shaky3D.create( duration, cc.size(15,10), 5, false );var sprite = cc.Sprite.create();var nodeGrid = cc.NodeGrid.create();nodeGrid.addChild( sprite );nodeGrid.runAction( shaky );
注意:在Cocos2d-html5 3.0a版中,第一种方式仍然有效,但是如果你希望你的游戏可以运行在JSB中,那么必须使用第二种方式。另外,在3.0正式版中,第一种方式也将被移除。
10. JSB相关
虽然我们尽力使Cocos2d-html5和Cocos2d-JSB的API趋于一致,但是我们发现Web应用开发者和JSB原生开发者需求还是有 一定的区别,有一些需求也很难在两个不同平台上完全融合起来,所以我们提供下面这些仅在JSB项目中支持的API,如果你需要使用它们,请首先进行平台检 查。
if (cc.sys.isNative) { cc.fileUtils.isFileExist("filename");}
10.1 C++宏定义
在JSB项目中,有一些宏定义只可能在C++代码中修改,这些宏定义如下,它们都可以在ccMacros.h或ccConfig.h中找到:
CC_ENABLE_STACKABLE_ACTIONSCC_ENABLE_GL_STATE_CACHECC_FIX_ARTIFACTS_BY_STRECHING_TEXELCC_DIRECTOR_STATS_INTERVALCC_DIRECTOR_STATS_POSITIONCC_DIRECTOR_FPS_POSITIONCC_DIRECTOR_DISPATCH_FAST_EVENTSCC_DIRECTOR_MAC_USE_DISPLAY_LINK_THREADCC_NODE_RENDER_SUBPIXELCC_SPRITEBATCHNODE_RENDER_SUBPIXELCC_TEXTURE_ATLAS_USE_VAOCC_USE_LA88_LABELSCC_SPRITE_DEBUG_DRAWCC_SPRITEBATCHNODE_DEBUG_DRAWCC_LABELBMFONT_DEBUG_DRAWCC_LABELATLAS_DEBUG_DRAWCC_NODE_DEBUG_VERIFY_EVENT_LISTENERSCC_ENABLE_PROFILERSCC_LUA_ENGINE_DEBUGCC_USE_PHYSICSCC_ENABLE_SCRIPT_BINDING
10.2 [Alpha 2新添加] cc.fileUtils
在Cocos2d-html5中,cc.FileUtils已经被cc.loader取代了,但是在JSB项目中,有一些需求cc.loader无 法满足,所以我们决定将cc.FileUtils作为仅JSB支持的API开放出来。并且为了符合新的单例对象API风格,开发者可以直接通过
cc.fileUtils
来获取cc.FileUtils单例对象。下面是详细API列表:cc.fileUtilscc.fileUtils.fullPathForFilename(filename)cc.fileUtils.loadFilenameLookup(filename)cc.fileUtils.getStringFromFile(filename)cc.fileUtils.getByteArrayFromFile(filename) // [beta新添加]cc.fileUtils.createDictionaryWithContentsOfFile(filename) // [beta新添加]cc.fileUtils.isAbsolutePath(path)cc.fileUtils.isPopupNotify()cc.fileUtils.getValueVectorFromFile(filename)cc.fileUtils.writeToFile(object, filename)cc.fileUtils.getValueMapFromFile(filename)cc.fileUtils.isFileExist(filename)cc.fileUtils.purgeCachedEntries()cc.fileUtils.fullPathFromRelativeFile(filename, relativeFile)cc.fileUtils.getWritablePath()cc.fileUtils.addSearchPath(path) // [beta新添加]cc.fileUtils.setSearchPaths(pathArray) // [beta新添加]cc.fileUtils.getSearchPaths() // [beta新添加]cc.fileUtils.setSearchResolutionsOrder(orderArray) // [beta新添加]cc.fileUtils.getSearchResolutionsOrder() // [beta新添加]
请注意关于搜索路径的函数的使用,因为它们会导致在Cocos2d-html5和Cocos2d-JSB中资源路径的不一致,而最终使得游戏代码较 难维护。如果需要使用,我们建议在Web端和JSB中使用两套不同的资源映射表,同样的资源变量对应不同的资源路径,这样可以较轻松得维护代码。
10.3 cc.AssetsManager
cc.AssetsManager是用于管理和使用远程服务器资源的类,它也支持简单的版本控制和更新。下面是它的使用方式:
var manager = new cc.AssetsManager(manifestPath, storagePath);// As the process is asynchronised, you need to retain the assets manager to make sure it won‘t be released before the process is ended.manager.retain();if (!manager.getLocalManifest().isLoaded()) { cc.log("Fail to update assets, step skipped.");}else { var listener = new cc.EventListenerAssetsManager(manager, function(event) { switch (event.getEventCode()) { case cc.EventAssetsManager.UPDATE_PROGRESSION: var percent = event.getPercent(); cc.log("Download percent : " + percent); break; case cc.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST: case cc.EventAssetsManager.ERROR_PARSE_MANIFEST: cc.log("Fail to download manifest file, update skipped."); break; case cc.EventAssetsManager.ALREADY_UP_TO_DATE: case cc.EventAssetsManager.UPDATE_FINISHED: cc.log("Update finished."); // You need to release the assets manager while you are sure you don‘t need it any more manager.release(); break; case cc.EventAssetsManager.ERROR_UPDATING: cc.log("Asset update error: " + event.getAssetId() + ", " + event.getMessage()); break; default: break; } }}
更多信息请参考cc.AssetsManager文档.
11. 其他API变动
11.1
cc.Broswser
和sys
被cc.sys
取代: 详细文档.11.2 一些
cc.AudioEngine
的API被删除:preloadMusicpreloadEffectisFormatSupportedpreloadSound
11.3 cc.SAXParser
一些
cc.SAXParser
的API被删除:tmxParsepreloadPlistunloadPlistgetNamegetExtgetList
同时添加
cc.PlistParser
用于解析plist文件:cc.SAXParser文档11.4
cc.textureCache
的addImageAsync
方法被移除,请统一使用addImage
.addImage(url) --> addImage(url)addImageAsync(url, target, callback) --> addImage(url, callback, target)
[Alpha 2新添加] 新的
addImage
使用方式也被JSB支持了。11.5
MenuItemFont
的两个方法被重命名以适应统一的API风格:fontName --> getFontNamefontSize --> getFontSize
11.6 cc.view
3.0版已经支持所有苹果设备的视网膜屏分辨率,你可以使用
cc.view.enableRetina(enableOrNot)
来开启或关闭这项功能,你也可以使用cc.view.isRetinaEnabled()
来检测当前视网膜屏适配是否已经开启。最后,你可以通过cc.view.getDevicePixelRat io()
来获取视网膜屏的像素缩放比例,在目前的苹果设备上,该比例返回值为2。默认情况下,视网膜屏适配在苹果设备上自动开启,如果希望改变这一行为,在关闭这项功能之后,你将需要调用一次cc.view.setDesignResolutionSize(width, height, policy)
来让改变生效。[Alpha 2新添加] cc.view会在移动浏览器上自动尝试进入全屏。现在我们为这项功能添加了开关函数,默认情况下这项功能仍然是开启的。
cc.view.enableAutoFullScreen(enabled); // enabled参数值可以是true或falsecc.view.isAutoFullScreenEnabled(); // 该函数返回当前值
11.7 其他被删除的API
cc.IS_SHOW_DEBUG_ON_PAGEcc.COCOS2D_DEBUGcc.PLATFORM_WINDOWScc.PLATFORM_LINUXcc.PLATFORM_MACOScc.PLATFORM_ANDROIDcc.PLATFORM_IPHONEcc.PLATFORM_BLACKBERRYcc.PLATFORM_NACLcc.PLATFORM_EMSCRIPTENcc.HASH_FIND_INTcc.isAddedHiddenEventcc.originalCanvasSizecc.configcc.loadImgcc.loadImage.handlercc.computeImageFormatTypecc.tgaLoadccs.UILayer
11.8 其他添加的API:
cc.warncc.errorcc.defineGetterSettercc.BuilderReader.registerController
11.9 其他修改的API:
cc.Assert --> cc.assertcc.ArrayVerifyType --> cc.arrayVerifyTypecc.ArrayRemoveObject --> cc.arrayRemoveObjectcc.ArrayRemoveArray --> cc.arrayRemoveArraycc.ArrayAppendObjectsToIndex --> cc.arrayAppendObjectsToIndexcc.ArrayRemoveObjectAtIndex(arr, index) --> arr.splice(index, 1)cc.ArrayGetIndexOfValue(arr, value) --> arr.indexOf(value)cc.ArrayAppendObject(arr, addObj) --> arr.push(addObj)cc.ArrayAppendObjectToIndex(arr, addObj, index) --> arr.splice(index, 0, addObj)cc.ArrayGetIndexOfObject(arr, findObj) --> arr.indexOf(findObj)cc.ArrayContainsObject(arr, findObj) --> arr.indexOf(findObj) != -1// 修改大写函数为小写函数以符合命名规范cc.PRIORITY_SYSTEM --> cc.Scheduler.PRIORITY_SYSTEMcc.SWAP --> cc.swap // [Alpha 2新添加]cc.RANDOM_MINUS1_1 --> cc.randomMinus1To1 // [Alpha 2新添加]cc.RANDOM_0_1 --> cc.random0To1 // [Alpha 2新添加]cc.DEGREES_TO_RADIANS --> cc.degreesToRadians // [Alpha 2新添加]cc.RADIANS_TO_DEGREES --> cc.radiansToDegress // [Alpha 2新添加]cc.NODE_DRAW_SETUP --> cc.nodeDrawSetup // [Alpha 2新添加]cc.ENABLE_DEFAULT_GL_STATES --> cc.enableDefaultGLStates // [Alpha 2新添加]cc.DISABLE_DEFAULT_GL_STATES --> cc.disableDefaultGLStates // [Alpha 2新添加]cc.INCREMENT_GL_DRAWS --> cc.incrementGLDraws // [Alpha 2新添加]cc.CONTENT_SCALE_FACTOR --> cc.contentScaleFactor // [Alpha 2新添加]cc.POINT_POINTS_TO_PIXELS --> cc.pointPointsToPixels // [Alpha 2新添加]cc.SIZE_POINTS_TO_PIXELS --> cc.sizePointsToPixels // [Alpha 2新添加]cc.SIZE_PIXELS_TO_POINTS --> cc.sizePixelsToPoints // [Alpha 2新添加]cc._SIZE_PIXELS_TO_POINTS_OUT --> cc._sizePixelsToPointsOut // [Alpha 2新添加]cc.POINT_PIXELS_TO_POINTS --> cc.pointPixelsToPoints // [Alpha 2新添加]cc._POINT_PIXELS_TO_POINTS_OUT --> cc._pointPixelsToPointsOut // [Alpha 2新添加]cc.RECT_PIXELS_TO_POINTS --> cc.rectPixelsToPoints // [Alpha 2新添加]cc.RECT_POINTS_TO_PIXELS --> cc.rectPointsToPixels // [Alpha 2新添加]cc.CHECK_GL_ERROR_DEBUG --> cc.checkGLErrorDebug // [Alpha 2新添加]cc.CardinalSplineAt --> cc.cardinalSplineAt **[Alpha 2新添加]**// 常量cc.SPRITE_INDEX_NOT_INITIALIZED --> cc.Sprite.INDEX_NOT_INITIALIZED // [Alpha 2新添加]cc.DIRECTOR_PROJECTION_2D --> cc.Director.PROJECTION_2D // [Alpha 2新添加]cc.DIRECTOR_PROJECTION_3D --> cc.Director.PROJECTION_3D // [Alpha 2新添加]cc.DIRECTOR_PROJECTION_CUSTOM --> cc.Director.PROJECTION_CUSTOM // [Alpha 2新添加]cc.DIRECTOR_PROJECTION_DEFAULT --> cc.Director.PROJECTION_DEFAULT // [Alpha 2新添加]cc.TEXTURE_2D_PIXEL_FORMAT_RGBA8888 --> cc.Texture2D.PIXEL_FORMAT_RGBA8888cc.TEXTURE_2D_PIXEL_FORMAT_RGB888 --> cc.Texture2D.PIXEL_FORMAT_RGB888cc.TEXTURE_2D_PIXEL_FORMAT_RGB565 --> cc.Texture2D.PIXEL_FORMAT_RGB565cc.TEXTURE_2D_PIXEL_FORMAT_A8 --> cc.Texture2D.PIXEL_FORMAT_A8cc.TEXTURE_2D_PIXEL_FORMAT_I8 --> cc.Texture2D.PIXEL_FORMAT_I8cc.TEXTURE_2D_PIXEL_FORMAT_AI88 --> cc.Texture2D.PIXEL_FORMAT_AI88cc.TEXTURE_2D_PIXEL_FORMAT_RGBA4444 --> cc.Texture2D.PIXEL_FORMAT_RGBA4444cc.TEXTURE_2D_PIXEL_FORMAT_RGB5A1 --> cc.Texture2D.PIXEL_FORMAT_RGB5A1cc.TEXTURE_2D_PIXEL_FORMAT_PVRTC4 --> cc.Texture2D.PIXEL_FORMAT_PVRTC4cc.TEXTURE_2D_PIXEL_FORMAT_PVRTC2 --> cc.Texture2D.PIXEL_FORMAT_PVRTC2cc.TEXTURE_2D_PIXEL_FORMAT_DEFAULT --> cc.Texture2D.PIXEL_FORMAT_DEFAULTcc.Texture2D.setDefaultAlphaPixelFormat(format) --> cc.Texture2D.defaultPixelFormat = formatcc.Texture2D.getDefaultAlphaPixelFormat() --> cc.Texture2D.defaultPixelFormatcc.Texture2D.defaultAlphaPixelFormat() --> cc.Texture2D.defaultPixelFormatcc.dumpConfig --> cc.sys.dump// 公有转为私有cc.setup --> cc._setupcc.initDebugSetting --> cc._initDebugSettingcc.canvas --> cc._canvascc.drawingUtil --> cc._drawingUtilcc.renderContext --> cc._renderContextcc.gameDiv --> cc._gameDivcc.setContextMenuEnable --> cc._setContextMenuEnablecc.renderContextType --> cc._renderTypecc.CANVAS --> cc._RENDER_TYPE_CANVAScc.WEBGL --> cc._RENDER_TYPE_CANVAScc.mainRenderContextBackup --> cc._mainRenderContextBackupcc.RectFromString --> cc.spriteFrameCache._rectFromStringcc.PointFromString --> cc.spriteFrameCache._pointFromStringcc.SizeFromString --> cc.spriteFrameCache._sizeFromStringccs.CocoStudioVersion --> ccs.cocostudioVersion// 修正拼写错误ccs.DecotativeDisplay --> ccs.DecorativeDisplay
11.10 [Alpha 2新添加] Alpha 2中其他API改动
pauseSchedulerAndActions --> pauseresumeSchedulerAndActions --> resume
cc.MoveBy.create(duration, x, y);cc.MoveBy.create(duration, cc.p(x, y));
getCString --> getStringsetCString --> setString
ccs.comAttribute中重命名的函数 :
cc.CallFunc的
initWithTarget
函数被重命名为initWithFunction
cc.MoveBy的
create
函数现在支持x
和y
分开作为位置参数cc.Node中重命名的函数 :
12.[Beta新添加]Actions API变动
12.1 提供action的短方法创建方式
我们还针对action的相关类,增加了更加简单的创建方法,通过类名第一个字母改为小写就能创建出一个新的对象:比如:
var action = cc.MoveBy.create(2, cc.p(10, 10))
这个action可以通过下面更简单的方式创建:
var action = cc.moveBy(2,cc.p(10,10))
12.2 重新设计ease actions
所有的ease action其实是修饰性的action, 他们无法脱离目标action独立使用. 其有效部分也只是update函数,所以我们可以添加一个
easing
到cc.ActionInterval
中, 它可以接受不同的ease对象来实现不同的ease动作效果。新旧使用方法的比较,新的调用方式采用链式的调用更加简单、易用:
旧的调用方式:
var easeMoveBy = cc.EaseIn.create(cc.MoveBy.create(2, cc.p(100,50)),0.3);
新的调用方式:
var easeMoveBy = cc.moveBy(2,cc.p(100,50)).easing(cc.easeIn(0.3);
12.3 关于 cc.Repeat, cc.RepeatForever, cc.Speed 的新设计
以下的 cc.Repeat, cc.RepeatForever, cc.Speed 都是修饰性的actions, 所以我们添加对应的函数
repeat
,repeatForever
,speed
,getSpeed
,setSpeed
到cc.ActionInterval
中. 通过这邪恶函数,开发者可以将原来复杂的动作以清晰的方式进行表示。All these changes allow developers to write complex actions more clearly.旧的调用方式:
var anAction = cc.Sequence.create( cc.Speed.create(cc.Repeat.create(cc.EaseIn.create(cc.MoveBy.create(2, cc.p(100,50)),0.3), 5),1.7), cc.RepeatForever.create(cc.RotateBy.create(2, 30)));
新的调用方式:
var anAction = cc.sequence( cc.moveBy(2,cc.p(100,50)).easing(cc.easeIn(0.3)).repeat(5).speed(1.7), cc.rotateBy(2,30).repeatForever());
注意: 所有的Actions的旧API都保留,并向前兼容。
12.4 新增Actions API列表
旧的调用方法 新的调用方法 cc.Repeat.create(action, num) action.repeat(num) cc.RepeatForever.create(action) action.repeatForever() cc.Speed.create(action, speed) action.speed(speed) cc.Speed.setSpeed(speed) action.setSpeed(speed) cc.Speed.getSpeed() action.getSpeed() cc.EaseIn.create(action, rate) action.easing(cc.easeIn(rate)) cc.EaseOut.create(action, rate) action.easing(cc.easeOut(rate)) cc.EaseInOut.create(action, rate) action.easing(cc.easeInOut(rate)) cc.EaseExponentialIn.create(action) action.easing(cc.easeExponentialIn()) cc.EaseExponentialOut.create(action) action.easing(cc.easeExponentialOut()) cc.EaseExponentialInOut.create(action) action.easing(cc.easeExponentialInOut()) cc.EaseSineIn.create(action) action.easing(cc.easeSineIn()) cc.EaseSineOut.create(action) action.easing(cc.easeSineOut()) cc.EaseSineInOut.create(action) action.easing(cc.easeSineInOut()) cc.EaseElasticIn.create(action) action.easing(cc.easeElasticIn()) cc.EaseElasticOut.create(action) action.easing(cc.easeElasticOut()) cc.EaseElasticInOut.create(action, rate) action.easing(cc.easeElasticInOut(rate)) cc.EaseBounceIn.create(action) action.easing(cc.easeBounceIn()) cc.EaseBounceOut.create(action) action.easing(cc.easeBounceOut()) cc.EaseBounceInOut.create(action) action.easing(cc.easeBounceInOut()) cc.EaseBackIn.create(action) action.easing(cc.easeBackIn()) cc.EaseBackOut.create(action) action.easing(cc.easeBackOut()) cc.EaseBackInOut.create(action) action.easing(cc.easeBackInOut())
13.[Beta新变动]修改setText,getText为统一的API SetString, getString
ccui.Text :
setText --> setStringgetStringValue --> getString
ccui.TextAtlas :
getStringValue ==> getString
ccui.TextBMFont :
setText --> setStringgetStringValue --> getString
ccui.TextField :
setText --> setStringgetStringValue --> getString
cc.EditBox :
setText --> setStringgetText --> getString
其他详细文档列表:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。