cocos2d-js 把JS错误打印到屏幕上

原创 2016年08月30日 10:29:41

在编程或者QA测试过程中,把debug的包中JS错误打印在屏幕上可以增加开发效率,降低定位bug时间成本。

修改ScriptingCore.cpp文件:

void ScriptingCore::reportError(JSContext *cx, const char *message, JSErrorReport *report)
{
    js_log("%s:%u:%s\n",
            report->filename ? report->filename : "<no filename=\"filename\">",
            (unsigned int) report->lineno,
            message);

	// xiaohei add error layer
	ScriptingCore::getInstance()->showErrorLayer();
};

void ScriptingCore::showErrorLayer()
{
	int delv = 0;
	auto isDelv = localStorageGetItem("xh_error");
	if (!isDelv.empty()) {
		delv = atoi(isDelv.c_str());
	}

	if (_js_log_buf && delv > 0) {
		auto winSize = Director::getInstance()->getWinSize();
		auto errLayer = LayerColor::create();
		errLayer->initWithColor(Color4B(0, 0, 0, 0), winSize.width, winSize.height);
		errLayer->setAnchorPoint(Point(0.5f, 0.5f));
		errLayer->setPosition(Point(0, 0));
		errLayer->setOpacity(200);
		Director::getInstance()->getRunningScene()->addChild(errLayer, 10000000, 952700);

		auto listener = EventListenerTouchOneByOne::create();
		listener->onTouchBegan = CC_CALLBACK_0(ScriptingCore::onErrorLayerTouchBegin, this);
		listener->setSwallowTouches(true);
		Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, errLayer);

		std::string errlog = _js_log_buf;
		auto errorLabel = Label::createWithTTF(errlog, "common/font/DFGB_Y7_0.ttf", 18);
		errorLabel->setColor(Color3B::WHITE);
		errorLabel->setAnchorPoint(Point(0.5f, 0.5f));
		errorLabel->setPosition(Point(winSize.width / 2.0, winSize.height / 2.0 + 150));
		errLayer->addChild(errorLabel, 10);

		std::string path = "res/ui/common/common_close.png";
		auto swapMenuItem = MenuItemImage::create(path, path, CC_CALLBACK_0(ScriptingCore::removeErrorLayer, this));
		auto swapMenu = Menu::createWithItem(swapMenuItem);
		swapMenu->setPosition(winSize.width - 100, winSize.height - 100);
		errLayer->addChild(swapMenu, 100);
	}
}

bool ScriptingCore::onErrorLayerTouchBegin()
{
	return true;
}

void ScriptingCore::removeErrorLayer()
{
	Director::getInstance()->getRunningScene()->removeChildByTag(952700);
}


重写reportError把错误展示在屏幕上,并支持关闭操作

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JavaScript强化教程 —— Cocos2d-JS的屏幕适配方案

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程​ —— Cocos2d-JS的屏幕适配方案   1. 设置屏幕适配策略(Resolution Pol...

cocos2d-js 系列[1] 屏幕的适配

屏幕的适配 与Cocos2d-js第一次亲密的接触!

cocos2d-js 3.0 屏幕适配方案 分辨率适应

cocos2d-js 3.0 屏幕适配方案 分辨率适应 首先介绍一个api和相应的参数: cc.view.setDesignResolutionSize(1024, 768, cc.R...

COCOS2D-JS的屏幕适配方案

Cocos2d-JS中的屏幕适配模式在Web引擎中和原生引擎中的差异比较大,但是API还是统一一致的。本章主要内容以Web引擎中的屏幕适配策略为核心来讨论,原生引擎中行为的不一致性将在本章最后详细介绍...

Cocos2d-js的屏幕适配方案

Cocos2d-JS中的屏幕适配模式在Web引擎中和原生引擎中的差异比较大,但是API还是统一一致的。本章主要内容以Web引擎中的屏幕适配策略为核心来讨论,原生引擎中行为的不一致性将在本章最后详细介绍...

Cocos2d-js 3.0 颜色变换(调整sprite/图片的色调)

Flash在滤镜方面做得比较成熟,starling也有很多现成的办法。 但Cocos2D这里就显得比较单薄,百度/谷歌很少相关资料。 后续如果有时间,再慢慢整理各种滤镜效果。   ...

Cocos2d-js中Chipmunk引擎

  • 2017-02-10 11:39
  • 6.96MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)