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文件取出关键字等信息,作为关键字 ...
随机推荐
- sql - 以半月,每月 分组
按半月:完整代码: SELECT siteNumber [站点], CONVERT(VARCHAR(7),day,120)+'-'+ case when day(day) between 1 and ...
- SQLite 入门教程(三)好多约束 Constraints
一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应该翻译成约束更贴切一点. 那么什么是约束呢? 我们在数据库中存储数据的 ...
- 用PHP实现一个高效安全的ftp服务器(一)
摘要: 本文主要阐述使用PHP的swoole扩展实现ftp服务器,同时扩展ftp服务器个性化功能和安全性.真正实现一个自己完全掌控的ftp服务器,可以个性化定制的ftp服务器. 正文: FTP服务器想 ...
- OC - 31.通过封装的自定义布局快速实现商品展示
概述 实现效果 设计思路 采用MVC架构,即模型—视图-控制器架构 使用MJExtension框架实现字典转模型 使用MJRefresh框架实现上拉和下拉刷新 上拉刷新,加载新的数据 下拉刷新,加载更 ...
- HDOJ 2037简单的贪心算法
代码: #include<iostream> using namespace std; int main() { int n,s,t1[100],t2[100],i,t,j; while( ...
- 【BZOJ3673】【可持久化并查集】可持久化并查集 by zky
Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n ...
- 【POJ2887】【块状链表】Big String
Description You are given a string and supposed to do some string manipulations. Input The first lin ...
- Windows2003 下 MySQL 数据库每天自动备份
1. 环境: windows server 2003 + Apache 2.0 + PHP5 + MySQL 4.0.26 . 2. 假设 PHP 安装目录为 D:/php ,MySQL 安装目录为 ...
- CentOS6.5升级为CentOS7.0
CentOS6.5升级为CentOS7.0 CentOS6.5升级为CentOS7 升级前: [root@localhost ~]# cat /proc/version Linux version ...
- JQuery 绑定回车事件 兼容ie8,ie9
$("#form-search").find('#search-query').bind('keypress', function(e) { var keycode; if(win ...