Ubuntu Cocos2dx 学习笔记——错误总结
2014-04-09 15:33
507 查看
转载请表明出处:http://blog.csdn.net/tim_shadow/article/details/23272423
如果将30-33行的代码注释掉,并去掉35-46行的注释,那么在Linux 和Android 上面都能够运行了同时,如果将 35-37行代码改为:
所以以后遇到这种类似的多参数方法一定要引起重视。
1.添加渐变背景时无任何背景效果
遇到一个很傻的问题,今天在添加一个渐变背景的时候,添加了如下代码,发现运行后没有看到效果CCLayerGradient*backGradient = CCLayerGradient::create(colorstart,colorend); backGradient->changeWidth(visibleSize.width); backGradient->changeHeight(visibleSize.height); backGradient->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); this->addChild(backGradient,0);结果后来无意中发现,在这段代码前面有一句话
return true;函数都已经返回了,怎么可能执行到,遂把ruturn语句拉到最后,运行成功,CDT与JDT的不同之处体现无疑,CDT这种情况IDE是不会提示错误的。
2.CCMenu::create()导致的不兼容
遇到一个比较特殊的情况,网上搜遍了没有找到原因,状况是:在linux上面能够完整运行,但是导入到Android手机上面的时候确出现闪退,CCLayer的初始代码如下:bool HelloWorld::init() { if (!CCLayer::init()) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCLabelTTF *start = CCLabelTTF::create("Start", "arial", 50); CCLabelTTF *pause = CCLabelTTF::create("Pause", "arial", 50); CCLabelTTF *resume = CCLabelTTF::create("Resume", "arial", 50); start->setColor(randccColor3B()); pause->setColor(randccColor3B()); resume->setColor(randccColor3B()); startMenuItem = CCMenuItemLabel::create(start, this, menu_selector(HelloWorld::startGame)); pauseMenuItem = CCMenuItemLabel::create(pause, this, menu_selector(HelloWorld::pauseGame)); resumeMenuItem = CCMenuItemLabel::create(resume, this, menu_selector(HelloWorld::resumeGame)); startMenuItem->setPosition(ccp(0.0,40.0)); resumeMenuItem->setPosition(ccp(0.0,0.0)); pauseMenuItem->setPosition(ccp(0.0,0.0)); resumeMenuItem->setVisible(false); CCMenu* menu = CCMenu::create(startMenuItem, pauseMenuItem, resumeMenuItem); menu->setPosition( ccp(origin.x + visibleSize.width / 2,origin.y + visibleSize.height / 2)); this->addChild(menu, 1); // CCMenu *menu1 = CCMenu::create(startMenuItem, NULL); // CCMenu *menu2 = CCMenu::create(pauseMenuItem, NULL); // CCMenu *menu3 = CCMenu::create(resumeMenuItem, NULL); // menu1->setPosition( // ccp(origin.x + visibleSize.width / 2,origin.y + visibleSize.height / 2)); // this->addChild(menu1, 1); // menu2->setPosition( // ccp(origin.x + visibleSize.width / 2,origin.y + visibleSize.height / 2)); // this->addChild(menu2, 1); // menu3->setPosition( // ccp(origin.x + visibleSize.width / 2,origin.y + visibleSize.height / 2)); // this->addChild(menu3, 1); ccColor4B colorstart = randccColor4B(); ccColor4B colorend = randccColor4B(); CCLayerGradient*backGradient = CCLayerGradient::create(colorstart, colorend, ccp(50,100)); backGradient->changeWidth(visibleSize.width); backGradient->changeHeight(visibleSize.height); backGradient->setPosition(ccp(0,0)); this->addChild(backGradient, 0); return true; }注意到30-33行代码,如果这样写,那么在linux能够运行,而在Android 上面不能运行;
如果将30-33行的代码注释掉,并去掉35-46行的注释,那么在Linux 和Android 上面都能够运行了同时,如果将 35-37行代码改为:
CCMenu *menu1 = CCMenu::create(startMenuItem); CCMenu *menu2 = CCMenu::create(pauseMenuItem); CCMenu *menu3 = CCMenu::create(resumeMenuItem);那么在Linux上面会闪退,但是Android 上面能够正常运行
猜想:
出现此种情况,猜想可能是由于CCMenu::create()方法多参数的特殊性,Linux和Android的处理方式不一样。所以以后遇到这种类似的多参数方法一定要引起重视。
正确方式:
多个参数时需要在最后加上NULL表示结束,如:CCMenu *menu1 = CCMenu::create(startMenuItem, NULL);
CCMenu *menu = CCMenu::create(startMenuItem0, startMenuItem1,startMenuItem2, NULL);
相关文章推荐
- Ubuntu学习总结-08 Ubuntu运行Shell脚本报 shell /bin/bash^M: bad interpreter错误问题解决
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 部署错误: 启动 Tomcat 失败。-- '127.0.0.1' 不是内部或外部命令,也不是可运行的程序
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [7] APP 错误日志接口
- Python学习笔记——一些常用函数、常见错误总结
- Tensorflow学习笔记及错误总结 updating
- Ubuntu Cocos2dx 学习笔记——Cocos2dx设计模式
- Ubuntu学习笔记3-图书知识点总结
- yii2学习笔记,错误总结,持续更新
- ruby on rails学习笔记——Ubuntu下sudo apt-get update错误解决
- Ubuntu Cocos2dx 学习笔记——使用Git管理本地代码
- Ubuntu Cocos2dx 学习笔记0331——创建项目
- Ubuntu Cocos2dx 学习笔记——自定义动画
- Ubuntu Cocos2dx 学习笔记——纹理动画
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。
- Ubuntu14.04_ROS学习笔记(3)ROS官方初级教程遇到的错误
- asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误(WebClient学习笔记)
- Docker学习笔记 — Docker命令总结
- Ubuntu(16.04.2)学习笔记(一)如何解决dpkg: error processing install-info
- ubuntu学习笔记(3)之laravel结合supervisor
- 设计模式学习笔记(十五)——结构型模式总结