优德w88网 - 分享生活经验知识
你好!请登录

专注经验知识百科
解决现实中遇到的问题

登录

cocos2d入门教程优质

次浏览 | 2022-10-07 06:28:27 更新
来源 :互联网
最佳经验
本文由作者推荐

Cocos2d-x初学者教程

准备

  • 01

    Cocos2d-x是一款快速、强大、易用的开源2D游戏引擎。它与苹果的Sprit Kit略像,但又有一大优势——跨平台。这意味着,开发者只需要写一个版本的代码就可以开发出能在iOS、Android、Windows Phone、Mac OS X、Windows Desktop和Linux上运行的游戏来。这对于游戏开发者来说意义重大。在此教程中,你将学会用Cocos2d-x和C++开发一个简单的2D游戏。是的——忍者来袭!注意:本教程假设你拥有C++开发的基础先修知识。如果你没有接触过C++,请学习后再来阅读。

  • 02

    下载Cocos2d-x的最新版本(www.cocos2d-x.org/download);本教程使用3.5版本。把文件下载下来,放到你想把Cocos2d-x安装到的地方,例如你的主目录,然后解压。打开Terminal和CD,进入你刚刚解压的文件夹。例如,如果你把项目放到了你的主目录里,那就运行如下命令:cd ~/cocos2d-x-3.5/现在,运行接下来这个命令:python setup.py这里配置了必要的shell环境变量。若系统出现提示,要求配置像 NDK_ROOT, ANDROID_SDK_ROOT和ANT_ROOT这些Android特有的变量,你只需按三次回车完成设置就好了。注意:Cocos2d需要你在电脑上安装Python 2.7以上的版本。如果你不清楚目前电脑的Python版本,可以在命令行中输入python,则版本信息就会被显示出来(然后按Ctrl-D关闭)。如果你安装了一个老版本的Python,请在python.com下载安装最新版本。如下图所示,脚本文件提示执行另一条命令来完成安装:

  • 03

    注意:使用不同的shell可能会导致你看到不同的输出结果。在上面的屏幕截图中,由于我使用了Bash,安装文件提示“source /Users/rwenderlich/bash_profile.”。但如果我用的是Zsh,那它就会提示让我运行“source /Users/rwenderlich/.zshrc”。按照说明输入命令。这里有一个节省时间的技巧:你可以在/Users/your_user_name这里使用波浪线(~),以此来减少你输入下面这条命令的长度:source ~/.zshrc  (or source ~/.bash_profile)此命令重新提交了你的shell配置,让它可以访问新变量。现在你可以从任一目录在Terminal中调用cocos命令了。运行下面的命令,创建一个名为SimpleGame的C++游戏模板:cocos new -l cpp -d ~/Cocos2d-x-Tutorial SimpleGame你的主目录里创建了一个名为Cocos2d-x-Tutorial的目录。其中,子目录SimpleGame存放了你的项目文件。注意:可以输入cocos --help或cocos -h来获取cocos子命令的相关信息。输入后缀“--help”或“-h”,你可以了解到子命令的各种选项,例如你可以输入cocos new -h来查看new命令的选项。在Finder中双击~/Cocos2d-x-Tutorial/SimpleGame/proj.ios_mac/SimpleGame.xcodeproj,在Xcode中打开项目。进入Xcode之后,请确保SimpleGame Mac处于活跃状态,如图所示:

  • 04

    Cocos2d-x可以开发多种平台的游戏,但本教程将着重讲开发OS X应用。该项目可以很容易地向其他平台移植(是的,小事一桩!),本教程的最后部分将会简单讨论。在模板项目中编译并运行你的应用吧:

分辨率设定

  • 01

    Cocos2d-x游戏默认被命名为“MyGame”,分辨率为960x640,但这些细节设定都很容易更改。打开AppDelegate.cpp,在AppDelegate::applicationDidFinishLaunching中找到如下一行:glview = GLViewImpl::create("My Game");将其替换为下面的代码:glview = GLViewImpl::createWithRect("SimpleGame", Rect(0,0, 480, 320), 1.0);这样,游戏名称被改为“SimpleGame”,分辨率也被设置成了与模板背景相适配的480x320。重新编译并运行新版应用,它变得更小了:

  • 02

    注意一下你给createWithRect设定的第三个参数——1.0。这个参数将框架进行缩放,经常被用于测试比你的屏幕更大的分辨率。例如,想在一个小于1920x1080的屏幕上测试1920x1080分辨率的东西,你可以设定参数为0.5,以此将窗口缩小到960x540的大小。这样虽然改变了游戏在桌面设备上的框架大小,但它在iOS设备上就失效了;游戏的分辨率会自动适配iOS设备的屏幕大小。这里以iPhone6为例:

  • 03

    你该如何处理多个分辨率呢?在本教程中,你将会创建基于960x640分辨率的单个游戏资源,然后在实际运行中将其进行必要的缩放。要想实现这一点,你需要在AppDelegate::applicationDidFinishLaunching中,找到director上setDisplayStats的上一行,添加以下代码:

  • 04

    上面的代码的作用如下:定义了designSize——你创建游戏逻辑时使用的尺寸,并定义了resourceSize——你的资源所基于的分辨率。必要的时候,这些代码会让游戏的Director对资源进行缩放,缩放会基于游戏的设计和提供的资源尺寸进行

