现在的位置: 首页 > 综合 > 正文

Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》

2013年02月26日 ⁄ 综合 ⁄ 共 3408字 ⁄ 字号 评论关闭

懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 )

周末了,哲哲在旁边看《爸爸去哪》,骨头继续玩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

真机上新加的类一闪而过,于是仔细看了看,init里只有一个label,换成Sprite也不行,看来不是控件的问题。后来找到是init没有返回true。

错误越诡异,原因越低级。

而且骨头就喜欢遇到新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 + - 向前定位

好了,加个hero吧,网络素材,谢谢作者

加个帧动画

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游戏开发系列笔记13:一个横版拳击游戏Demo-中

Cocos2dx游戏开发系列笔记12:一个横版拳击游戏Demo-上

Cocos2dx游戏开发系列笔记11:解刨《战神传说》完结篇

Cocos2dx游戏开发系列笔记10:解刨《战神传说》

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+vs2012游戏开发环境搭建

-------------------- 飞船降落-------------------- 

最后,骨头介绍一下陪在身边的哲哲(右边就是低调的哲哲)

哲哲,小名 YIYI ,手工爱好者,文艺范,手艺人,《YiYiの妙舍》创始人,很有自己想法。

抱歉!评论已关闭.