Cocos2d-x 3.0 新特性体验(1)创建项目+运行sample+新特性内容

转自:http://www.2cto.com/kf/201401/273819.html


不得不说,cocos2d-x的版本更迭真是快,而最新的cocos2d-x v3.0 Beta版本中包含了许多新的特性和与之前2.x版本不同的内容,虽然说,目前3.0只是beta版本,但目前很多游戏已经采用这个3.0版本了,估计3.0的最终版本也会很快推出。

从创建项目开始了解一下这个最新的3.0版本的一些新特性吧!吐舌头


一、创建项目(针对在mac os x中进行开发)

在前面我有一篇文章 点击打开链接 已经介绍过在 cocos2dx 2.2 版本中创建项目只能是在终端中进行,对于习惯了在xcode中直接通过项目模板生成项目的来说,这样的方式的确是有点不太方便。

但是在cocos2d-x v3.0 Beta版本中,采用了一种比较人性化图形界面创建方式。

在这里 点击打开链接 有详细的新版本使用介绍。

下面我实践一下如何创建一个 cocos2dx for ios & osx 的项目。(有两种方式)

1、第一种,当然是延续了2.2版本之后的直接命令行创建,这个具体方法可以请参考我之前的文章。点击打开链接

Example:

?
1
2
3
4
<code>$ cd cocos2d-x/tools/project-creator
$ ./project-creator.py -n mygame -k com.your_company.mygame -l cpp -p /home/mygame
$ cd /home/mygame
</code>

2、第二种,就是图形界面创建的方法 ①在终端中,进入引擎文件:cocos2d-x-3.0beta/tools/project-creator ②运行 ./create_project.py ③在如下图中进行图形界面方式创建项目: \
注:大笑 有了这个工具,妈妈再也不用担心我创建cocos2dx项目很麻烦了!想创建项目就直接点击几下就可以了。 
二、运行引擎中附带的sample例子 进入 引擎文件: cocos2d-x-3.0beta/build 打开cocos2d_samples.xcodeproj 即可。 注:引擎中附带的例子文件比较大,所有打开和编译运行都需要一点时间,考验机子呀!快哭了 
三、cocos2d-x-3.0beta 新特性介绍 
注:下面先贴出所有新特性内容,下面的文章,将会根据新特性内容分析详述。

cocos2d-x v3.0 Release Notes

