ios游戏开发--cocos2d学习(2)
- 单例:cocos2d很好的利用了单例设计模式,单例是在程序生命周期里只被实例化过一次的类,为了确保这一点,我们利用类的一个静态方法来生成和访问对象,就是我们已经见过的的以“shared”开头的方法,而不是用 alloc/init初始化方法。如OC中的UIApplication对象,我们只能通过sharedApplication来共享这个对象,而不是创建它,它是一个单例对象,只有一个,管理全局程序。cocos2d中有一些常用到的cocos2d 单例类,最常用的就是CCDirector(导演类):CCDirector* sharedDirector = [CCDirector sharedDirector];
- 场景图:

- CCNode:一个最重要的类。
所有节点都有一个共同的父类:CCNode。它定义了所有节点都通用的属性和方法。

以下是一些处理子节点
的方法:
生成一个新的节点 :
CCNode* childNode = [CCNode node];
将新节点添加为子节点:
//新节点作为一个已有节点的子节点(如之前的武器节点附加在玩家节点上)
[myNode addChild:childNode z:0
tag:123];//z决定了节点的绘制顺序;tag标记该节点获取子节点://"getChildByTag:"
CCNode* retrievedNode = [myNode
getChildByTag:123];通过tag删除子节点;cleanup会停止任何运行中的动作: [myNode removeChildByTag:123 cleanup:YES];
通过节点指针删除节点:
[myNode removeChild:retrievedNode];
删除一个节点的所有子节点:
[myNode removeAllChildrenWithCleanup:YES];从myNode的父节点删除myNode:
[myNode removeFromParentAndCleanup:YES];
- 动作(Actions):贯穿整个游戏的核心
节点都可以运行动作。我们会不断的接触到一个又一个动作,它总是带来新的视觉体验,丰富我们的游戏,让它看起来更完美。首先要了解一些基本的动作:移动、旋转和缩放:
//闪烁动作
CCAction* action =
[CCBlink actionWithDuration:10
blinks:20];action.tag = 234;
//旋转动作
CCRotateBy *rotateBy=[CCRotateBy actionWithDuration:20
angle:360];//移动动作
CCMoveTo *moveTo=[CCMoveTo actionWithDuration:3
position:CGPoint(200,300)];//除了动作本身,还可以给动作添加效果,如:逐渐加速、无限重复
1、重复-CCRepeatForever
*repeat=[CCRepeatForever actionWithAction:myAction];2、逐渐加速-CCEaseInOut
*ease=[CCEaseInOut actionWithAction:myAction];//也可以对某个节点施加一系列动作,使用动作序列让其按顺序执行
CCSequence *sequence=[CCSequence
actions:action1,action2,action3,nil];CCRepeatForever
*repeat=[CCRepeatForever actionWithAction:sequence];运行这个动作: [myNode runAction:action];
动作也可定义标记tag,然后用tag获取:
CCAction* retrievedAction =
[myNode getActionByTag:234];你可以用tag或动作指针停止相关联的动作:
[myNode stopActionByTag:234];[myNode
stopAction:action];
你可以停止所有在此节点上运行的动作: [myNode stopAllActions];
- 预定信息:类似于OC中的时间片,每隔一段时间就会调用一次方法,只不过开启时间片是在预定里:(个人理解......)
-(void)scheduleUpdates
{
[self schedule:@selector(myMethods)
interval:0.1f];//interval:时间间隔(秒)
}
使用selector时,最好开启报警设置Build->Undeclared
Selector打钩,保证方法选择正确。
停止某个指定的选择器[self unschedule:@selector(method)];
- 场景CCScene
它一般都是在CCLayer对象里
通过+(id)scene这个静态方法来创建的。
+(id) scene
{
CCScene *scene = [CCScene node];
CCLayer* layer = [HelloWorld node];
[scene addChild:layer];
return scene;
}
1)
第一个创建场景的地方是在AppDelegate中directorDidReshapeProjection中:[[CCDirector sharedDirector] runWithScene:[HelloWorld scene]];
2)在其它情况下,用replaceScene方法来替换已有的场景:
[[CCDirector sharedDirector] replaceScene:[HelloWorld scene]]; 3)还有另外两个方法:pushScene(推进场景)和popScene(弹出场景) 但是最好是对“一个”常用的场景采用这种方式,否则如果多个场景都这样推进弹出,最后可能忘记哪个推进了哪个弹出了,导致内存使用浪费。
- 过渡效果CCTransitionScene :尽量不用,因为玩家不喜欢,耽误时间
简单介绍一下。所有过渡效果的类都继承自CCTransitionScene。
过渡效果只给场景转换代码 增加了一行代码而已。如:
CCFadeTransition *tran=[CCFadeTransition transitionWithDuration:1 scene:[myScene scene withColor:ccWHITE];//白色渐隐到myScene场景
别忘记了改变之前要转到myScene的原场景,这时要
[[CCDirector sharedDirector] replaceScene:tran];
ios游戏开发--cocos2d学习(2)的更多相关文章
- ios游戏开发--cocos2d学习(1)
学习cocos2d需要一定的编程基础,最好了解objective-c的语法.至于下载和安装的过程网上有很多,这里不多介绍,直接进入项目的学习. 创建一个cocos2d项目,直接运行,效果如图: 左下角 ...
- ios游戏开发--cocos2d学习(3)
------------继续上一节的内容. “接收触摸事件”: CCLayer类是用来接收触摸输入的.不过你要首先启用这个功能才可以使用它. self.isTouchEnabled = YES;//此 ...
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...
- ios游戏开发 Sprite Kit教程:初学者 1
注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...
- CocosCreator游戏开发---菜鸟学习之路(一)
PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...
- cocos2d-x ios游戏开发初认识(六) 渲染的优化
做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染 ...
- 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C
blog.csdn.net/totogo2010/article/details/8205810 目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...
- cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储
我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...
- cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測
玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...
随机推荐
- 【PHPsocket编程专题(实战篇③)】构建基于socket的HTTP请求类
该代码是两年前写的,现在看起来有点渣了,仅仅是提供一个思路,现在做一些Api开发的时候官方会有一些SDK,这些SDK其实原理都是通过socket来通讯的,其实我个人主张用curl更方便,当然前提是你的 ...
- Linux 线程模型的比较:LinuxThreads 和 NPTL
Linux 线程模型的比较:LinuxThreads 和 NPTL GNU_LIBPTHREAD_VERSION 宏 大部分现代 Linux 发行版都预装了 LinuxThreads 和 NPTL,因 ...
- C# 时间函数
DateTime dt = DateTime.Now; string str = dt.ToString("yyyy-MM-dd");//2013-09-07 str = dt.T ...
- 使用phantomjs实现highcharts等报表通过邮件发送
使用phantomjs实现highcharts等报表通过邮件发送(本文仅提供完整解决方案和实现思路,完全照搬不去整理代码无法马上得到效果) 前不久项目组需要将测试相关的质量数据通过每日自动生成报表 ...
- java抓取动态生成的网页
最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架 ...
- 奇怪的transform bug
对一个元素使用transform:rotate 进行旋转,造成: 父元素的背景图位置偏移,往下降,背景图也会变模糊一些 造成重绘,导致该元素后面的兄弟元素受到影响,变得模糊,并且无法遮盖住父元素的背景 ...
- UVa 1473 - Dome of Circus 三分
把所有的点都映射到XOZ这个平面的第一象限内,则这个三维问题可以转化二维问题: 求一条直线,使所有点在这条直线的下方,直线与X轴和Z轴围成的三角形旋转形成的圆锥体积最小. 这样转化之后可以看出直线的临 ...
- UVa 11524 - InCircle
推公式 #include <cstdio> #include <cmath> double Cal( double a, double b, double c ) { retu ...
- linux源码Makefile详解
1.Makefile的作用 (1)决定编译哪些文件 (2)怎样编译这些文件 (3)怎样连接这些文件,最重要的是它们的顺序如何 2.Linux内核Makefile分类 ***************** ...
- sql 存储过程 循环使用
USE [clab] GO /****** Object: StoredProcedure [dbo].[sp_bd_getResultByEcd] Script Date: 08/06/2014 1 ...