Cocos2dx 3.0 过渡篇(二十四)死不了的贪食蛇(重力版)(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:36 点击:次
2、帮助界面其实就一menu,所以我就不啰嗦介绍了,直接看下游戏界面的代码实现:
1)首先在onEnter()中打开重力感应
1)首先在onEnter()中打开重力感应
void GameLayer::onEnter()
{
Layer::onEnter();
CCLOG("GameLayer onEnter");
Device::setAccelerometerEnabled(true);//打开设备的重力感应
auto listener = EventListenerAcceleration::create(CC_CALLBACK_2(HelloWorld::onAcceleration, this));//创建一个重力监听事件
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//将listener放到事件委托中
}2)在init()中初始化蛇头和食物的坐标,并开启定时器实时更新蛇的坐标bool GameLayer::init()
{
if ( !Layer::init() )
{
return false;
}
auto labhelp = LabelTTF::create("this is game","宋体",15);
labhelp->setPosition(Point(0,340));
this->addChild(labhelp);
auto labback = LabelTTF::create("MainMenu","宋体",15);
auto miback = MenuItemLabel::create(labback,[](Ref* sender)
{
Director::getInstance()->replaceScene(HelloWorld::createScene());
});
miback->setPosition(Point(360,200));
//chead=::CCTextureCache::sharedTextureCache()->addImage("head.png");
//初始化蛇头坐标和食物的坐标,用下面这种方法随机出来的坐标每次运行时都是一样一样的......
sHead = new SnakeNode();
sHead->row = rand()%10;
sHead->col = rand()%10;
//初始化食物的坐标
sFood = new SnakeNode();
sFood->row = rand()%10;
sFood->col = rand()%10;
//执行定时任务
this->schedule(schedule_selector(GameLayer::logic01),0.5);
return true;
}//定时器
void GameLayer::logic01(float t)
{
//移动蛇的身体
for(int i = allBody.size()-1; i>=0; i--)
{
SnakeNode * sn = (SnakeNode *)allBody.at(i);//获取蛇身体上的某个节点
if(i>0)
{
//如果该节点不是第一个节点,那么该节点的下一个坐标就是其前一个点的坐标(这里不用多解释,玩过蛇的都懂)
SnakeNode * snpre = (SnakeNode *)allBody.at(i-1);//获取前一个节点,把前一个节点的方向,坐标传给当前节点
sn->dir = snpre->dir;
sn->row = snpre->row;
sn->col = snpre->col;
}
else if(i==0)
{
//如果i=0则是第一个节点,蛇头的坐标便是该节点的坐标
sn->dir = sHead->dir;
sn->row = sHead->row;
sn->col = sHead->col;
}
}
//移动蛇头,根据dir来判断蛇头的移动方向
switch(sHead->dir)
{
case DIR_DEF::UP:
sHead->row++;//上移
if(sHead->row >= 10)
{
sHead->row=0;//超过顶部边界后便从底部出来
}
break;
case DIR_DEF::DOWN:
sHead->row--;
if(sHead->row < 0)
{
sHead->row=9;
}
break;
case DIR_DEF::LEFT:
sHead->col--;
if(sHead->col < 0)
{
sHead->col=9;
}
break;
case DIR_DEF::RIGHT:
sHead->col++;
if(sHead->col >= 10)
{
sHead->col=0;
}
break;
};
//碰撞检测
//如果蛇头的横、列位置一样,说明蛇吃到了这个食物
if(sHead->row == sFood->row && sHead->col == sFood->col)
{
//食物从当前位置消失,随机出现在下一个坐标
sFood->row = rand()%10;
sFood->col = rand()%10;
//添加身体到集合
SnakeNode * sn = new SnakeNode();//创建一个新的节点(也就是吃掉的那个食物),将其放到蛇的尾巴上
SnakeNode * lastNode = NULL;
//获取蛇的最后一个节点,如果allBody的size()为0,则说明蛇是第一次捕食,那么它的最后一个节点也就是蛇头啦。
if(allBody.size()>0)
lastNode = (SnakeNode *)allBody.back();
else
lastNode = sHead;//最后一个节点是蛇头
//通过最后一个节点的方向来个新的节点初始化横、列坐标
switch(lastNode->dir)
{
case DIR_DEF::UP:
sn->row = lastNode->row-1;
sn->col = lastNode->col;
break;
case DIR_DEF::DOWN:
sn->row = lastNode->row+1;
sn->col = lastNode->col;
break;
case DIR_DEF::LEFT:
sn->row = lastNode->row;
sn->col = lastNode->col+1;
break;
case DIR_DEF::RIGHT:
sn->row=lastNode->row;
sn->col=lastNode->col-1;
break;
}
this->allBody.pushBack(sn);//将新的节点加入到蛇的身体中。
}
}
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 进入详细评论页>>

![cocos2d_x+lua[2]](/uploads/allimg/131030/110J64609-0-lp.jpg)








