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

在编程或者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把错误展示在屏幕上,并支持关闭操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值