码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2d-x 3.2 之 别踩白块(第一篇)

时间:2015-02-10 23:14:31      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:cocos2d-x 3.2   别踩白块   

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************



前言:

快过年了,事也不少,只能找一些简单的忙活下啦,

这游戏不知道还有没有人记得= =。



开发环境 —— VS2012 + cocos2d-x 3.2


正文:

闲话不多说,现在开始做我们的 别踩白块。

与之前的相比,这次的游戏会简单许多,

首先新建一个项目,然后修改它的 AppDelegate.cpp ,将显示尺寸设置一下。

后面在生成APK前,还要在android那设置,永远竖屏的属性。


本篇大纲

> Block类的创建

> 开始行 与 结束行 的创建

> 黑白块的创建



1.正式的第一步

就是这个游戏中比较重要的类出场了,块——Block

这个游戏里面的 Block 有很多,黑色的、白色的、黄色的等等,

统统封装在一个类里,就是——Block


建立这个类,并给它设定一个初始化函数,函数的传参要有 

—— 颜色

—— 大小

—— 块内内容

—— 内容字体大小

—— 内容字体颜色

在cpp 里实现它

// Block.cpp

bool Block::init( Color3B color , Size size , std::string label , float fontSize , Color4B textColor )
{
	// 先执行Sprite的初始化
	if( !Sprite::init() )	{
		return false;
	}

	//设置Block的内容大小
	setContentSize(size);
	//左下角对齐
	setAnchorPoint(Point::ZERO);
	//文字显示位置
	setTextureRect(Rect(0,0,size.width,size.height));
	//颜色
	setColor(color);
	//添加一个文本
	auto l = Label::create();
	l->setString(label);
	l->setSystemFontSize(fontSize);
	l->setTextColor(textColor);
	//添加到当前场景中
	addChild(l);
	l->setPosition(size.width/2,size.height/2);

	return true;
}


然后在Block类中,还要有一个 静态的创建函数 createBlock 、 一个 移除函数 removeBlcok 和 一个Vector用来放 block

下面是实现:

// Block.cpp

// 初始化Vector
Vector<Block*> * Block::blocks = new Vector<Block*>();
Block* Block::createBlock( Color3B color , Size size , std::string label , float fontSize , Color4B textColor )
{
	auto block = new Block();
	block -> init(color,size,label,fontSize,textColor);
	block -> autorelease();

	blocks -> pushBack(block);

	return block;
}

void Block::removeBlock() 
{
	removeFromParent();
	blocks->eraseObject(this);
}




2.开始行 与 结束行 的添加

开始行,就是游戏开始前 最下面那条黄色的东东

这里就不建立场景了,直接在HelloWorldScene中修改原有函数就行,

先把没用的该删除删除,

开始行的添加,我们通过一个函数实现—— addStartLine

// HelloWorldScene.cpp

void HelloWorld::addStartLine()
{
	//添加一个方块
	auto block = Block::createBlock(Color3B::YELLOW,Size(visibleSize.width,visibleSize.height/4),"",20,Color4B::BLACK);
	addChild(block);
}


在场景的 init函数中,调用这个 函数,然后运行一下,就可以看到开始行已经搞定啦~

技术分享


开始行添加完了,结束行就更简单了,

结束行就是 游戏结束的时候 ,整个界面都是绿色的,

同样方法—— 一个函数:addEndLine

// HelloWorldScene.cpp

// 添加结束行
void HelloWorld::addEndLine()
{
	auto block = Block::createBlock(Color3B::GREEN,visibleSize,"Game Over",32,Color4B::BLACK);
	addChild(block);
}


可以将 场景init函数中 addStartLine改成addEndLine,看一下效果,这里就不演示啦。




3.添加黑白块

这个和 添加 开始行、结束行差不多,但是比那个稍微麻烦了点。

首先,在Block类中添加一个变量 lineIndex,再添加与它相关的get和set函数

这个变量用处是 来知道该块放在哪一行,

比如开始行就应该放在第0行(在addStartLine相应位置修改一下)

结束行就该放在 第4行(同上,也在相应位置修改)


然后就是添加黑白块的函数了

// HelloWorldScene.cpp

// 添加黑白块
void HelloWorld::addNormalLine( int lineIndex )
{
	Block* block;
	//rand()是伪随机数
	int blackIndex = rand()%4;
	for (int i = 0; i < 4; i++)
	{
		block=Block::createBlock(blackIndex==i?Color3B::BLACK:Color3B::WHITE,
			Size(visibleSize.width/4-2,visibleSize.height/4-2),"",20,Color4B::BLACK);
		addChild(block);

		block->setPosition(i*visibleSize.width/4, lineIndex*visibleSize.height/4);
		block->setLineIndex(lineIndex);
	}
}


要知道,整个界面被分成四行(0、1、2、3) 和 四列,

这里随机数随机生成 0~3 ,每行中只有一个会和 i 相同,这个就是黑色块,其余的就是白色块,

在 >  blackIndex==i?Color3B::BLACK:Color3B::WHITE < 可知一二。


在场景的init函数中不再直接调用addstartLine,而是设置一个 startGame函数,调用它

// HelloWorldScene.cpp

void HelloWorld::startGame()
{
	addStartLine();

	addNormalLine(1);
	addNormalLine(2);
	addNormalLine(3);
}


然后,运行一下看看

技术分享


OK,基本工作搞定,下一篇,将会继续讲述 别踩白块的逻辑部分。



本篇源码 > 这里 <




***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************

cocos2d-x 3.2 之 别踩白块(第一篇)

标签:cocos2d-x 3.2   别踩白块   

原文地址:http://blog.csdn.net/lttree/article/details/43707419

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!