cocos2d的框架思路
这是我第一次写cocos的框架思路哈,虽然只是写完了一个程序,按理来说应该再多写一些,多积累一些经验了再来写这个框架的构成,但是我觉得还是把我这次写代码的所有想法先记下来哈,等到以后继续写cocos的程序了,有更多收获了再来把这篇文章给完善了。
cocos2d虽然是个游戏引擎,但是实际上是任何的程序都可以使用的哈。因为cocos能兼容任何CocoaTouch为框架的iOS程序,所以cocos能够用在任何程序上。cocos的作用,在我现在的理解来说,就是显示一些图片,然后可以任意改变图片的属性,做成动画效果(当然这只是我这个菜鸟的理解,我也还没有看到后面的粒子效果等等,相信学完cocos的全部内容以后我会对cocos有个更加完善的了解)。cocos提供给我的这个功能就相当于提供给我了一个GUI制作器,让我能够自定义制作GUI,也不用限制于苹果官方给我们的GUI类库了(其实我只是因为当时学习CocoaTouch的时候不够顺利,所以转型写了cocos,当然如果真的熟练掌握CocoaTouch当然是最好不过的了)。
当前,我只写了一个打砖块的小游戏,并没有用cocos2d真正去开发一款软件,所以这里只是阐述游戏的cocos2d的框架思路。
正常的游戏思路应该如下
整个游戏就是一个接受用户的触摸点击,然后进行计算,再把计算的结果转化成显示的过程,其实这个跟所有的程序都是一样的。也就是说,整个游戏分为三个层:输入层,逻辑层和显示层。
先说输入层,在iOS的设备里面,输入层的所有事件总共有两种:通过加速器完成的手机用户操作手机动作的输入、通过触摸屏完成的用户触摸屏幕点的输入。这两个输入分别由两个cocos2d提供的自带方法完成。监测加速器的方法最后能返回手机偏移的距离和方向,监测触摸的方法最后能返回触摸的点的坐标,这两个参数都会传入逻辑层进行处理,至此输入层的任务就完成了。
然后是逻辑层。逻辑层就是一个计算当前状态的过程。总共有三个需要的参数:上一刻的状态,手机偏移的距离和方向,触摸点的坐标(当然大多数的情况下后面两个参数只会需要一个有意义的参数,当然也可以两个参数都为空)。逻辑层会根据这三个需要的参数,计算出这一刻的状态,然后把这一刻的状态传给显示层,并储存起来用于下一次的使用。
最后是显示层。显示层其实就是一个页面,要在页面上绘制的东西的属性由逻辑层给出的状态决定。
显示层是游戏的最独特的层,这也是游戏区别于其它应用程序的地方,所有的画面都会由程序自己来进行自定义绘制。而使用系统自带UI控件则没有这个烦恼,系统会自动绘制控件,只需要改变控件的属性。当然这也是游戏的好处,游戏也可以做应用,而且可以做出各种自定义的应用,不用局限于Apple官方给的东西。
理清楚主要的游戏思路以后,看一些最基本的东西:
cocos2d总共分成几个重要的模块:
CCDirector,可以理解成游戏的控制台,它拥有最高权限。
我们一般会用它来获取关于设备的各种信息,更改设备底层的参数,最最重要的是控制场景的更换
(这里的CCDirector相当于逻辑层的最高主管,虽然它有最高的权限,但是大部分的事情都不由它来做,它只是一个指挥的作用)
CCScene,可以理解成游戏的场景,或者游戏的关卡,只有CCDirector能够控制它。
如果把游戏开始界面,结束界面都想象成关卡的话,CCScene就可以理解成游戏关卡了。更深层次地说,CCScene更像是一个容器,它里面装着当前关卡所要显示的所有东西,包括怪物、地图、主人公等等,都放在CCScene里面。也只有放在这个里面才能正常显示这些东西。
(这里的CCScene就相当于刚才游戏思路里面的显示层,所有放在当前CCScene的东西都能被绘制,所以逻辑层所给出的状态,就是用于创建控件,或者改变在CCScene中所有控件的状态。)
CCLayer,可以理解成当前关卡游戏的某一层,属于CCScene控制。
可以这么想象,你在玩有摇杆的飞机大战,摇杆显示在最顶层,而且跟飞机都没有关系,所以摇杆是顶层,飞机是第二层,背景在最下面,而且跟飞机和摇杆都没有关系,所以背景在最后一层。这样可以理解层的概念了么。然后关于层跟CCScene的关系,其实层也是容器,刚才说的顶层里面装着摇杆,飞机层装着飞机子弹,底层装着地图,但是层把这些东西装进来以后,还是要把自己装到CCScene里面,这样才能够显示这些东西。
(这里的CCLayer可以理解为一个小型的显示层,几个小型的显示层拼凑成一个完整的CCScene)
CCSprite,最基础的类,里面放着一张图片(比如飞机),改变这个类实例的属性会改变图片的属性,放在CCLayer和CCScene里面。
虽然是这么说,但是并不仅仅是CCSprite一个,还有一些比如CCLabelTTF(显示文字),CCButton(显示按钮),CCMenu(显示菜单)等等,都是最基础的类,所有你能在屏幕看到的东西都是装到这些类里面的,然后不断修改它们就会产生动画效果和游戏效果。
(这里的CCSprite和其它的那些就相当于显示层上的控件,是由它们接受逻辑层的属性输入,改变了以后把自己放到显示层上)
cocos2d的框架思路的更多相关文章
- [转]Android应用程序框架思路整理
一.一般Android应用程序架构(Book,购彩,Market). 普通的应用程序由于只需要用到Android的联网与显示的功能,所以应用程序大体上是呈现为UI(Activities)与网络(Net ...
- 自己动手实现爬虫scrapy框架思路汇总
这里先简要温习下爬虫实际操作: cd ~/Desktop/spider scrapy startproject lastspider # 创建爬虫工程 cd lastspider/ # 进入工程 sc ...
- backbone框架思路
Backbone是MVC框架.如何使用这个框架来简化前端过程呢?作为一个初学者,虽然网上有它的官方文档,但是都是讲的一些方法,思路分析的却对初学者来说,看得晕乎乎的.现在就把自己对这个框架的理解记录在 ...
- 面向UI编程框架:ui.js框架思路详细设计
由于上一次的灵光一闪,萌生了对面向UI编程的思想实现.经过一段时间的考虑和设计,现在将思想和具体细节记录下来: 具体思路描述: 在UI.config文件中,配置所有参数,比如页面模板.所有组件.组件控 ...
- jQuery源代码框架思路
開始计划时间读源代码,第一节jQuery框架阅读思路整理 (function(){ jQuery = function(){}; jQuery一些变量和函数和给jQuery对象加入一些方法和属性 ex ...
- [JS思路]运动框架思路
匀速运动的思路一: 1.先清除动画,再加载动画 2.方向dir有正值和负值,可以通过 目标值 > 当前值 往右移动,即正数 目标值 < 当前值 往右移动,即负数 来进行判断:dir = ...
- WEB网页监控系统的设计框架思路具体解释
提示:也能够直接在LCD上显示摄像头数据.这个參考luvcview源代码.设计思路思将YUV或者MJPEG格式的数据转换成RGB格式的数据,然后实现图片的缩放,图像缩放算法:点击这里!,然后写到fra ...
- PAT 1034 有理数四则运算(20)(代码框架+思路+测试点错误分析)
1034 有理数四则运算(20)(20 分)提问 本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的 ...
- 基于python+selenium的框架思路(二)
一.如下是用例格式,第一个sheet为用例汇总,后面的sheet为具体的用例步骤 sheet:测试用例 sheet:搜索 sheet:刘江博客验证 二.读取该excel文件取出关键字等信息,作为关键字 ...
随机推荐
- JavaScript Comparison and Logical Operators
Ref:http://www.w3schools.com/js/js_comparisons.asp var r = 1; var result = r || 2; console.log(resul ...
- exp/imp 有很多弊端
弊端1. 空表 无法执行导出操作弊端2. 高版本的导出文件 无法使用 低版本的 oracle软件 导入 环境准备:create table test0707(n1 date); 认证弊端1 案例1. ...
- 对 Xcode 菜单选项的详细探索(转)
转自 http://www.cnblogs.com/dsxniubility/p/4983614.html 本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到 ...
- 华硕_ZX50JX4200 安装ssd固态盘
本人亲身的一次经历,帮朋友的华硕手提装一个内存和ssd固态 内存5分钟搞定,但是ssd固态盘就经过了一番的折腾 首先要拧掉所有后盖的螺丝,把光驱拆下来,注意撬开键盘板的时候有排线,不能弄断了.然后一定 ...
- 几种不同存储形式下的数据挖掘问题[ZZ]
从原理上说,数据挖掘应该可以应用到任何信息存储方式的知识挖掘中,但是挖掘的挑战性和技术会因为源数据的存储类型的不同而不同.特别是,近年来的研究表明数据挖掘所涉及的数据存储类型越来越丰富,除了一些有通用 ...
- ExtJs4 学习3 combox自动加载的例子
Ext.onReady(function() { delivery_datas = [{ "Id" : "1", "Name" : &q ...
- 『重构--改善既有代码的设计』读书笔记----Self Encapsulate Field
如果你直接访问一个字段,你就会和这个字段直接的耦合关系变得笨拙.也就是说当这个字段权限更改,或者名称更改之后你的客户端代码都需要做相应的改变,此时你可以为这个字段建立设值和取值函数并且只以这些函数来访 ...
- 微信开放平台获取component_verify_ticket
官方文档说明: 在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket.第三方平台方在收到ticket推送后也需进行 ...
- jQuery网页加载进度条插件
jquery.pace.js会自动监测你的Ajax请求,事件循环滞后,记录您的页面上准备状态和元素来决定的进度情况. 将pace.js和主题css的添加到您的网页! pace.js会自动监测你的Aja ...
- 使用jQuery动态加载js脚本文件的方法
动态加载Javascript是一项非常强大且有用的技术.这方面的主题在网上已经讨论了不少,我也经常会在一些个人项目上使用RequireJS和Dojo加载js 它们很强大,但有时候也会得不偿失.如果你使 ...