添加精灵

  • 01

    接下来,下载项目所需要的资源文件,并且将其解压到方便的位置。全选你刚刚解压的SimpleGameResources文件夹中的文件,在你的Xcode项目中将它们拖入Resources组中。当有对话框弹出的时候,一定要在点Finish之前检查Copy items if needed, SimpleGame iOS 和 SimpleGame Mac。

  • 02

    接下来,打开HelloWorldScene.h,在include cocos2d.h后面的地方添加以下代码:    using namespace cocos2d;这就指定了你会使用cocos2d这一命名空间(namespace);于是,你可以用Sprite来代替cocos2d::Sprite。倒也不是非这样不可,但这会让你的开发过程变得愉快一些。:]现在,你需要一个私有成员变量来指向你的player精灵。在HelloWorld的声明语句中添加以下代码:

  • 03

    然后,打开HelloWorldScene.cpp,将HelloWorld::init方法中的内容换成以下内容:

  • 04

    下面是本方法的详细说明:首先,调用父类的init方法。只有调用成功后你才能继续HelloWorldScene的安装。其次,使用游戏的Director singleton来获取窗口的边界。再次,创建DrawNode,绘制了一个填充屏幕的灰色矩形,并将其添加到场景中。这成为了游戏的背景。最后,通过图像名称创建player精灵。将它放置在屏幕左边界10%距离的地方,垂直居中,并将其添加到场景中。编译并运行游戏;哈哈,父老乡亲们快来看啊,小忍者进村了!:]

移动的怪物

  • 01

    忍者需要一个人生目标,所以得在场景里添加点怪物让他去打。为了让游戏更好玩,怪物最好能来回走动——否则就会看起来没啥挑战性。我们要在屏幕右侧很近的地方创建怪物,然后创建一个动作来让他们移动到左侧。首先,打开HelloWorldScene.h,并且添加如下的方法声明:

  • 02

    然后,在HelloWorldScene.cpp中添加如下的方法实现:

  • 03

    虽然相对而言比较直白,但下面还是讲一下这些代码的作用:本方法第一部分与之前对player做的相似:创建一个怪物的精灵,将其放置在紧靠屏幕右侧的地方。它的y轴坐标被设定为随机,这样才好玩。接下来设定怪物动作的时长,本方法在2秒和4秒之间计算出了一个随机值。每个怪物都要在屏幕上移动相同的距离,所以时长的随机性导致了怪物们速度的随机性。最后,本方法创建了一个让怪物从右到左横穿屏幕的动作,并且让怪物去执行这个动作。对此本文后面会有更详细的解释。Cocos2d-x提供了很多非常便捷的内置动作,它们可以帮助你随着时间轻松改变精灵的状态,包括移动动作、旋转动作、淡出动作、动画动作,等等。在此,你在怪物身上用到了3个动作:MoveTo:在一定的时间内将对象从一个点移动到另一个点。RemoveSelf:将一个节点从其父节点中移除,从而有效地将其从场景中“删除”。在本例中,当怪物变得不可见时,你使用此动作来把怪物从场景中移除。这非常重要,否则就会有无限多的怪物出现,最终耗尽设备的资源。Sequence:允许你按顺序实现一系列的其他动作,每次实现一个。这意味着,你可以让怪物移动穿过整个场景,到达特定的位置之后再将其从屏幕上移除。在你的忍者粉墨登场之前,还有最后一件事情——你需要实际地调用这个方法来创建怪物。为了让游戏更有趣,你需要不停地量产怪物。很简单,在HelloWorld::init末尾return之前的地方,添加如下代码:  srand((unsigned int)time(nullptr));  this->schedule(schedule_selector(HelloWorld::addMonster), 1.5);srand((unsigned int)time(nullptr));语句初始化了随机数生成器。如果不执行这一步,每次运行程序都会产生一样的随机数。这还叫什么随机啊对不对?:]之后,你向schedule方法传递HelloWorld::addMonster,每隔1.5秒它将调用一次addMonster()。这里,Cocos2dx使用了C++的指针来整合函数。如果你不太懂它的原理的话,请去ioscpp查阅更多信息。好了!编译并运行你的项目;现在你应该可以看到怪物们正在欢乐地(或者本例中它们看上去其实挺愤怒的!)在屏幕中来回移动了:

