cocos2d-x v3.15rc0 发布

诸如其他的新加的功能可以写详细点么
比如 js 增加了下载任务······

好的,我会让 @panda 帮忙补充一下

可以把解压 压缩 下载 这些做成JSB接口吗? 虽然这些我们自己可以写,但是每次要修改引擎很麻烦呢~(为此我还停留在3.10)

1赞

https://github.com/Stuk/jszip
这个不知道能用不,可以试试。

顺带我还想问一句,lua的有没有
官网上lua的文档一直都是coming soon········

@ourbrander 为什么每次要改引擎呢?你写到这些模块应该和引擎没关系吧。
@valiancer 关于lua文档,你最想要的是什么?引擎的原理和使用方式和c++差不多。

谢谢回复,不过我不是这个意思。 我的意思是解压和打包上传都是非常常用的功能(客户端,非WEB),可以考虑将这些功能作为工具类做在引擎里,方便使用,避免我们自己写修改引擎,导致升级麻烦。

嗯 这个功能确实是和引擎模块没啥关系 我的确是独立出来的。


如果渲染相关能暴露更多API给JS用就好了 ,readPixels读取颜色值 需要修改引擎的代码(或者继承,然后扩展)

能否出一个自动导出JSB继承NODE等(coco2dx核心类)的例子啊,一直用不来自动导出,全手工。。。

目测将转化一部分Eclipse用户为Android Studio用户

新建工程 proj.android编译失败,删除Application.mk中的APP_SHORT_COMMANDS := true就可以了,请确认!

报告一个一直存在的问题:
从cpp发送的自定义事件,如果带有userData,这个userData 在传递给JS端的时候会被抛弃。
换句话说就是:
JS端无法收到从CPP端发送过来的自定义事件的数据对象,
这个问题一直存在,从未被修复过,请问这次发布版本能否将这个问题修复一下?
@minggo @panda

下面是具体测试案例:

测试功能文件:
test315_custom_event_example.zip (52.5 KB)

测试代码预览:
CPP:

`EventCustom * event=new EventCustom(“custom_test”);

map<string,string> data;
data["text"]="I am from cpp";


event->setUserData(&data);

auto director = Director::getInstance();

// director->getEventDispatcher()->dispatchEvent(event); //the same as below, don’t work either.

director->getEventDispatcher()->dispatchCustomEvent("custom_test",&data);
return true;`


JS:

var _self=this;
_self.showLog("\n--------cpp custom event userdata is empty -------");
var listener = cc.EventListener.create({
event: cc.EventListener.CUSTOM,
eventName:“custom_test”,//event name is the same as cpp
callback: function (evt) {
_self.showLog(“Got custom event from cpp!”);

                var msg = evt.getUserData();
                if(msg==null){
                    _self.showLog("But user data is null...,Should print \"I am from cpp\"");
                     
                    return;
                }
                _self.showLog("Wow! Got user data!!");
                   
                _self.showLog(msg.text);//Should print "I am from cpp";
                 
        }
    });

     cc.eventManager.addListener(listener, 2);


    var node=new cc.Node();
    _self.addChild(node);
    _self.sendEvent();//send a custom event, set user data in cpp code.(JUST FOR SIMPLE TEST);

ccui.Scale9Sprite 这个类, 在js的导出接口中, initWithSpriteFrameName只支持两个参数, 以前是支持一个参数的。

bool js_cocos2dx_ui_Scale9Sprite_initWithSpriteFrameName(JSContext *cx, uint32_t argc, jsval *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
bool ok = true;
JS::RootedObject obj(cx, args.thisv().toObjectOrNull());
js_proxy_t proxy = jsb_get_js_proxy(obj);
cocos2d::ui::Scale9Sprite
cobj = (cocos2d::ui::Scale9Sprite *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, false, “js_cocos2dx_ui_Scale9Sprite_initWithSpriteFrameName : Invalid Native Object”);

if (argc == 2) {
    std::string arg0;
    cocos2d::Rect arg1;
    ok &= jsval_to_std_string(cx, args.get(0), &arg0);
    ok &= jsval_to_ccrect(cx, args.get(1), &arg1);
    JSB_PRECONDITION2(ok, cx, false, "js_cocos2dx_ui_Scale9Sprite_initWithSpriteFrameName : Error processing arguments");
    bool ret = cobj->initWithSpriteFrameName(arg0, arg1);
    JS::RootedValue jsret(cx);
    jsret = BOOLEAN_TO_JSVAL(ret);
    args.rval().set(jsret);
    return true;
}

JS_ReportError(cx, "js_cocos2dx_ui_Scale9Sprite_initWithSpriteFrameName : wrong number of arguments: %d, was expecting %d", argc, 2);
return false;

}

看绑定没有 argc == 1的情况, 建议加上

if (argc == 1) {
	std::string arg0;
	ok &= jsval_to_std_string(cx, args.get(0), &arg0);
	JSB_PRECONDITION2(ok, cx, false, "js_cocos2dx_ui_Scale9Sprite_initWithSpriteFrameName : Error processing arguments");
	bool ret = cobj->initWithSpriteFrameName(arg0);
	JS::RootedValue jsret(cx);
	jsret = BOOLEAN_TO_JSVAL(ret);
	args.rval().set(jsret);
	return true;
}

editbox重影的问题 试下mac和ios都有 监听文本改变editBoxTextChanged在里面setString就会出现
而且输入状态下文字和光标会上移
测试用的是js-test

var label = ccui.Text(text, GFontDef.fontName, 20);

var oldSetString = label.setString.bind(label);
label.setString = function (str) {
    console.log("xxxxxx")
    oldSetString(str);
    console.log("1111111")
   .....
};

以前是可以这样的, 但现在
xxxxxx
JS: frameworks/runtime-src/proj.win32/Debug.win32/script/jsb_boot.js:1837:TypeError: ‘prototype’ property of fNOP is not an object

执行到oldSetString就出错了

现在要怎么写, 为什么这样的写法不被支持了?

var oldSetString = label.setString;
label.setString = function (str) {
    oldSetString.apply(label, [str]);
};

换成这样是可以的。但为什么bind不行, 是不是bug, 还是使用不规范, 不被支持?
但有时候改别人代码, 需要一些功能, 不得不这样做啊

其实我想说的是3.14版本,mac平台,QT用cmake编译,AudioEngine播放音效,stop音效的时候会崩溃
3.15也不知道引擎组改了什么,这个崩溃被修复了。。

3.15 ,怎么样了。。。项目等着上线呢。。。人呢。

3.15的换了解码库

怎么没人做个回复啊