SpeedCC发布了,cocos2d-x下强大而快速的免费开源开发框架

SpeedCC 使用C++开发的重磅游戏开发框架,源码完全开源,全新的编程设计思念。

特点:

  1. 显著提升开发效率
  2. 轻思维
  3. 高性能
  4. 代码优雅

场景代码例子

SC_BEGIN_CONTAINER_ROOT(nullptr,SCWinSize)

// 创建并添加 cocos2d::Label
    SC_INSERT_LABEL(nullptr,"dock=top|mid-x; y-by=-10;","Title","",20)

   // 创建并添加  cocos2d::Sprite 到父结点的中心位置
    SC_INSERT_SPRITE(nullptr,"dock=center;","HelloWorld.png")

    // 创建 cocos2d::LayerColor 父结点
    SC_BEGIN_CONTAINER_LAYER_COLOR(nullptr, "dock=bottom|right;", Size(80,40), Color4B::BLUE)
    	// create and add cocos2d::MenuItemLabel
        SC_INSERT_BUTTON_LABEL(nullptr,"dock=center;", "exit", "", 18, SCF(onButtonExit))
    SC_END_CONTAINER
SC_END_CONTAINER

游戏逻辑代码

SC_BEGIN_ROLE(kRoleIDDirector,kTestStrategyID1,this)
    ON_MSG_BEHAVIOR(kMsgReady, ptrBehaviorReady)
    ON_MSG_BEHAVIOR(kMsgGameOver, ptrBehaviorGameOver)

    ON_MSG_NEXT_STRATEGY(kMsgFight, kTestStrategyID2)
 
    IN_STRATEGY(kTestStrategyID2)
        ON_MSG_NEXT_STRATEGY(kMsgEsc, kTestStrategyID1)
        ON_MSG_BEHAVIOR(kMsgAttact,ptrBvrAttact)  
        ON_CMD_BEHAVIOR(kMsgDefense, ptrBvrDefense)
    ENDIN_STRATEGY
SC_END_ROLE

打开项目源码了解更多SpeedCC强大而又不可思议的功能

SpeedCC Github: https://github.com/kevinwu1024/SpeedCC

游戏例程: https://github.com/kevinwu1024/SampleGames

手撸UI?

手撸UI?

SpeedCC 是一个开发框架而非编辑器,手工敲代码是自然的事了。在创建场景方面的代码是 配置式代码 ,能让开发者像编辑XML文件一样来编辑场景,但 配置式代码 也是代码,只是看起来容易理解,所以它可以无缝地和其他逻辑混合编写,而不是像现有编辑器 动静分明 地创建场景,SpeedCC 既可以 静中有动动中有静 地创建,因此这种创建场景方式是除编辑器外另一种具有特色的编辑方式。

除了场景创建外,SpeedCC还有更多特色的功能,比如消息驱动、ECS和FSM混合体的Stage模式、数据绑定、场景导航等等,这些功能能很好地帮助开发者快速构建他们的游戏。

前3个特点我不好说,但是。。。。你说这样的代码优雅?

优雅并没有客观量化标准,是每个人的自己的主观见解,就如东北普通个子的人来到南方可能会被认为魁梧。优雅 是我设计SpeedCC的目标之一,同时也是由我个人的主观感受来界定。比较下面的代码

传统的写法

MyClass1* pClass1;
MyClass2* pClass2;
MyClass3* pClass3;
auto listener = EventListenerTouchAllAtOnce::create();

CallFunc::create(CC_CALLBACK_0(MyClass1::foo1,pClass1));
CallFuncN::create(CC_CALLBACK_1(MyClass2::foo2,pClass2));
listener->onTouchesBegan = CC_CALLBACK_2(MyClass3::foo3, pClass3);

SpeedCC的写法

MyClass1* pClass1;
MyClass2* pClass2;
MyClass3* pClass3;
auto listener = EventListenerTouchAllAtOnce::create();

CallFunc::create(SC_MAKE_FUNC(foo1,pClass1));
CallFuncN::create(SC_MAKE_FUNC(foo2,pClass2));
listener->onTouchesBegan = SC_MAKE_FUNC(foo3, pClass3);

这个改善可以说微不足道,我可以找出千万个理由不做这个工作,但却为了更 “优雅” 而去做了,类似这样 “优雅” 的例子我还可以举出更多。

当然你可能不同意这是 优雅 了,但这毕竟是我的个人的看法而已。