发射飞镖

  • 01

    勇敢的小忍者需要保护自己。在游戏中有很多种方式可以实现开火,但在本例中你将使用点击屏幕的方式,将飞镖朝玩家点击屏幕的所在的方向发射出去。biubiu!:]方便起见,你要用MoveTo动作来完成这个效果——现在我们不得不做点数学题了。MoveTo动作需要为飞镖设定一个目的地,但是你不能直接使用输入的地址,因为那个点只代表了发射时候相对于玩家的方向。你需要让飞镖一直沿着这个方向移动直到最终到达屏幕外的目的地。下图说明了这一情况:

  • 02

    从原始点到接触点的x坐标距离和y坐标距离组成了一个小三角形;你只需要按照同样的比率做一个大三角形——你还清楚自己希望一个端点是处于屏幕之外的。这些计算是以Cocos2d-x所包括的向量数学程序来执行的。但是,在你能够计算往何处移动之前,你需要启用输入事件操作来获取用户点击的位置。将以下代码添加至HelloWorld::init的末尾、return之前的地方:    auto eventListener = EventListenerTouchOneByOne::create();    eventListener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);    this->getEventDispatcher()-    >addEventListenerWithSceneGraphPriority(eventListener, _player);Cocos2d-x 3及以上版本使用EventDispatcher来处理各种各样的事件,如触摸、加速计和其他键盘事件。注意:整篇的讨论中,“touch”指的是触屏或者点击。Cocos2d-x对于这两种事件类型采取相同的方法。为了从EventDispatcher中获取事件,你需要注册一个EventListener。有两种触摸事件的监听器:EventListenerTouchOneByOne:此类型对每个触摸事件调用一次回调方法。EventListenerTouchAllAtOnce:此类型对所有的触摸事件调用一次回调方法。每个事件监听器支持4个回调,但你只需要为自己关心的事件绑定方法。onTouchBegan:手指第一次碰到屏幕时被调用。如果你使用的是EventListenerTouchOneByOne,你必须返回true才能获取另外3个触摸事件。onTouchMoved:手指接触屏幕并移动(保持接触)时被调用。onTouchEnded:手指离开屏幕时被调用。onTouchCancelled:在特定的结束事件处理的环境中被调用,如你正在触屏的时候,一个电话打了进来打断了这个app进程。在本游戏中,你只用关心触摸发生的时间就好了。声明你的回调函数来在HelloWorldScene.h中获取触摸的通知,像这样:bool onTouchBegan(Touch touch, Event unused_event);然后,在HelloWorldScene.cpp中执行你的回调函数:

  • 03

    上面的这个方法比较复杂,让我们来一步一步回顾一下。第一行被注释掉了,但它说明了作为第二个参数传递给addEventListenerWithSceneGraphPriority(eventListener, _player)的_player对象被访问的方式。此处获取了场景坐标系中触摸的坐标,然后计算了这个点相对于玩家当前位置的偏移量。这是Cocos2d-x中向量数学的一个例子。如果offset的x值是负值,这表明玩家正试图朝后射击。在本游戏中这是不允许的(真正的忍者不会往后看!),所以只需要返回就好了,不用发射飞镖。在玩家所在的位置创建一个飞镖,将其添加到场景中。之后,调用normalize()来将偏移量转化为单位向量,即长度为1的向量。将其乘以1000,你就获得了一个指向用户触屏方向的长度为1000的向量。为什么是1000呢?因为长度应当足以超过当前分辨率下屏幕的边界。:]将此向量添加到飞镖的位置上去,这样你就有了一个目标位置。最后,创建一个动作,将飞镖在2秒内移动到目标位置,然后将它从场景中移除。编译并运行程序;点击屏幕,让你的忍者朝着敌人们发射吧!

cocos2d入门教程 相关的文章

