周末了,哲哲在旁边看《爸爸去哪》,骨头继续玩cocos2dx,
首先,如果你新加了CPP和H文件,记得修改项目目录下的proj.android\jni文件夹的Android.mk文件。
- LOCAL_SRC_FILES := hellocpp/main.cpp \
- ../../Classes/AppDelegate.cpp \
- ../../Classes/HelloWorldScene.cpp \
- ../../Classes/Welcome.cpp \
- ../../Classes/About.cpp
VS2012里一直跑的OK,可放在android真机上运行就报错了。
11-22 21:44:53.391: E/cocos2d-x assert(4257): D:\Java\cocos2d-x-2.2/cocos2dx/base_nodes/CCNode.cpp function:addChild line:627
- <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">真机上新加的类一闪而过,于是仔细看了看,init里只有一个label,换成Sprite也不行,看来不是控件的问题。后来找到是</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">init没有返回true。</span>
错误越诡异,原因越低级。
而且骨头就喜欢遇到新bug,经验花花的张。
(Pad里,爸爸们跟孩子们在钓鱼,骨头最喜欢钓鱼了。。。)
又来一个bug!控件不能重复添加
- Assert failed: child already added. It can't be added again
好的下面添加个背景图:
- // 背景
- CCSprite *bg=CCSprite::create("game_bg.jpg");
- //bg->setPosition(ccp(0,0));//setAnchorPoint是以左下角贴图,SetPosition是以中心点贴图
- bg->setAnchorPoint(ccp(0,0));
- this->addChild(bg);
顺便列点相当常用的快捷键:(尤其是删除行,提示,注释)
- Ctrl+Shift+L: 删除当前行
- Ctrl+Shift+U: 全部变为大写
- Ctrl+U: 全部变为小写
- Ctrl+K,I: 快速信息
- Ctrl+K,C: 注释选定内容
- Ctrl+K,U: 取消选定注释内容
- F12: 转到所调用过程或变量的定义
- CTRL + - 向后定位
- CTRL + SHIFT + - 向前定位
加个帧动画
- void About::addHero()
- {
- CCSprite *hero=CCSprite::create("hero/20005_待机_1.png");
- hero->setPosition(ccp(100,100));
- this->addChild(hero);
- CCAnimation *animation = CCAnimation::create();
- //从本地文件系统中加载图片文件到CCSpriteFrame中区,然后添加到CCAnimation中
- for (int i = 1; i <= 7; i+=2)
- {
- char szImageFileName[128] = {0};
- sprintf(szImageFileName, "hero/20005_待机_%d.png", i);
- animation->addSpriteFrameWithFileName(szImageFileName);
- }
- animation->setDelayPerUnit(0.5f / 4.0f);
- animation->setLoops(-1);
- CCAnimate *action = CCAnimate::create(animation);
- hero->runAction(action); // 运行精灵对象
- }
然后添加三个按钮,来测试CCSprite也就是主角的各种动作
- void About::addBtn()
- {
- CCSize vSize=CCDirector::sharedDirector()->getVisibleSize();
- CCPoint origin=CCDirector::sharedDirector()->getVisibleOrigin();
- // add some btns
- CCMenuItemImage *btn1 = CCMenuItemImage::create("about/clickme.png","about/clickme-down.png",this,menu_selector(About::clickCallBack1));
- CCMenuItemImage *btn2 = CCMenuItemImage::create("about/clickme.png","about/clickme-down.png",this,menu_selector(About::clickCallBack2));
- CCMenuItemImage *btn3 = CCMenuItemImage::create("about/clickme.png","about/clickme-down.png",this,menu_selector(About::clickCallBack3));
- btn1->setPosition(ccp(vSize.width-btn1->getContentSize().width/2,btn1->getContentSize().height));
- btn2->setPosition(ccp(vSize.width-btn1->getContentSize().width/2,btn1->getContentSize().height*2));
- btn3->setPosition(ccp(vSize.width-btn1->getContentSize().width/2,btn1->getContentSize().height*3));
- btn1->setScale(0.5);
- btn2->setScale(0.5);
- btn3->setScale(0.5);
- CCMenu *menu=CCMenu::create(btn1,btn2,btn3,NULL);
- menu->setPosition(CCPointZero);
- this->addChild(menu);
- }
点击按钮播放动画时报错,原因未知T.T
还有,如果在h文件里定义CCSprite,记得加上USING_NS_CC;
动作测试ok之后,发射时主角播放动画,并且怪物换了个图,子弹还是散弹:好幼稚哈哈,待骨头慢慢学来。。。
也就这样了,最多改个背景图,给主角加个血槽,让怪物通过帧动画飞过来,这些效果都是雷同的。
ok,结束,骨头打算找个不错的例子分析下。
------------------- 飞船起飞--------------------
Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应
Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的
Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)
Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上
Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》
Cocos2dx游戏开发系列笔记4:怎样新加一个Scene类?
Cocos2dx游戏开发系列笔记3:牛刀小试->忍者飞镖射幽灵的Demo
Cocos2dx游戏开发系列笔记2:一个刚创建的cocos2dx中的demo里都有什么
Cocos2dx游戏开发系列笔记1:一个崭新的开始,cocos2dx2.2+ndkr9+Cygwin
-------------------- 飞船降落--------------------
最后,骨头介绍一下陪在身边的哲哲(右边就是低调的哲哲)
哲哲,小名 YIYI ,手工爱好者,文艺范,手艺人,《YiYiの妙舍》创始人,很有自己想法。
来源:oschina
链接:https://my.oschina.net/u/35376/blog/182671