喵星战争(八):游戏主模块的实现-1

上面已经将各种需要的角色都创建了相应的类,这就相当于炒菜时准备好了“材料”,接着就需要将这些材料融合起来炒成一道美味“佳肴”。首先,我们在初始化函数init中创建并加入这些“材料”:

#include "GameScene.h"
#include "GameObjHero.h"
#include "GameHeroBullet.h"
#include "GameEnemyBullet.h"

using namespace cocos2d;

bool GameMain::init()
{
	if (!CCLayer::init())
	{
		return false;
	}

	CCSize size = CCDirector::sharedDirector()->getWinSize();

	//创建背景
	bg1 = CCSprite::create("bg.png");
	bg1->setScale(0.5);
	bg2 = CCSprite::create("bg.png");
	bg2->setScale(0.5);
	bg1->setAnchorPoint(ccp(0 ,0));
	bg2->setAnchorPoint(ccp(0 ,0));
	bg1->setPosition(ccp(0, 0));
	bg2->setPosition(ccp(0 ,size.height));
	this->addChild(bg1 ,0);
	this->addChild(bg2 ,0);

	//创建主角
	hero = new GameObjHero();
	hero->setPosition(ccp(size.width/2 , -50));
	hero->setScale(0.5);
	addChild(hero ,2 ,1);
	hero->runAction(CCMoveBy::create(0.5 ,ccp(0 ,150)));
	
	//创建敌人
	enemys = CCArray::createWithCapacity(3);
	for (int i = 0; i<3; i++)
	{
		int type = i + 1;
		GameObjEnemy* enemy = new GameObjEnemy();
		enemy->setPosition(ccp(size.width/4 * type , size.height +50));
		enemy->setScale(0.5);
		enemy->setType(type);
		enemys->addObject(enemy);
		addChild(enemy ,1);
		enemy->movestart();
	}
	enemys->retain();

	//创建血量UI
	blood = 3;
	CCSpriteBatchNode* ui = CCSpriteBatchNode::create("cat.png");
	blood1 = CCSprite::createWithTexture(ui->getTexture());
	blood1->setPosition(ccp(20, size.height - 20));
	blood1->setScale(0.2);
	ui->addChild(blood1);
	blood2 = CCSprite::createWithTexture(ui->getTexture());
	blood2->setPosition(ccp(50, size.height - 20));
	blood2->setScale(0.2);
	ui->addChild(blood2);
	blood3 = CCSprite::createWithTexture(ui->getTexture());
	blood3->setPosition(ccp(80, size.height - 20));
	blood3->setScale(0.2);
	ui->addChild(blood3);

	addChild(ui ,4);

	//初始化主角子弹
	bullets = CCArray::createWithCapacity(5);
	for (int i = 0; i<bullets->capacity(); i++)
	{
		GameHeroBullet *hbullet = new GameHeroBullet();
		hbullet->setIsNotVisable();
		hbullet->setScale(0.5);
		bullets->addObject(hbullet);
		this->addChild(hbullet ,3);
	}
	bullets->retain();

	//初始化敌人子弹
	enemybullets = CCArray::createWithCapacity(10);
	for (int i = 0; i<enemybullets->capacity(); i++)
	{
		GameEnemyBullet *ebullet = new GameEnemyBullet();
		ebullet->setIsNotVisable();
		ebullet->setScale(0.5);
		enemybullets->addObject(ebullet);
		this->addChild(ebullet , 3);
	}

	gamemark = new GameMark();
	addChild(gamemark ,4);
	enemybullets->retain();

	//初始化游戏结束画面及按钮
	gameover = CCSprite::create("gameover.png");
	gameover->setAnchorPoint(ccp(0.5 ,0.5));
	gameover->setPosition(ccp(0 ,0));
	gameover->setPosition(ccp(size.width/2 , size.height/2 + 70));
	gameover->setVisible(false);
	gameover->setScale(0.5);
	addChild(gameover ,5);
	CCMenuItemImage *pCloseItem = CCMenuItemImage::create("back.png" ,"back.png", this, menu_selector(GameMain::menuBackCallback));
	pCloseItem->setPosition(ccp(size.width/2 ,size.height/2 - 50));
	pCloseItem->setScale(0.5);
	CCMenu* pMenu = CCMenu::create(pCloseItem , NULL);
	pMenu->setPosition(CCPointZero);
	this->addChild(pMenu ,5 ,25);
	pMenu->setVisible(false);
	pMenu->setEnabled(false);
	isreduce = false;
	isover = false;
	scheduleUpdate();
	return true;
}

下面我们看看这些材料里都有那些精华:

1.addChild():

该函数有三种参数形式:

virtual void  addChild (CCNode *child)//增加节点

virtual void  addChild (CCNode *child, int zOrder) //通过顺序添加节点

virtual void  addChild (CCNode *child, int zOrder, int tag)//通过顺序和tag添加节点

其主要作用就是添加子成员,参数zOrder是指该成员的层级(也可以说深度),其值大的成员在在值小的成员上面,tag是指该成员的tag值,tag值就是一个成员的标识,如果丢掉了这个变量,可以通过getChildByTag(tag)把这个成员找到。

2.CCMoveBy::create() 第一个参数是时间,第二个参数是移动到的所在位置。

区别:

CCMoveBy是向量,相当于从当前点开始加上你的点的大小就是移动过后的位置;

CCMoveTo是终点值, 就是你那个点是哪就移动到哪,不管开始在哪。

3.CCSpriteBatchNode:批量渲染,一次渲染就把所有的CCSprite绘制出来,可以用来提高游戏的运行效率。

分享一个详细介绍的链接:http://www.cocos2dev.com/?p=331(有举例,很清楚)。

4.CCMenu(菜单层):

这是一个以CCMenu对象为集合类,CCMenuItem类实例组成个事各样按钮的菜单管理选择画面层。

CCMenu类提供的方法主要是用来按照横向、竖向或者多行排序展示CCMenuItem类实例的。为了实现不同的按钮效果,系统提供了多种类型的CCMenuItem,但每个按钮都有三种基本状态:正常、选中、禁用。CCMenuItem是基础类,不要直接使用该类。作为所有菜单项的父类,CCMenuItem主要完成以下两个任务:

1>设置按钮的状态。

2>负责处理回调函数(当按钮被单击后,需要调用的函数叫做回调函数)。

CCMenuItem三个子类:CCMenuItemImage:图片按钮菜单项,通过指定图片资源来创建菜单项;

                                            CCMenuItemLabel:文本菜按钮单项,通过指定文本标签( 实现CCLabelProtocol接口的类,如CCLabelTTF)来创建菜单项;

                                            CCMenuItemToggle :开关按钮菜单项,这种类型的按钮一次只有一个菜单项显示出来,当你单击它的时候,它就会切换到另外一个菜单项;

 

5.CCMenuItemImage是从CCMenuItemSprit派生而来,你只需要提供图片的名字,创建CCSprite对象的过程由框架自动完成。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值