光影魔术手做一寸照片方法教程
比如遇到一些面试啊还有别的一些公司需要自己一些规整的彩色照片,但是自己又不会操作,一般都去照相馆找照相师傅进行制作,今天我就教大家用光影魔术手做一寸照片方法教程,以后自己也可以做彩色照片。打开自己下载到电脑上面的光影魔术手软件,然后进入软件主页面,在主页面点击浏览图片选项。
如何举报直播平台
End方法若是举报某一直播平台内的某位主播,那么直接在该主播所在直播间举报即可,以虎牙直播为例,点击界面上方。通过写邮件的方式对直播平台违法行为进行举报。
整蛊代码关不掉的弹窗
整蛊代码关不掉的弹窗新建一个txt文本文档,如图:把以下文字复制进去,如图:domsgbox("你要说的话")loop文件--另存为--保存路径为桌面--文件名为**.vbs然后就好啦,如图:点击打开就行了,如图:这个是无限弹窗的,怎么都关不掉的,要想关掉的话就按Ctrl+A
狱血魔神异界套
装备出处:巨剑,鹰犬Kboss图太刀,蠕动Kboss图巨棒,蠕动Kboss图戒指,商店出售项链,蠕动K图手镯,鹰犬Kboss图绑腿,商店出售护肩,蠕动K图短靴,蠕动K图属性如下:厄运之忆套,期套装中用的人数最多,血剑瞬间爆炸,厄运刷异界飞一般的感觉。
淘宝图片尺寸怎么改 多大合适
淘宝网卖家在为宝贝上传图片时经常会发现上传宝贝图片后刷新页面,图片过大导致只显示图片一部分,影响宝贝页面的美观度和整体性。当然像素也可以自己去自定义为其他数值,多次尝试后可找到适合自己的像素数值End
怎麽安装水星无线网卡驱动
如果我们没拉网线或是拉了却想用手机连上电脑的网络怎么办。废话就不说了,接下来分享一个水星无线网卡的驱动安装小方法。,首先在网上下载一个水星无线网卡的驱动或是拿你的配带的光盘也行。,下面,电脑可能会弹出有风险什么的直接点击继续安装就可以了。
qq家园电脑登陆|3gqq家园电脑登陆
gqq家园电脑登陆是指以www的形式登入wap。下面为大家介绍如何gqq家园电脑登陆。gqq家园电脑登陆:搜狗搜索gqq家园电脑登陆随便选取一个,这里选择第二个做示范进入网址后可直接输入gqq家园地址(如图)点击开始访问点击家园如此,已经进入到gqq家园另外firefox或者opera浏览器都可以直接浏览手机网页End
如何通过百度地图查找附近的酒店
在人生地不熟的情况下,我们可以借助地图来查找附近的酒店。当使用的手机对百度地图软件进行定位后,系统就会根据我们当前所在的位置列车附件的酒店了。之后在百度地图页面就会出现附近的酒店列表了,在列表中我们还能看到酒店的评分以及预订的金额。
淘宝商家如何设置全自动机器人回复买家
那我们如何来设置全自动机器人来充当店铺客服呢,请看下文详情首先需要打开桌面上的千牛app,进入千牛后。进入客户服务后,点击千牛店小蜜入口,如下图红标位置所示。点击后找到千牛店小蜜的全自动机器人。第一次开通需要到旺旺分流下的服务助手页变更店小蜜接待状态即可。
如何注册盛大通行证
盛大通行证是所有盛大用户登录的统一身份验证帐号。申请“盛大通行证”,就可以在任何标志有盛大通行证支持的应用中,直接使用该帐号登录游戏。下面说下,如何注册盛大通行证。首先,通过浏览器,打开盛大通行证官网。之后,进入到盛大通行证注册页面(如下图),默认是通过手机号码注册。
怎么关闭优酷自动扣费,如何关闭优酷包月服务
然后自动帮您提供了续费导致的扣费登录优酷账号中心,找到咗嚛个人中心。
怎么转换图片大小
宽度修改为像素约束比例,最后点击确定我们明显看到PS中图片变小,查看实际修改是否正确,图像-图像大小,就是我们想要的结果,你根据自己实际需求进行修改,放大也是同样原理End方法二下面演示美图秀秀,许多人不太会用PS,那么熟悉美图秀秀的你也可以实现以上的效果。
关于我们 | 版权声明 | 免责声明 | 联系我们
免责声明:优德w88所有文字、图片等资料均来自互联网,不代表本站赞同其观点,内容仅代表作者本人意见,若因此产生任何纠纷作者本人负责,本站亦不为其版权负责! 如有问题,请联系我们
CopyRight©1999-2022 www.4rboy.com All Right Reserved