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);//将新的节点加入到蛇的身体中。 } }
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>