Hi,好久不见,在最近的一周里面,自己在着手写一个之前很火的小游戏 围住神经猫,当然首先还是先去网上看了一下关于怎样制作这个小游戏的教程,在cocos开发者平台上找到了类神经猫三消游戏《Rabbit Escape》教程,是基于Cocos Studio ui编辑器和vs配合使用制作出来的《围住乖乖兔》游戏。
今天在这里我主要想在这里分享的是游戏里面的核心算法和实现方法,并非前面基础的通过cocosstudio UI编辑器搭建游戏主界面,在作者的基础上对其算法进行了一定程度的改动和优化,希望能给大家的学习带来一定的帮助,关于前面的cocosstudio搭建游戏主界面的教程,我把大神的链接发在下面,大家可以照着做,地址如下:http://www.cocos.com/doc/tutorial/show?id=2417。
好啦,不多说了,现在我们继续我们的游戏开发吧,在cocosstudio里面搭建好了我们的游戏主场景,如下图:
之前的步骤详情请见上面大神的链接,从这里开始我们需要将ui编辑器生成的csb文件加载到vs工程里面,开始游戏的逻辑代码实现,既然将游戏主界面加载进来了,现在我们需要做的是获得csb文件里面的场景节点,然后遍历场景节点的所有子节点,当遍历到的子节点的名字是兔子图片的名字的时候,将其赋值给之前定义的全局兔子节点,否则另外的节点Tag值小于80时候,将其赋值给障碍容器里面。
auto rootNode = CSLoader::createNode("MainScene.csb");
addChild(rootNode);
// 获得页面下面的背景层
sprite = rootNode->getChildByName("Sprite_bg");
// 遍历背景层下面的元素,分别得到兔子和石头节点
for (auto it = sprite->getChildren().begin; it != sprite->getChildren().end();it++)
{
if ((*it)->getName() == "Sprite_bg")
{
role = (*it);
}
else
{
if ((*it)->getTag() <= 80)
{
vec_stones.pushBack((*it));
}
}
}
现在,将节点添加到全局变量和容器之后,我们需要做的就是,写一个通过触摸添加一个障碍物的方法,申明一个监听器的方法我在这里就不做具体的讲解了,增加一个回掉方法,将障碍物容器里面的障碍物依次遍历是否与点击的点进行碰撞,如果是的话,我们将其设为可见状态。
bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event)
{
for (int i = 0; i < vec_stones.size(); i++)
{
auto stone = vec_stones.at(i);
if (stone->boundingBox().containsPoint(touch->getLocation()))
{
stone->setVisible(true);
m_ctrl->addStone(stone->getTag());
}
}
讲到这里,不知道有木有人已经很困了呢,好戏才刚刚开始呢,下面我们将具体介绍游戏的更深层次逻辑层,之前我们已经可以将UI响应用户的交互操作了(添加石头),但是这都只是在UI界面上的一些操作,在helloworld文件中间我们需要创建一个逻辑层,创建GameCt