从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.Applicationcc.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.json

  • 2.3 Cocos2d-html5模块配置

    Cocos2d-html5已经成为了在2d游戏开发的各个方面都非常有竞争力的游戏引擎,引擎拥有覆盖面非常广泛的特性。也正因此,我们的引擎比 市面上大多数的2d游戏引擎占用空间要更大。假设开发者只需要引擎中一部分特性,并且希望引擎占有空间更小,3.0版中我们提供了按需定制引擎的功能。首 先,引擎被分割成了不同的模块,所有模块定义可以参见cocos2d-html5/moduleConfig.json,开发者可以在project.jsonmodules字段中指定自己需要的模块。默认情况下,cocos2d是默认模块,它包含完整的Cocos2d-html5,开发者可以将它替换为自己需要的子模块。

    moduleConfig.json文档

3. 资源加载过程

  • 3.1 cc.loader

    cc.Loadercc.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,还提供了一些配套工具:

    • 异步函数调用模块(模仿node.js):cc.async

    • 资源路径配置工具:cc.path

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版中不仅是xyrotation,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.Broswsersyscc.sys取代: 详细文档.

  • 11.2 一些cc.AudioEngine的API被删除:

    preloadMusicpreloadEffectisFormatSupportedpreloadSound
  • 11.3 cc.SAXParser

    一些cc.SAXParser的API被删除:

    tmxParsepreloadPlistunloadPlistgetNamegetExtgetList

    同时添加cc.PlistParser用于解析plist文件:cc.SAXParser文档

  • 11.4 cc.textureCacheaddImageAsync方法被移除,请统一使用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函数现在支持xy分开作为位置参数

    • 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函数,所以我们可以添加一个easingcc.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,setSpeedcc.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

    其他详细文档列表:

    • cc.log

    • cc.spriteFrameCache

    • cc.FileUtils

    • 如何在JSB项目中使用extension

    • more


    你可能感兴趣的:(从Cocos2d-html5 v2.2.x到Cocos2d-JS v3.0 alpha2升级指南)