From 185f00a833d6fe1660e6f01230637402cc29a89d Mon Sep 17 00:00:00 2001 From: joshuastray Date: Mon, 3 Nov 2014 15:18:07 +0800 Subject: [PATCH 1/8] Added missing properties for cp.SegmentShape --- .../js_bindings_chipmunk_auto_classes.cpp | 22 +++++++++++++++++++ .../bindings/script/jsb_chipmunk.js | 8 +++++++ 2 files changed, 30 insertions(+) diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp index e723af28f6..b6e0252ef8 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp @@ -4917,6 +4917,26 @@ bool JSB_cpSegmentShape_setNeighbors(JSContext *cx, uint32_t argc, jsval *vp) { return true; } +static bool js_get_cpSegmentShape_a_tangent(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(obj); + cpSegmentShape* shape = (cpSegmentShape*) proxy->handle; + cpVect vec = shape->a_tangent; + jsval ret = cpVect_to_jsval( cx, vec); + vp.set(ret); + return true; +} + +static bool js_get_cpSegmentShape_b_tangent(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(obj); + cpSegmentShape* shape = (cpSegmentShape*) proxy->handle; + cpVect vec = shape->b_tangent; + jsval ret = cpVect_to_jsval( cx, vec); + vp.set(ret); + return true; +} + void JSB_cpSegmentShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ) { JSB_cpSegmentShape_class = (JSClass *)calloc(1, sizeof(JSClass)); @@ -4932,6 +4952,8 @@ void JSB_cpSegmentShape_createClass(JSContext *cx, JSObject* globalObj, const ch JSB_cpSegmentShape_class->flags = JSCLASS_HAS_PRIVATE; static JSPropertySpec properties[] = { + {"a_tangent", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpSegmentShape_a_tangent), JSOP_NULLWRAPPER}, + {"b_tangent", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpSegmentShape_b_tangent), JSOP_NULLWRAPPER}, {0, 0, 0, 0, 0} }; static JSFunctionSpec funcs[] = { diff --git a/frameworks/js-bindings/bindings/script/jsb_chipmunk.js b/frameworks/js-bindings/bindings/script/jsb_chipmunk.js index 737bc1871a..c4c4a3fd23 100644 --- a/frameworks/js-bindings/bindings/script/jsb_chipmunk.js +++ b/frameworks/js-bindings/bindings/script/jsb_chipmunk.js @@ -338,6 +338,14 @@ _proto.type = "circle"; cc.defineGetterSetter(_proto, "r", _proto.getRadius); cc.defineGetterSetter(_proto, "c", _proto.getOffset); +//SegmentShape properties +_proto = cp.SegmentShape.prototype; +_proto.type = "segment"; +cc.defineGetterSetter(_proto, "a", _proto.getA); +cc.defineGetterSetter(_proto, "b", _proto.getB); +cc.defineGetterSetter(_proto, "n", _proto.getNormal); +cc.defineGetterSetter(_proto, "r", _proto.getRadius); + // Constraint properties Object.defineProperties(cp.Constraint.prototype, { From 8afd8231979aefdac5df1585b6c7b6da428c3288 Mon Sep 17 00:00:00 2001 From: joshuastray Date: Mon, 3 Nov 2014 15:49:51 +0800 Subject: [PATCH 2/8] Added type and verts property for cp.PolyShape --- .../js_bindings_chipmunk_auto_classes.cpp | 20 +++++++++++++++++++ .../bindings/script/jsb_chipmunk.js | 3 +++ 2 files changed, 23 insertions(+) diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp index b6e0252ef8..85b9d7961c 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp @@ -5036,6 +5036,25 @@ bool JSB_cpPolyShape_getVert(JSContext *cx, uint32_t argc, jsval *vp) { return true; } +static bool js_get_cpPolyShape_verts(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(obj); + cpPolyShape* shape = (cpPolyShape*) proxy->handle; + int numVerts = shape->numVerts; + cpVect* verts = shape->verts; + + JSObject *jsretArr = JS_NewArrayObject(cx, 0, NULL); + int i = 0; + while (i < numVerts) { + JS::RootedValue arrElement(cx); + arrElement = cpVect_to_jsval(cx, verts[i]); + JS_SetElement(cx, jsretArr, i, &arrElement); + i++; + } + vp.set(OBJECT_TO_JSVAL(jsretArr)); + return true; +} + void JSB_cpPolyShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ) { JSB_cpPolyShape_class = (JSClass *)calloc(1, sizeof(JSClass)); @@ -5051,6 +5070,7 @@ void JSB_cpPolyShape_createClass(JSContext *cx, JSObject* globalObj, const char* JSB_cpPolyShape_class->flags = JSCLASS_HAS_PRIVATE; static JSPropertySpec properties[] = { + {"verts", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpPolyShape_verts), JSOP_NULLWRAPPER}, {0, 0, 0, 0, 0} }; static JSFunctionSpec funcs[] = { diff --git a/frameworks/js-bindings/bindings/script/jsb_chipmunk.js b/frameworks/js-bindings/bindings/script/jsb_chipmunk.js index c4c4a3fd23..ba538d64a2 100644 --- a/frameworks/js-bindings/bindings/script/jsb_chipmunk.js +++ b/frameworks/js-bindings/bindings/script/jsb_chipmunk.js @@ -346,6 +346,9 @@ cc.defineGetterSetter(_proto, "b", _proto.getB); cc.defineGetterSetter(_proto, "n", _proto.getNormal); cc.defineGetterSetter(_proto, "r", _proto.getRadius); +//PolyShape properties +_proto = cp.PolyShape.prototype; +_proto.type = "poly"; // Constraint properties Object.defineProperties(cp.Constraint.prototype, { From 9510d1cc5896acadc4843a3d38f10632c45bcaa1 Mon Sep 17 00:00:00 2001 From: joshuastray Date: Mon, 3 Nov 2014 16:45:54 +0800 Subject: [PATCH 3/8] Modify verts of cp.PolyShape to be compatible with Chipmunk.js --- .../chipmunk/js_bindings_chipmunk_auto_classes.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp index 85b9d7961c..49c92fcb06 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp @@ -5046,9 +5046,14 @@ static bool js_get_cpPolyShape_verts(JSContext *cx, JS::HandleObject obj, JS::Ha JSObject *jsretArr = JS_NewArrayObject(cx, 0, NULL); int i = 0; while (i < numVerts) { - JS::RootedValue arrElement(cx); - arrElement = cpVect_to_jsval(cx, verts[i]); - JS_SetElement(cx, jsretArr, i, &arrElement); + cpVect vec = verts[i]; + + JS::RootedValue x(cx); + JS::RootedValue y(cx); + x = DOUBLE_TO_JSVAL(vec.x); + y = DOUBLE_TO_JSVAL(vec.y); + JS_SetElement(cx, jsretArr, i*2, &x); + JS_SetElement(cx, jsretArr, i*2+1, &y); i++; } vp.set(OBJECT_TO_JSVAL(jsretArr)); From affc49410a562257874785ddd1988e4f51932ddc Mon Sep 17 00:00:00 2001 From: joshuastray Date: Mon, 3 Nov 2014 17:37:16 +0800 Subject: [PATCH 4/8] Added planes property of cp.PolyShape --- .../js_bindings_chipmunk_auto_classes.cpp | 86 +++++++++++++++++++ .../js_bindings_chipmunk_auto_classes.h | 3 + ...dings_chipmunk_auto_classes_registration.h | 1 + 3 files changed, 90 insertions(+) diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp index 49c92fcb06..070b11faf5 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp @@ -5060,6 +5060,35 @@ static bool js_get_cpPolyShape_verts(JSContext *cx, JS::HandleObject obj, JS::Ha return true; } +static bool js_get_cpPolyShape_planes(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(obj); + cpPolyShape* shape = (cpPolyShape*) proxy->handle; + int numVerts = shape->numVerts; + cpSplittingPlane* planes = shape->planes; + + JSObject *jsretArr = JS_NewArrayObject(cx, 0, NULL); + int i = 0; + while(i < numVerts){ + cpSplittingPlane *plane = planes + i; + JS::RootedValue elem(cx); + + JSObject *jsobj = jsb_get_jsobject_for_proxy(plane); + if(!jsobj) + { + jsobj = JS_NewObject(cx, JSB_cpSplittingPlane_class, JSB_cpSplittingPlane_object, NULL); + jsb_set_jsobject_for_proxy(jsobj, plane); + jsb_set_c_proxy_for_jsobject(jsobj, plane, JSB_C_FLAG_DO_NOT_CALL_FREE); + } + + elem = OBJECT_TO_JSVAL(jsobj); + JS_SetElement(cx, jsretArr, i, &elem); + i++; + } + vp.set(OBJECT_TO_JSVAL(jsretArr)); + return true; +} + void JSB_cpPolyShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ) { JSB_cpPolyShape_class = (JSClass *)calloc(1, sizeof(JSClass)); @@ -5076,6 +5105,7 @@ void JSB_cpPolyShape_createClass(JSContext *cx, JSObject* globalObj, const char* static JSPropertySpec properties[] = { {"verts", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpPolyShape_verts), JSOP_NULLWRAPPER}, + {"planes", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpPolyShape_planes), JSOP_NULLWRAPPER}, {0, 0, 0, 0, 0} }; static JSFunctionSpec funcs[] = { @@ -5092,6 +5122,62 @@ void JSB_cpPolyShape_createClass(JSContext *cx, JSObject* globalObj, const char* // JS_SetPropertyAttributes(cx, globalObj, name, JSPROP_ENUMERATE | JSPROP_READONLY, &found); } +// SplittingPlane +JSObject *JSB_cpSplittingPlane_object = NULL; +JSClass *JSB_cpSplittingPlane_class = NULL; + +// Destructor +void JSB_cpSplittingPlane_finalize(JSFreeOp *fop, JSObject *jsthis) +{ + //nothing need to do, cpSplittingPlane will be freed by it's shape +} + +bool js_get_cpSplitting_n(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(obj); + cpSplittingPlane* plane = (cpSplittingPlane*) proxy->handle; + cpVect vec = plane->n; + vp.set(cpVect_to_jsval(cx, vec)); + return true; +} + +bool js_get_cpSplitting_d(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(obj); + cpSplittingPlane* plane = (cpSplittingPlane*) proxy->handle; + vp.set(DOUBLE_TO_JSVAL(plane->d)); + return true; +} + +void JSB_cpSplittingPlane_createClass(JSContext *cx, JSObject* globalObj, const char* name ) +{ + JSB_cpSplittingPlane_class = (JSClass *)calloc(1, sizeof(JSClass)); + JSB_cpSplittingPlane_class->name = name; + JSB_cpSplittingPlane_class->addProperty = JS_PropertyStub; + JSB_cpSplittingPlane_class->delProperty = JS_DeletePropertyStub; + JSB_cpSplittingPlane_class->getProperty = JS_PropertyStub; + JSB_cpSplittingPlane_class->setProperty = JS_StrictPropertyStub; + JSB_cpSplittingPlane_class->enumerate = JS_EnumerateStub; + JSB_cpSplittingPlane_class->resolve = JS_ResolveStub; + JSB_cpSplittingPlane_class->convert = JS_ConvertStub; + JSB_cpSplittingPlane_class->finalize = JSB_cpSplittingPlane_finalize; + JSB_cpSplittingPlane_class->flags = JSCLASS_HAS_PRIVATE; + + static JSPropertySpec properties[] = { + {"n", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpSplitting_n), JSOP_NULLWRAPPER}, + {"d", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_get_cpSplitting_d), JSOP_NULLWRAPPER}, + {0, 0, 0, 0, 0} + }; + static JSFunctionSpec funcs[] = { + JS_FS_END + }; + static JSFunctionSpec st_funcs[] = { + JS_FS_END + }; + + JSB_cpSplittingPlane_object = JS_InitClass(cx, globalObj, NULL, JSB_cpSplittingPlane_class, NULL,0,properties,funcs,NULL,st_funcs); +} + bool JSB_cpSegmentQueryInfo_hitPoint(JSContext *cx, uint32_t argc, jsval *vp){ JSB_PRECONDITION2( argc == 2, cx, false, "Invalid number of arguments" ); diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.h b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.h index 177ad37f73..1ac11afa92 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.h +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.h @@ -67,4 +67,7 @@ void JSB_cpSegmentQueryInfo_createClass(JSContext *cx, JSObject* globalObj, cons extern JSObject *JSB_cpNearestPointQueryInfo_object; extern JSClass *JSB_cpNearestPointQueryInfo_class; void JSB_cpNearestPointQueryInfo_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpSplittingPlane_object; +extern JSClass *JSB_cpSplittingPlane_class; +void JSB_cpSplittingPlane_createClass(JSContext *cx, JSObject* globalObj, const char* name ); #endif // JSB_INCLUDE_CHIPMUNK diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes_registration.h b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes_registration.h index cd19abd013..635d3fbbbf 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes_registration.h +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes_registration.h @@ -26,4 +26,5 @@ JSB_cpSegmentShape_createClass(cx, chipmunk, "SegmentShape"); JSB_cpPolyShape_createClass(cx, chipmunk, "PolyShape"); JSB_cpSegmentQueryInfo_createClass(cx, chipmunk, "SegmentQueryInfo"); JSB_cpNearestPointQueryInfo_createClass(cx, chipmunk, "NearestPointQueryInfo"); +JSB_cpSplittingPlane_createClass(cx, chipmunk, "SplittingPlane"); #endif // JSB_INCLUDE_CHIPMUNK From 4024fde0b691a10dd4b5a05834fb2584f5793e4a Mon Sep 17 00:00:00 2001 From: joshuastray Date: Tue, 4 Nov 2014 10:34:02 +0800 Subject: [PATCH 5/8] Added a test for properties of shape --- .../js-tests/src/ChipmunkTest/ChipmunkTest.js | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js b/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js index 61192088c4..af74a18124 100644 --- a/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js +++ b/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js @@ -1792,6 +1792,56 @@ var Issue1073 = ChipmunkDemo.extend({ } }); +var Issue1083 = ChipmunkDemo.extend({ + ctor:function(){ + this._super(); + this._subtitle = 'Chipmunk Demo'; + this._title = 'Issue 1083'; + + var space = this.space; + + //add a segment + var mass = 1; + var length = 100; + var a = v(-length/2, 0), b = v(length/2, 0); + var body = space.addBody(new cp.Body(mass, cp.momentForSegment(mass, a, b))); + body.setPos(v(320, 340)); + var segment = new cp.SegmentShape(body, a, b, 20); + space.addShape(segment); + + //add a poly + var mass = 1; + var NUM_VERTS = 5; + var verts = new Array(NUM_VERTS * 2); + for(var i=0; i Date: Thu, 6 Nov 2014 09:50:53 +0800 Subject: [PATCH 6/8] Fixed typos --- samples/js-tests/src/ChipmunkTest/ChipmunkTest.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js b/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js index af74a18124..95a0e63238 100644 --- a/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js +++ b/samples/js-tests/src/ChipmunkTest/ChipmunkTest.js @@ -1826,9 +1826,9 @@ var Issue1083 = ChipmunkDemo.extend({ cc.assert(segment.a.x == -length/2, "SegmentShape assertion failed : a.x"); cc.assert(segment.a.y == 0, "SegmentShape assertion failed : a.y"); cc.assert(segment.b.x == length/2, "SegmentShape assertion failed : b.x"); - cc.assert(segment.a.y == 0, "SegmentShape assertion failed : a.y"); + cc.assert(segment.b.y == 0, "SegmentShape assertion failed : b.y"); var nomal = cp.v.perp(cp.v.normalize(cp.v.sub(b, a))); - cc.assert(segment.n.x == nomal.x, "SegmentShape assertion failed : n.y"); + cc.assert(segment.n.x == nomal.x, "SegmentShape assertion failed : n.x"); cc.assert(segment.n.y == nomal.y, "SegmentShape assertion failed : n.y"); cc.assert(segment.r == 20, "SegmentShape assertion failed : r"); @@ -1838,7 +1838,7 @@ var Issue1083 = ChipmunkDemo.extend({ var plane = poly.planes[0]; cc.assert(plane.d.toFixed(4) == 24.2705, "PolyShape assertion failed : planes d"); - cc.assert(plane.n.x.toFixed(4) == 0.8090, "PolyShape assertion failed : planes n") + cc.assert(plane.n.x.toFixed(4) == 0.8090, "PolyShape assertion failed : planes n"); } }); From 2bdca09658ecc92b43e53951225c1ee55814489d Mon Sep 17 00:00:00 2001 From: joshuastray Date: Thu, 6 Nov 2014 10:33:10 +0800 Subject: [PATCH 7/8] Fixed memory leak in bindings of cpSplittingPlane --- .../chipmunk/js_bindings_chipmunk_auto_classes.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp index 070b11faf5..a7f88910c8 100644 --- a/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp +++ b/frameworks/js-bindings/bindings/manual/chipmunk/js_bindings_chipmunk_auto_classes.cpp @@ -5129,7 +5129,15 @@ JSClass *JSB_cpSplittingPlane_class = NULL; // Destructor void JSB_cpSplittingPlane_finalize(JSFreeOp *fop, JSObject *jsthis) { - //nothing need to do, cpSplittingPlane will be freed by it's shape + jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + if( proxy ) { + CCLOGINFO("jsbindings: finalizing JS object %p (cpSplittingPlane), handle: %p", jsthis, proxy->handle); + + jsb_del_jsobject_for_proxy(proxy->handle); + jsb_del_c_proxy_for_jsobject(jsthis); + + //no need to free cpSplittingPlane, cpSplittingPlane will be freed by it's shape + } } bool js_get_cpSplitting_n(JSContext *cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp) From 5ae2efc623bebb9583fa588b21f87ee8fb692f00 Mon Sep 17 00:00:00 2001 From: Jialong Zhai Date: Fri, 7 Nov 2014 10:11:59 +0800 Subject: [PATCH 8/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4f7e840c6..eb36a7e87d 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Furthermore, JavaScript friendly APIs make your game development experience a br - Cocos2d-JS v3.0 uses Cocos2d-x 3.2 final as base of JSB solution - Cocos2d-JS v3.0 is compatible with Cocos Code IDE v1.0.0 RC2+ -- Cocos2d-JS v3.0 is compatible with Cocos Studio v1.2 - v1.5.0.1 +- Cocos2d-JS v3.0 is compatible with Cocos Studio v1.2 - v2.0 With any problems you might have, our communities are happy to help: