Creator plugin to support C++& Lua in cocos2d-x
Table of Contents generated with DocToc
Given that Creator uses a component based model to create its objects, and cocos2d-x has its monolithic structure, it is only possible to support a limited subset of Creator features.
Supported nodes:
Scene
Sprite
Canvas(but only one per scene)
ScrollView
Label
EditBox
ParticleSystem
TiledMap
Button
ProgressBar
RichText:
line heightbecause cocos2d-x's
RichTextdoesn't support this features.
horizontal alignmentbecause cocos2d-x's
RichTextdoesn't support this features. Though cocos2d-x v3.16+ supports this feature, but it is hard for plugin to danymicly supporting it according cocos2d-x's version.
SpineSkeleton
Widget: only supports
AlignOnce
Animations
VideoPlayer: iOS should add
MediaPlayer.frameworkto the project
WebView
Slider
Toggle
ToggleGroup
PageView
Mask
Collider
Prefab
DragonBones
MotionStreak
Supporting JavaScript scripts would be overkill. If you need JavaScript scripting support, just use Creator.
Can fetch this branch and run
cpp-empty-testor
lua-empty-test. The branch based on v3.15, don't forget to update external libraries.
Currently support on Mac, iOS, Android and Windows.
You will find:
NATIVE_PROJECT_ROOT/Classes/reader(it is NATIVE_PROJECT_ROOT/frameworks/runtime-src/Classes/reader for lua project)
NATIVE_PROJECT_ROOT/Resources/creator(it is NATIVE_PROJECT_ROOT/frameworks/runtime-src/Resources/creator for lua project)
For cpp projects, just add
readerinto header search path.
For lua projects, add the following header paths:
If developing for Android, can just use existing
Android.mk, for example, use the
Android.mkinto your game's
Android.mklike this:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := MyGame_shared
LOCAL_MODULE_FILENAME := libMyGame
LOCAL_SRC_FILES := hellocpp/main.cpp
../../Classes/AppDelegate.cpp
../../Classes/HelloWorldScene.cppLOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
_COCOS_HEADER_ANDROID_BEGIN
_COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_STATIC_LIBRARIES += creator_reader_lua # for lua project
LOCAL_STATIC_LIBRARIES += creator_reader # add dependence
_COCOS_LIB_ANDROID_BEGIN
_COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
$(call import-module,.) $(call import-module, ./../../Classes/reader) # import module path
If developing with Lua, then need to add
CreatorReaderBinding.cppinto plugin's Android.mk.
// mygame.cpp#include "reader/CreatorReader.h"
void some_function() { creator::CreatorReader* reader = creator::CreatorReader::createWithFilename("creator/scenes/sprites/CreatorSprites.ccreator");
// will create the needed spritesheets + design resolution reader->setup(); // get the scene graph Scene* scene = reader->getSceneGraph(); // ...and use it Director::getInstance()->replaceScene(scene);
}
Register creator binding codes in c++
#include "reader/lua-bindings/creator_reader_bindings.hpp"...
register_creator_reader_manual(L);
Use in lua
local creatorReader = creator.CreatorReader:createWithFilename('creator/CreatorSprites.ccreator') creatorReader:setup() local scene = creatorReader:getSceneGraph() cc.Director:getInstance():replaceScene(scene)
ColliderManageris used to manage collisions. Every scene has an instance of
ColliderManager. You can use it like this to listen collision events:
creator::CreatorReader* reader = creator::CreatorReader::createWithFilename("creator/CreatorSprites.ccreator");// will create the needed spritesheets + design resolution reader->setup();
// get the scene graph Scene* scene = reader->getSceneGraph();
auto colliderManager = scene->getColliderManager(); colliderManager->registerCollitionCallback([=](creator::Contract::CollisionType type, creator::Collider* collider1, creator::Collider* collider2) { if (type == creator::Contract::CollisionType::ENTER) colliderManager->enableDebugDraw(true);
if (type == creator::Contract::CollisionType::EXIT) colliderManager->enableDebugDraw(false);
}, "");
More features of
colliderManagercan refer to the header file.
You can install the released version from Creator, or you can copy
creator_project/packages/creator_luacpp_supportinto
Cocos Creator project/packages, then you will see the plugin in Project -> LuaCPP Support.