前几天用cocos2d-x写了个贪食蛇!这次是全然在osx下开发的。基本的思路是这种我建立了一个Snake类,当中有两个构造函数一个是用于存放蛇身体sprite的图片和Snake的X坐标和Y坐标。另外一个是用于存放蛇头的sprite图片和Snake的X坐标和Y坐标dir方向,还有snake的生命。再在helloword类中建立一个容器 vector<Snake *> snake; 在helloword中的init中先建立蛇头和两节蛇身体而且添�到snake中

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();

];

;i<snake.size();i++)

{

Snake *snake_array;

snake_array = snake.at(i);

_a_2array[i][] = snake_array->_snake_x;

_a_2array[i][] = snake_array->_snake_y;

}

if(sn_head->life)

{

switch (sn_head->_snake_dir) {

:;

break;

:;

break;

:;

break;

:;

break;

}

sn_head->_snake_body_sprite->setPosition(Point(sn_head->_snake_x,sn_head->_snake_y));

){

; k <snake.size();k++){

Snake *snake_body;

snake_body = snake.at(k);

snake_body->][];

snake_body->][];

snake_body->_snake_body_sprite->setPosition(Point(snake_body->_snake_x,snake_body->_snake_y));

}

}

}

}


接下来就是当蛇头吃到东西之后身体变长:这个就是让蛇头和食物发生碰撞之后就在蛇尾部再生成一个对象而且把它添�到容器中。这里说一下我開始是用boundingbox可是那是依照边框进行碰撞检測的所以不准确。我前一个flappybird游戏就是由于这个原因导致有时候死亡有点奇怪。所以我自己写了碰撞检測方法事实上这个还简单我坦克大战游戏中写过但那是矩形之间的碰撞检測。这个是圆形之间的碰撞检測,也还是简单依据勾股定理也能非常快的写出来:

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上 可是没有做屏幕适配就发张图上来吧:

主要就是这些  还是依照惯例我会把程序上传到  CSDN上和百度网盘上 这次我以为还没有在MAC上打包 所以就会发源码出来了!游戏试玩的画我看有时间了再移植到 Windows 下和公布ios版的。这次和以往不一样仅仅有源码哦!

百度网盘下载地址: http://pan.baidu.com/s/1i3sVJvv


OS X下开发!ios系统贪食蛇!——from cocos2d-x 3.0的更多相关文章

  1. cocos2dx 在mac下开发ios和android游戏

    这里主要说android,因为ios开发在文章 http://blog.csdn.net/itcastcpp/article/details/24792323 中已经说过. 1)打开工程 打开ecli ...

  2. mac下开发IOS代码管理

    1.安装和配置subversion服务器 在windows 服务器上安装VisualSVN-Server,下载地址http://www.visualsvn.com/server/download/.采 ...

  3. H5微信页面开发 IOS系统 input输入框失去焦点,软键盘关闭后,被撑起的页面无法回退到原来正常的位置,导致弹框里的按钮响应区域错位

    H5微信页面开发,软键盘弹起后,若原输入框被遮挡,页面整体将会上移,然而当输入框失焦,软键盘收起后,页面未恢复,导致弹框里的按钮响应区域错位. 解决方案:给输入框(或select选择框)添加失去焦点的 ...

  4. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

  5. 在Visual Studio中使用MonoTouch开发iOS应用程序

    前段时间在工作机上装了Mac OS X,这主要是因为我最近需要开发iPhone应用程序.虽然Xcode,Objective C一定是开发iOS应用程序的主流,但是经过一番考虑,我还是决定尝试一下使用M ...

  6. Mac os 进行Android开发笔记(2)

    Mac OS X 下开发 Android  1> MAC OS Android环境搭建: 2>MAC OS  配置 Andoid ADB: 3>MAC OS 上进行Android真机 ...

  7. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  8. iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结

    今天  我对iOS系统下 的手机屏幕尺寸 分辨率 及系统版本做了一次系统总结 供大家参考. 首先 是系统:    随着iOS 系统不断升级,现在已经到iOS7.0了, 并且TA有了很多新变化,最震撼的 ...

  9. Mac OS X下环境搭建 Sublime Text 2 环境变量配置 开发工具配置Golang (Go语言)

    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装 ...

随机推荐

  1. matlab 之基础使用

    dir(xxx,'.jpg') :读取某文件所有jpg格式的图片,并获取图片属性信息 size(x,1) :获得x矩阵多少行 cell(): 申明数组 注释选定代码的快捷操作:Ctrl+R

  2. 跨站脚本攻击(Cross‐Site Scripting (XSS))实践

    作者发现博客园在首页显示摘要时未做html标签的过滤,致使摘要中的html代码可以被执行,从而可以注入任何想要被执行的js代码,作者利用这一缺陷在本文摘要中插入了一段js代码执行alert弹窗,同时增 ...

  3. 二叉树单色路径最长&&穿珠子

    对树的操作,特别理解递归的好处. //对于一棵由黑白点组成的二叉树,我们需要找到其中最长的单色简单路径,其中简单路径的定义是从树上的某点开始沿树边走不重复的点到树上的 //另一点结束而形成的路径,而路 ...

  4. [转]Centos配置国内yum源

    原文地址:http://blog.chinaunix.net/uid-23683795-id-3477603.html 网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常 ...

  5. AIR 3.0针对移动设备的高性能渲染方案

    转自:http://blog.domlib.com/articles/242.html 当我们一边正在等待Stage3D的发布时,很多开发者似乎还停留在这个印象中:即使AIR 3.0也无法在移动设备上 ...

  6. linux 从命令行自动识别文件并将其打开的命令

    若是shell是 zsh,则可: 使用 alias -s 定义后缀别名 (zsh) % alias -s pl=perl % script.pl perl script.pl % alias -s p ...

  7. MVC缓存的使用

    MVC3缓存之一:使用页面缓存 在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可. 我们建一个Demo来测试一下,在此Demo中,在View的Hom ...

  8. 使用Windows Azure创建和发布ASP.NET应用程序

    Windows Azure为我们提供了一个功能强大的PaaS平台,使得我们无须部署和维护基础架构就可以根据需求发布开发的应用程序,并且支持多种语言及平台,如:ASP.NET, PHP, Python, ...

  9. 野火STM32 Flash&sd卡模拟U盘

    在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 //mass_mal.c /* Includes ------------------ ...

  10. 埃氏筛法(快速筛选n以内素数的个数)

    给你一个数n,请问n以内有多少个素数?(n <= 10e7) 一般来说,要是对一个整数进行素数判断,首先想到的是写个函数判断是否为素数,然后调用这个函数,时间复杂度为O(n^(½)),但是要求n ...