Misc Information

  • Download: http://cdn.cocos2d-x.org/cocos2d-x-3.0beta.zip
  • Full Changelog: https://github.com/cocos2d/cocos2d-x/blob/cocos2d-x-3.0beta/CHANGELOG
  • API Reference: http://www.cocos2d-x.org/reference/native-cpp/V3.0beta/index.html

    Requirements

    Runtime Requirements

    • Android 2.3 or newer
    • iOS 5.0 or newer
    • OS X 10.7 or newer
    • Windows 7 or newer
    • Windows Phone 8 or newer N/A for the moment
    • Linux Ubuntu 12.04 (or newer)
    • Browsers via Emscripten N/A for the moment
    • Marmalade N/A for the moment
    • BlackBerry N/A for the moment

      Compiler Requirements

      • Xcode 4.6 (for iOS or Mac)
      • gcc 4.7 for Linux or Android. For Android ndk-r9 or newer is required.
      • Visual Studio 2012 (for Windows)

        Highlights of v3.0

        • Replaced Objective-C patters with C++ (C++11) patterns and best practices
        • Improved Labels
        • Improved renderer
        • New Event Dispatcher
        • Physics integration
        • New GUI
        • JavaScript remote debugger
        • Remote Console support
        • Refactor Image - release memory in time and uniform the api of supported file format
        • Automatically generated Lua bindings, add LuaJavaBridge and LuaObjcBridge
        • Templated containers

          Features in detail

          C++11 features

          Feature added in v3.0-pre-alpha0

          A subset of C++11 features are being used in cocos2d-x:

          • std::function, including lambda objects for callbacks
          • strongly typed enums, for most of the cocos2d-x enums and constants
          • std::thread for threading
          • override context keyword, for overriden methods

            std::function

            • CallFunc can be created with an std::function
            • CallFuncN can be created with an std::function
            • CallFuncND and CallFuncO were removed since it can be created with simulated withCallFuncN and CallFunc. See ActionsTest.cpp for more examples
            • MenuItem supports std::function as callbacks

              CallFunc example:

              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              // in v2.1
              CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) );
               
              // in v3.0 (short version)
              auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this));
              auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters));
               
              // in v3.0 (long version)
              auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this));
              auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters));
               
              // in v3.0 you can also use lambdas or any other "Function" object
              auto action1 = CallFunc::create(
                               [&](){
                                   auto s = Director::sharedDirector()->getWinSize();
                                   auto label = LabelTTF::create("called:lambda callback","Marker Felt",16);
                                   label->setPosition(ccp( s.width/4*1,s.height/2-40));
                                   this->addChild(label);
                               }  );

              MenuItem example:

              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              // in v2.1
              CCMenuItemLabel *item = CCMenuItemLabel::create(label, this, menu_selector(MyClass::callback));
               
              // in v3.0 (short version)
              auto item = MenuItemLabel::create(label, CC_CALLBACK_1(MyClass::callback, this));
               
              // in v3.0 (long version)
              auto item = MenuItemLabel::create(label, std::bind(&MyClass::callback, this, std::placeholders::_1));
               
              // in v3.0 you can use lambdas or any other "Function" object
              auto item = MenuItemLabel::create(label,
                               [&](Object *sender) {
                                   // do something. Item "sender" clicked
                                });

              strongly typed enums

              Feature added in v3.0-pre-alpha0

              Constants and enums that started with k, and that usually were defined as int or as simple enum where replaced with strongly typed enums ( enum class ) to prevent collisions and type errors. The new format is:

              ?
              1
              2
              3
              <code>| v2.1      | v3.0       |
              | kTypeValue | Type::VALUE |
              </code>

              Examples:

              ?
              1
              2
              3
              4
              5
              6
              7
              <code>| v2.1                            | v3.0                            |
              | kCCTexture2DPixelFormat_RGBA8888 | Texture2D::PixelFormat::RGBA8888 |
              | kCCDirectorProjectionCustom      | Director::Projection::CUSTOM     |
              | ccGREEN                          | Color3B::GREEN                   |
              | CCPointZero                      | Point::ZERO                      |
              | CCSizeZero                       | Size::ZERO                       |
              </code>

              The old values can still be used, but are not deprecated.

              override

              To catch possible errors while overriding methods, subclasses with override methods have the override context keyword. Example:

              ?
              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              classSprite : publicNode {
                  bool isFlipY(void)const;
                  voidsetFlipY(bool bFlipY);
               
                  // Overrides
                  virtualvoidsetTexture(Texture2D *texture) override;
                  virtual Texture2D* getTexture() constoverride;
                  inlinevoidsetBlendFunc(constBlendFunc &blendFunc) override;
                  inlineconstBlendFunc& getBlendFunc() constoverride;
              }

              Removed Objective-C patterns

              Feature added in v3.0-pre-alpha0

              No more 'CC' prefix for C++ classes and free functions

              Changes in classes

              Since cocos2d-x already uses the cocos2d namespace, there is not need to add the prefix CC to all its classes.

              Examples:

              ?
              1
              2
              3
              4
              5
              6
              <code>| v2.1      | v3.0    |
              | CCSprite   | Sprite   |
              | CCNode     | Node     |
              | CCDirector | Director |
              | etc...                |
              </code>

              v2.1 class names are still available, but they were tagged as deprecated.

              Changes in free functions

              For the drawing primitives:

              • They were added in the DrawPrimitives namespace
              • The cc prefix was removed

                For the gl proxy functions:

                • They were added in the GL namespace
                • The ccGL prefix was removed

                  Examples:

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  <code>| v2.1               | v3.0                        |
                  | ccDrawPoint()       | DrawPrimitives::drawPoint()  |
                  | ccDrawCircle()      | DrawPrimitives::drawCircle() |
                  | ccGLBlendFunc()     | GL::blendFunc()              |
                  | ccGLBindTexture2D() | GL::bindTexture2D()          |
                  | etc...                                             |
                  </code>

                  v2.1 free functions are still available, but they were tagged as deprecated.

                  clone() instead of copy()

                  clone() returns an autoreleased version of the copy.

                  copy() is no longer supported. If you use it, it will compile, but the code will crash.

                  Example:

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  // v2.1
                  CCMoveBy *action = (CCMoveBy*) move->copy();
                  action->autorelease();
                   
                  // v3.0
                  // No need to do autorelease, no need to do casting.
                  auto action = move->clone();

                  Singletons use getInstance() and destroyInstance()

                  All singletons use getInstance() and destroyInstance() (if applicable) to get and destroy the instance.

                  Examples:

                  ?
                  1
                  2
                  3
                  4
                  5
                  <code>| v2.1                         | v3.0                       |
                  | CCDirector->sharedDirector()  | Director->getInstance()     |
                  | CCDirector->endDirector()     | Director->destroyInstance() |
                  | etc...                                                      |
                  </code>

                  v2.1 methods are still available, but they were tagged as deprecated.

                  getters

                  Getters now use the get prefix.

                  Examples:

                  ?
                  1
                  2
                  3
                  4
                  5
                  <code>| v2.1                           | v3.0*                              |
                  | node->boundingBox()             | node->getBoundingBox()             |
                  | sprite->nodeToParentTransform() | sprite->getNodeToParentTransform() |
                  | etc...                                                               |
                  </code>

                  And getters were also tagged as const in their declaration. Example:

                  ?
                  1
                  2
                  3
                  4
                  5
                  // v2.1
                  virtualfloatgetScale();
                   
                  // v3.0
                  virtualfloatgetScale() const;

                  v2.1 methods are still available, but they were tagged as deprecated.

                  POD types

                  Methods that were receiving POD types as arguments (eg: TexParamsPointSize, etc.) are being passed as constreference.

                  Example:

                  ?
                  1
                  2
                  3
                  4
                  5
                  // v2.1
                  voidsetTexParameters(ccTexParams* texParams);
                   
                  // v3.0
                  voidsetTexParameters(constccTexParams& texParams);

                  New Renderer

                  Feature added in v3.0-beta

                  The renderer functionality has been decoupled from the Scene graph / Node logic. A new object called Renderer is responsible for rendering the object.

                  Auto-batching and auto-culling support has been added.

                  Please, see this document for detail information about its internal funcitonality:https://docs.google.com/document/d/17zjC55vbP_PYTftTZEuvqXuMb9PbYNxRFu0EGTULPK8/edit

                  Improved LabelTTF / LabelBMFont

                  Feature added in v3.0-alpha0

                  New EventDispatcher

                  Feature added in v3.0-alpha0

                  All events like touch event, keyboard event, acceleration event and custom event are dispatched by EventDispatcher.TouchDispatcherKeypadDispatcher,KeyboardDispatcherAccelerometerDispatcher were removed.

                  Adding Touch Event Listener

                  For TouchOneByOne:

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  auto sprite = Sprite::create("file.png");
                  ...
                  auto listener = EventListenerTouchOneByOne::create();
                  listener->setSwallowTouch(true);
                  listener->onTouchBegan     = [](Touch* touch, Event* event) { do_some_thing();  returntrue;  };
                  listener->onTouchMoved     = [](Touch* touch, Event* event) { do_some_thing();  };
                  listener->onTouchEnded     = [](Touch* touch, Event* event) { do_some_thing();  };
                  listener->onTouchCancelled = [](Touch* touch, Event* event) { do_some_thing();  };
                  // The priority of the touch listener is based on the draw order of sprite
                  EventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(listener, sprite);
                  // Or the priority of the touch listener is a fixed value
                  EventDispatcher::getInstance()->addEventListenerWithFixedPriority(listener,100);// 100 is a fixed value

                  For TouchAllAtOnce

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  auto sprite = Sprite::create("file.png");
                  ...
                  auto listener = EventListenerTouchAllAtOnce::create();
                  listener->onTouchesBegan     = [](conststd::vector<touch*>& touches, Event* event) { do_some_thing();  };
                  listener->onTouchesMoved     = [](conststd::vector<touch*>& touches, Event* event) { do_some_thing();  };
                  listener->onTouchesEnded     = [](conststd::vector<touch*>& touches, Event* event) { do_some_thing();  };
                  listener->onTouchesCancelled = [](conststd::vector<touch*>& touches, Event* event) { do_some_thing();  };
                  // The priority of the touch listener is based on the draw order of sprite
                  EventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(listener, sprite);
                  // Or the priority of the touch listener is a fixed value
                  EventDispatcher::getInstance()->addEventListenerWithFixedPriority(listener,100);// 100 is a fixed value
                  </touch*></touch*></touch*></touch*>

                  Adding Mouse Event Listener

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  auto mouseListener = EventListenerMouse::create();
                  mouseListener->onMouseScroll = [](Event* event) { EventMouse* e = static_cast<eventmouse*>(event); do_some_thing(); };
                  mouseListener->onMouseUp     = [](Event* event) { EventMouse* e = static_cast<eventmouse*>(event); do_some_thing(); };
                  mouseListener->onMouseDown   = [](Event* event) { EventMouse* e = static_cast<eventmouse*>(event); do_some_thing(); };
                  dispatcher->addEventListenerWithSceneGraphPriority(mouseListener,this);
                  </eventmouse*></eventmouse*></eventmouse*>

                  Adding A Keyboard Event Listener

                  ?
                  1
                  2
                  3
                  4
                  auto listener = EventListenerKeyboard::create();
                  listener->onKeyPressed = CC_CALLBACK_2(SomeClass::onKeyPressed, this);
                  listener->onKeyReleased = CC_CALLBACK_2(SomeClass::onKeyReleased, this);
                  EventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(listener,this);

                  Adding An Acceleration Event Listener

                  ?
                  1
                  2
                  auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(SomeClass::onAcceleration,this));
                  EventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(listener,this);

                  Adding A Custom Event Listener

                  ?
                  1
                  2
                  3
                  4
                  5
                  auto listener = EventListenerCustom::create("game_custom_event", [=](EventCustom* event){
                      void* userData= event->getUserData();
                      do_some_with_user_data();
                  });
                  dispatcher->addEventListenerWithFixedPriority(listener,1);

                  Dispatching A Custom Event

                  ?
                  1
                  2
                  3
                  EventCustom event("game_custom_event");
                  event.setUserData(some_data);
                  dispatcher->dispatchEvent(&event);

                  Setting Fixed Priority For A Listener

                  ?
                  1
                  dispatcher->setPriority(fixedPriorityListener,200);

                  Removing Event Listener

                  Removing A Specified Event Listener
                  ?
                  1
                  dispatcher->removeEventListener(listener);
                  Removing Custom Event Listener
                  ?
                  1
                  dispatcher->removeCustomEventListener("my_custom_event_listener_name");
                  Removing All Listeners For An Event Listener Type
                  ?
                  1
                  dispatcher->removeEventListeners(EventListener::Type::TOUCH_ONE_BY_ONE);
                  Removing All Listeners
                  ?
                  1
                  dispatcher->removeAllListeners();

                  Physics Integration

                  Feature added in v3.0-pre-alpha0

                  Physics integration have five concepts: PhysicsWorldPhysicsBodyPhysicsShape,PhysicsJoint and PhysicsContact. You must define CC_USE_PHYSICS macro in ccConfig.hto use the physics API.

                  PhysicsWorld

                  PhysicsWorld object simulates collisions and other physical properties, you do not create it directly, you can get it from scene which create with physics.

                  ?
                  1
                  2
                  Scene* scene = Scene::createWithPhysics();
                  PhysicsWorld* world = scene->getPhysicsWorld();

                  PhysicsBody

                  PhysicsBody object is used to add physics simulation to a node. If you create aPhysicsBody and set it to a node, and add the node the a scene which create with physics, it will perform the physics simulation when update.

                  ?
                  1
                  2
                  3
                  4
                  PhysicsBody* body = PhysicsBody::createCircle(5.0f);
                  Node* node = Node::create();
                  node->setPhysicsBody(body);
                  scene->addChild(node);

                  PhysicsShape

                  PhysicsShape object is a shape that make the body can have collisions. you can add one or more PhysicsShape to aPhysicsBody. Shape classes: PhysicsShapeCircle,PhysicsShapeBoxPhysicsShapePolygon,PhysicsShapeEdgeSegment,PhysicsShapeEdgeBoxPhysicsShapeEdgePolygon,PhysicsShapeEdgeChain.

                  ?
                  1
                  2
                  PhysicsShape* shape = PhysicsShapeBox::create(Size(5.0f,10.0f);
                  body->addShape(shape);

                  PhysicsJoint

                  PhysicsJoint object connects two physics bodies together so that they are simulated together by the physics world. Joint classes: PhysicsJointFixed,PhysicsJointLimitPhysicsJointPinPhysicsJointDistance,PhysicsJointSpring,PhysicsJointGroovePhysicsJointRotarySpring,PhysicsJointRotaryLimitPhysicsJointRatchetPhysicsJointGear,PhysicsJointMotor.

                  ?
                  1
                  2
                  PhysicsJoint* joint = PhysicsJointDistance::construct(bodyA, bodyB, Point::ZERO, Point::ZERO);
                  world->addJoint(joint);

                  PhysicsContact

                  PhysicsContact object is created automatically to describes a contact between two physical bodies in a PhysicsWorld. you can control the contact behavior from the physics contact event listener. Other classes contain the contact information:PhysicsContactPreSolvePhysicsContactPostSolve. The event listener for physics: EventListenerPhysicsContact,EventListenerPhysicsContactWithBodies,EventListenerPhysicsContactWithShapesEventListenerPhysicsContactWithGroup.

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  auto contactListener = EventListenerPhysicsContactWithBodies::create(bodyA, bodyB);
                  contactListener->onContactBegin = [](EventCustom* event, constPhysicsContact& contact) -> bool
                  {
                  doSomething();
                  returntrue;
                  };
                  _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener,this);

                  Misc API Changes

                  ccTypes.h

                  Remove cc prefix for structure names in ccTypes.h, move global functions into static member functions, and move global constants into const static member variables.

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  13
                  14
                  15
                  16
                  17
                  18
                  19
                  20
                  21
                  <code>| v2.1struct names | v3.0struct names |
                  | ccColor3B         | Color3B |
                  | ccColor4B         | Color4B |
                  | ccColor4F         | Color4F |
                  | ccVertex2F        | Vertex2F |
                  | ccVertex3F        | Vertex3F |
                  | ccTex2F           | Tex2F |
                  | ccPointSprite     | PointSprite |
                  | ccQuad2           | Quad2 |
                  | ccQuad3           | Quad3 |
                  | ccV2F_C4B_T2F     | V2F_C4B_T2F |
                  | ccV2F_C4F_T2F     | V2F_C4F_T2F |
                  | ccV3F_C4B_T2F     | V3F_C4B_T2F |
                  | ccV2F_C4B_T2F_Triangle | V2F_C4B_T2F_Triangle |
                  | ccV2F_C4B_T2F_Quad | V2F_C4B_T2F_Quad |
                  | ccV3F_C4B_T2F_Quad | V3F_C4B_T2F_Quad |
                  | ccV2F_C4F_T2F_Quad | V2F_C4F_T2F_Quad |
                  | ccBlendFunc       | BlendFunc |
                  | ccT2F_Quad        | T2F_Quad |
                  | ccAnimationFrameData | AnimationFrameData |
                  </code>

                  Global functions changed example

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  13
                  14
                  15
                  16
                  17
                  18
                  19
                  20
                  21
                  22
                  23
                  // in v2.1
                  ccColor3B color3B = ccc3(0,0,0);
                  ccc3BEqual(color3B, ccc3(1,1,1));
                  ccColor4B color4B = ccc4(0,0,0,0);
                  ccColor4F color4F = ccc4f(0,0,0,0);
                  color4F = ccc4FFromccc3B(color3B);
                  color4F = ccc4FFromccc4B(color4B);
                  ccc4FEqual(color4F, ccc4F(1,1,1,1));
                  color4B = ccc4BFromccc4F(color4F);
                   
                  color3B = ccWHITE;
                   
                  // in v3.0
                  Color3B color3B = Color3B(0,0,0);
                  color3B.equals(Color3B(1,1,1));
                  Color4B color4B = Color4B(0,0,0,0);
                  Color4F color4F = Color4F(0,0,0,0);
                  color4F = Color4F(color3B);
                  color4F = Color4F(color4B);
                  color4F.equals(Color4F(1,1,1,1));
                  color4B = Color4B(color4F);
                   
                  color3B = Color3B::WHITE;

                  deprecated functions and global variables

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  13
                  14
                  15
                  16
                  17
                  18
                  19
                  20
                  21
                  22
                  23
                  24
                  25
                  26
                  27
                  28
                  29
                  30
                  31
                  32
                  33
                  34
                  35
                  36
                  37
                  38
                  39
                  40
                  41
                  42
                  43
                  44
                  45
                  46
                  47
                  48
                  49
                  50
                  51
                  52
                  53
                  54
                  55
                  56
                  57
                  58
                  59
                  60
                  61
                  62
                  63
                  64
                  65
                  66
                  67
                  68
                  69
                  70
                  71
                  72
                  73
                  74
                  75
                  76
                  77
                  78
                  79
                  80
                  81
                  82
                  83
                  84
                  <code>| v2.1names    | v3.0names |
                  | ccp           | Point |
                  | ccpNeg        | Point::- |
                  | ccpAdd        | Point::+ |
                  | ccpSub        | Point::- |
                  | ccpMult       | Point::* |
                  | ccpMidpoint   | Point::getMidpoint |
                  | ccpDot        | Point::dot |
                  | ccpCrosss     | Point::cross |
                  | ccpPerp       | Point::getPerp |
                  | ccpRPerp      | Point::getRPerp |
                  | ccpProject    | Point::project |
                  | ccpRotate     | Point::rotate |
                  | ccpUnrotate   | Point::unrotate |
                  | ccpLengthSQ   | Point::getLengthSq() |
                  | ccpDistanceSQ | Point::getDistanceSq |
                  | ccpLength     | Point::getLength |
                  | ccpDistance   | Point::getDistance |
                  | ccpNormalize  | Point::normalize |
                  | ccpForAngle   | Point::forAngle |
                  | ccpToAngle    | Point::getAngle |
                  | ccpClamp      | Point::getClampPoint |
                  | ccpFromSize   | Point::Point |
                  | ccpCompOp     | Point::compOp |
                  | ccpLerp       | Point::lerp |
                  | ccpFuzzyEqual | Point::fuzzyEqual |
                  | ccpCompMult   | Point::Point |
                  | ccpAngleSigned | Point::getAngle |
                  | ccpAngle      | Point::getAngle |
                  | ccpRotateByAngle | Point::rotateByAngle |
                  | ccpLineInersect | Point::isLineIntersect |
                  | ccpSegmentIntersect | Point::isSegmentIntersect |
                  | ccpIntersectPoint | Point::getIntersectPoint |
                  | CCPointMake   | Point::Point |
                  | CCSizeMake    | Size::Size |
                  | CCRectMake    | Rect::Rect |
                  | PointZero     | Point::ZERO |
                  | SizeZero      | Size::ZERO |
                  | RectZero      | Rect::ZERO |
                  | TiledGrid3DAction::tile | TiledGrid3DAction::getTile |
                  | TiledGrid3DAction::originalTile | TiledGrid3DAction::getOriginalTile |
                  | TiledGrid3D::tile | TiledGrid3D::getTile |
                  | TiledGrid3D::originalTile | TiledGrid3D::getOriginalTile |
                  | Grid3DAction::vertex | Grid3DAction::getVertex |
                  | Grid3DAction::originalVertex | Grid3DAction::getOriginalVertex |
                  | Grid3D::vertex | Grid3D::getVertex |
                  | Grid3D::originalVertex | Grid3D::getOriginalVertex |
                  | Configuration::sharedConfiguration | Configuration::getInstance |
                  | Configuration::purgeConfiguration | Configuration::destroyInstance() |
                  | Director::sharedDirector() | Director::getInstance() |
                  | FileUtils::sharedFileUtils | FileUtils::getInstance |
                  | FileUtils::purgeFileUtils | FileUtils::destroyInstance |
                  | EGLView::sharedOpenGLView | EGLView::getInstance |
                  | ShaderCache::sharedShaderCache | ShaderCache::getInstance |
                  | ShaderCache::purgeSharedShaderCache | ShaderCache::destroyInstance |
                  | AnimationCache::sharedAnimationCache | AnimationCache::getInstance |
                  | AnimationCache::purgeSharedAnimationCache | AnimationCache::destroyInstance |
                  | SpriteFrameCache::sharedSpriteFrameCache | SpriteFrameCache::getInstance |
                  | SpriteFrameCache:: purgeSharedSpriteFrameCache | SpriteFrameCache::destroyInstance |
                  | NotificationCenter::sharedNotificationCenter | NotificationCenter::getInstance |
                  | NotificationCenter:: purgeNotificationCenter | NotificationCenter::destroyInstance |
                  | Profiler::sharedProfiler | Profiler::getInstance |
                  | UserDefault::sharedUserDefault | UserDefault::getInstance |
                  | UserDefault::purgeSharedUserDefault | UserDefault::destroyInstance |
                  | Application::sharedApplication | Application::getInstance |
                  | ccc3()        | Color3B() |
                  | ccc3BEqual()  | Color3B::equals() |
                  | ccc4()        | Color4B() |
                  | ccc4FFromccc3B() | Color4F() |
                  | ccc4f()       | Color4F() |
                  | ccc4FFromccc4B() | Color4F() |
                  | ccc4BFromccc4F() | Color4B() |
                  | ccc4FEqual()  | Color4F::equals() |
                  | ccWHITE       | Color3B::WHITE |
                  | ccYELLOW      | Color3B::YELLOW |
                  | ccBLUE        | Color3B::BLUE |
                  | ccGREEN       | Color3B::GREEN |
                  | ccRED         | Color3B::RED |
                  | ccMAGENTA     | Color3B::MAGENTA |
                  | ccBLACK       | Color3B::BLACK |
                  | ccORANGE      | Color3B::ORANGE |
                  | ccGRAY        | Color3B::GRAY |
                  | kBlendFuncDisable | BlendFunc::BLEND_FUNC_DISABLE |
                  </code>

                  Changes in the Lua bindings

                  Use bindings-generator tool for Lua binding

                  Only configurating the *.ini files in the tools/tolua folder,not to write a lot of *.pkg files

                  Use ScriptHandlerMgr to manage the register and unregister of Lua function

                  When we want to add register and unregister functions of Lua function for class, we need to change the declarative and defined files and then bind to Lua. In v3.0, we use the ScriptHandlerMgr. As an example, lets see the MenuItem class: In the 2.x version, we needed to add a declaration in the MenuItem header file:

                  ?
                  1
                  2
                  virtualvoidregisterScriptTapHandler(intnHandler);
                  virtualvoidunregisterScriptTapHandler(void);

                  then implement them in the .cpp file. In the Lua script ,we use it as follow:

                  ?
                  1
                  menuItem:registerScriptTapHandler(luafunction)

                  In v3.0 version, we only need to add the HandlerType enum in the ScriptHandlerMgr, and the implementation in luascript as follow:

                  ?
                  1
                  ScriptHandlerMgr:getInstance():registerScriptHandler(menuItem, luafunction,cc.HANDLERTYPE_MENU_CLICKED)

                  Use "cc" and "ccs" as module name

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  // v2.x
                  CCSprite:create(s_pPathGrossini)
                  CCEaseIn:create(createSimpleMoveBy(),2.5)
                   
                  UILayout:create()
                   
                  // v3.0
                  cc.Director:getInstance():getWinSize()
                  cc.EaseIn:create(createSimpleMoveBy(),2.5)
                   
                  ccs.UILayer:create()

                  Deprecated funtions, tables and classes

                  Add a lot of deprecate funtions、table and classes to support 2.x version as far as possible Note:Rect does not support the origin and size member variables

                  Use the Lua table instead of the some structs and classes binding

                  Point、Size、Rect、Color3b、Color4b、Color4F、AffineTransform、FontDefinition、Array、Dictionary、PointArray are not bound. The difference is as follow:

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  // v2.x
                  local pt = CCPoint(0, 0)
                  local rect = CCRect(0,0,0,0)
                  // v3.0
                  local pt = cc.p(0,0)
                  local rect = cc.rect(0,0,0,0)

                  Global functions about these classes are changed as follow:

                  ?
                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  // in v2.x
                  local pt = ccp(0,0)
                  local color3B = ccc3(0,0,0)
                  local color4B = ccc4(0,0,0,0)
                   
                  // in v3.0
                  local pt  = cc.p(0,0)
                  local color3B = cc.c3b(0,0,0)
                  local color4B = cc.c4b(0,0,0,0)

                  Through the funtions of the LuaBasicConversion file,they can be converted the Lua table when they are as a parameter in the bindings generator.

                  Known issues

                  You can find all the known issues "here":http://www.cocos2d-x.org/projects/native/issues



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值