——蛇头的移动
蛇和它的食物已经出现在它的“地盘”之中,但是它无法移动,只能眼睁睁的看着食物却无可奈何。
所以我们现在的任务呢就是帮助蛇吃到食物 ,也就是让蛇动起来
首先,我们在GameScene中定义一个移动的方法,在这之前,需要先定义一个枚举来控制蛇的方向
enum DIR
{
UP,
DOWN,
LEFT,
RIGHT
};
在初始化蛇头时让它的方向朝上head->dir = UP;
之后我们实现蛇头移动的方法
void Game::logic(float t)
{
//move head
switch(head->dir)
{
case UP:
head->row++;
break;
case DOWN:
head->row--;
break;
case LEFT:
head->col--;
break;
case RIGHT:
head->col++;
break;
}
head->setPosition(Vec2(head->col*GAME_TILED_WIDTH , head->row*GAME_TILED_HEIGHT));
}
OK,我们已经成功了一半,还需要把logic加入到schedule中,让蛇自己动起来
this->schedule(schedule_selector(Game::logic) , 0.5);
。。。。
大家是不是觉得还少了一点什么呢,是的,现在的蛇只能往上走,走着走着就不见了。。所以现在最后一步就是用户交互,也就是进行触摸处理。通过触摸屏幕来改变蛇的方向,让蛇不会走着走着就不见了
在GameScene.h中添加一个ontouchBegan方法
bool onTouchBegan(Touch *t , Event *e); //change dir
在GameScene.cpp中实现它
bool Game::onTouchBegan(Touch *t, Event *e)
{
int mx = abs((t->getLocation().x -2) - head->col*76);
int my = abs((t->getLocation().y -300) - head->row*76);
if(mx > my)
{
if(t->getLocation().x-2 > head->col*76 ) //向右
{
head->dir = RIGHT;
}
else //向左
{
head->dir = LEFT;
}
}
else
{
if(t->getLocation().y-300 > head->row*76 ) //向上
{
head->dir = UP;
}
else //向下
{
head->dir = DOWN;
}
}
return true;
}
通过获得点击屏幕的座标和当前蛇头的座标来改变蛇的方向
。
。
。
这样成功的让蛇移动起来了,当然蛇还是不能吃掉它的食物,O(∩_∩)O哈哈!
未完待续….
——————9秒学院学习日志