Snake *_head_1= new Snake(500.0, 300.0, 2,true);
this->addChild(_head_1->_snake_body_sprite,3);
_head_1->_snake_body_sprite->setRotation(-90);
snake.push_back(_head_1);
//設置蛇身體圖片 通過對象來創建
for(int a=1; a<3;a++)
{
Snake *sna2 =new Snake(500+a*20,300);
this->addChild(sna2->_snake_body_sprite,2);
snake.push_back(sna2);
}
並且在init中註冊觸屏事件。
接下來我把屏幕分爲了四塊 並且當點擊響應塊的時候讓蛇頭進行旋轉 改變dir的值 (其實是可以改爲用手勢的)
bool HelloWorld::onTouchBegan(Touch* touch,Event *event){
if(bar)
{
Point touchpoint = touch->getLocation(); //獲取點擊之後的點的座標
printf("touchpoint.x = %f, touchpoint.y =%f",touchpoint.x,touchpoint.y);
float touch_x =touchpoint.x;
float touch_y =touchpoint.y;
if(touch_x >= 0 && touch_x < 350){ //點擊了左側的區域 設置蛇頭方向爲2 上0 下1 左 2,右 3
if(sn_head->_snake_dir != 3){
switch (sn_head->_snake_dir) {
case 0:sn_head->_snake_body_sprite->setRotation(-90);break;
case 1:sn_head->_snake_body_sprite->setRotation(-90);break;
case 2:break;
case 3:break;
default:break;
}
sn_head->_snake_dir = 2; //左
}
}
else if (touch_x >= 350 && touch_x < 785 && touch_y< 320){
if(sn_head->_snake_dir != 0){
switch (sn_head->_snake_dir) {
case 0: break;
case 1: break;
case 2:sn_head->_snake_body_sprite->setRotation(180);break;
case 3:sn_head->_snake_body_sprite->setRotation(180);break;
default:break;
}
sn_head->_snake_dir = 1;
}
}
else if(touch_x >= 350 && touch_x < 785 && touch_y >=320){
if(sn_head->_snake_dir != 1){
switch (sn_head->_snake_dir) {
case 0: break;
case 1: break;
case 2:sn_head->_snake_body_sprite->setRotation(0); //sn_head->_snake_body_sprite->setPosition(Point(sn_head->_snake_x,sn_head->_snake_y+=20));break; //它是相對於原始圖片旋轉的不是旋轉過的圖片旋轉地
case 3:sn_head->_snake_body_sprite->setRotation(0);break;
default:break;
}
sn_head->_snake_dir = 0;
}
}
else if(touch_x >=785){
if(sn_head->_snake_dir != 2){
switch (sn_head->_snake_dir) {
case 0:sn_head->_snake_body_sprite->setRotation(90);break;
case 1:sn_head->_snake_body_sprite->setRotation(90);break;
case 2: break;
case 3: break;
default:break;
}
sn_head->_snake_dir =3;
}
}
}
}
讓蛇移動起來。 這裏用了一個二維數組用來存儲snake的所有座標信息。
然後當蛇頭移動以後。遍歷容器中的所有對象除了蛇頭,把二維數組中的x,y值賦給遍歷的對象的X,Y。
如圖 mac不知道繪圖工具在哪自己用PS隨便畫的:
void HelloWorld::body(float bo) {
int length_snake = (int)snake.size();
int _a_2array[length_snake][2];
for(int i=0;i<snake.size();i++)
{
Snake *snake_array;
snake_array = snake.at(i);
_a_2array[i][0] = snake_array->_snake_x;
_a_2array[i][1] = snake_array->_snake_y;
}
if(sn_head->life)
{
switch (sn_head->_snake_dir) {
case 0:sn_head->_snake_y+=22;
break;
case 1:sn_head->_snake_y-=22;
break;
case 2:sn_head->_snake_x-=22;
break;
case 3:sn_head->_snake_x+=22;
break;
}
sn_head->_snake_body_sprite->setPosition(Point(sn_head->_snake_x,sn_head->_snake_y));
if(length_snake >1){
for(int k =1; k <snake.size();k++){
Snake *snake_body;
snake_body = snake.at(k);
snake_body->_snake_x= _a_2array[k-1][0];
snake_body->_snake_y= _a_2array[k-1][1];
snake_body->_snake_body_sprite->setPosition(Point(snake_body->_snake_x,snake_body->_snake_y));
}
}
}
}
float HelloWorld::impact_round(float x1,float y1,float x2,float y2)
{
float xie = sqrt(pow(abs(x1-x2),2)+pow(abs(y1-y2),2));
return xie;
}
對了昨晚上把之前做過的flappybird移植到了IOS上 但是沒有做屏幕適配就發張圖上來吧: