从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

其他详细文档列表:


转载于:https://my.oschina.net/soarwilldo/blog/416388

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值