第六节 实现蛇的运动
我们往GameLayer.h中添加
成员函数:
void MoveStep();
void MoveBody();
virtua void update(float dt);
我们先写MoveBody这个函数。
MoveBody这个函数的作用是移动蛇所有的身体节点。
他的原理就是将每个身体节点的位置设为前一个身体节点的位置,其中如果是第一个身体节点的话,就用蛇头的位置来设置身体节点的位置。
代码如下
void GameLayer::MoveBody(){
int n=body.size();
Point HeadPosition = head->getPosition();
Point a,temp;
for (int i = 0; i < n; i++) {
if(i==0){
a = body.at(i)->getPosition();
body.at(i)->setPosition(HeadPosition);
}
else {
temp = a;
a = body.at(i)->getPosition();
body.at(i)->setPosition(temp);
}
}
}
```
接着,实现MoveStep函数
代码如下
void GameLayer::MoveStep(){
movedflag = true;
Direction temp = head->getDirec();
Point po = head->Node::getPosition();
switch (temp) {
case up:
//log("upupup");
po.y += 20;
break;
case down:
po.y -= 20;
break;
case left:
po.x -= 20;
break;
case right:
po.x += 20;
break;
default:
break;
}
MoveBody();
head->setPosition(po);
}
```
函数中,我们先获得蛇头运动方向,然后根据蛇头运动的方向来设置蛇头接下来的位置。
接着将MoveStep加入到update函数中,并在init函数中添加下面这行代码
```
this->schedule(schedule_selector(GameLayer::update), 0.6);
```
好了,我们现在已经实现蛇的运动啦。
第六节结束


