cocos2d-iPhone2

1.场景转换
CCTransitionSlideInB* transition = [CCTransitionSlideInB transitionWithDuration:3 scene:[OtherScene scene]];
[[CCDirector sharedDirector] replaceScene:transition];

用CCDirector replaceScene方法替换场景, 每个节点都会调用CCNode所带的三个方法:onEnter, onEnterTransitionDidFinish和onExit。

//onEnter,onEnterTransitionDidFinish和onExit方法
-(void) onEnter
{
// 节点调用init方法以后将会调用此方法
// 如果使用了CCTransitionScene,将会在过渡效果开始以后调用此方法 [super onEnter];
}
-(void) onEnterTransitionDidFinish
{
// 调用onEnter以后将会调用此方法
// 如果使用了CCTransitionScene,将会在过渡效果结束以后调用此方法 [super onEnterTransitionDidFinish];
}
-(void) onExit
{
// 节点调用dealloc方法之前将会调用此方法
// 如果使用了CCTransitionScene,将会在过渡效果结束以后调用此方法 [super onExit];
}

调用次序: init,onEnter、过渡效果
、onExit、onEnterTransitionDidFinish、dealloc。

取决于是否使用了CCTransitionScene, onEnter和onExit会在场景转换过程中的某个时间点被调用。对于这三个方法, 你必须调用它们的super方法以避免触摸输入问题和内存泄漏的问题。

可以在场景转换之前或者之后,通过使用上述方法在节点中完成一些特定的操作。因为在程序进入onEnter方法的时候,场景中的所有节点都已经设置完成了;同时,在onExit方法中,所有节点都还存在于内存中。

2.过渡场景,使用自定义的可重用的LoadingScene
原因:场景的生成其实早于场景过渡效果的开始。所以如果需要在新场景的 init 或者 onEnter 方法中执行很复杂的代码或加载很多 素材的话,过渡效果开始之前就会产生很明显的延迟。
两个场景之间使用了一个简单的过渡场景用于替换当前场景,然后用最终的目标场景替换这个过渡场景。在这个替换的过程中,cocos2d将会有足够的时间来释放之前场景所占用的内存。 得到的实际效果是:不再会有两个复杂场景同时占用着内存的情况了,因此在场景转换过程中也就减少了出现内存使用高峰的机会。
不要在一个节点的init方法中调用CCDirector的replaceScene方法。Director无法容忍一个节点在初始化的同时进行场景替换。通过使用scheduleUpdate方法来延缓目标场景对LoadingScene场景的替换。


4.选用CCMultiplexLayer来管理关卡
CCMultiplexLayer可以同时包含多个节点,但是任意时间里只有一个节点是有效的。缺点是不能在层之间使用过渡效果。因为任意时间里只能有一个层是可视的,所以任何过渡效果都是不可能发生的。
列:使用CCMultiplexLayer类在不同层之间进行转换
CCLayer* layer1 = [CCLayer node];
CCLayer* layer2 = [CCLayer node];
CCMultiplexLayer* mpLayer = [CCMultiplexLayer layerWithLayers:layer1, layer2, nil];
//转换到layer2,layer1还是mpLayer的子节点
[mpLayer switchTo:1];
// 转换到layer1,从mpLayer里移除layer2,并且释放layer2占用的内存
// 在使用下述方法以后,你不能够再转换回layer2(索引:1)了
[mpLayer switchToAndReleaseMe:0];

5.CCColorLayer
//添加一层背景色层
CCColorLayer* colorLayer = [CCColorLayer layerWithColor:ccc4(255, 0, 255, 255)];
[self addChild:colorLayer z:0];

6.游戏角色和CCNode的关系:游戏角色中“有一个”CCNode,和对CCNode的逻辑处理。不只“是一个”CCNode。
最常用来将物体显示在屏幕上的类是CCSprite。但是实际上游戏角色和CCNode类之间的关系是“有一个”的关系。游戏角色类“有一个”CCSprite用于显示它自己。游戏角色类“有一个”CCLabel用于显示它自己。如果使用OpengGL和许多粒子效果,那么角色类就“有一个”粒子效果系统将它自己显示在屏幕上。
CCSprite和对它的输入处理,角色动画,碰撞检测等等的游戏逻辑之关是被操作关系,而不是紧密的包含后者。
使用基于NSObject的类作为游戏物体看起来有些奇怪,而且它的好处也只有你在创建大一些项目的时候才会显现出来(小项目可以用基于CCSprite的类)。但是它会让你写出结构更好的代码,也会让单独的游戏元素拥有更加清晰明确的目的。

7.让普通的类接收触摸事件
除了CCLayer能接收触摸输入事件,还可以通过使用CCTouchDispatcher,让任何类接收触摸事件。需要在类里实现CCStandardTouchDelegate协议或者CCTargetedTouchDelegate协议。
// 让这个类可以接收定向的触摸事件
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self
priority:-1 swallowsTouches:YES];
//在析构函数中
-(void) dealloc
{
//必须要手动解除预约,不会自动解除
[[CCScheduler sharedScheduler] unscheduleUpdateForTarget:self];

// 必须手动从触摸调度程序中移除这个类
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];

[super dealloc];
}



6.CCProgressTimer (进度条):
可以选择圆形,纵向和横向的进度显示。不过进度条不会自己更新自己,必须经常更新进度条的百分比数值来显示进度。

CCParallaxNode (视差视图):
“视差”(Parallaxing)是2D游戏中通过让不同层上的图片用不同的速度移动, 来创造视觉深度的方法。前景的图片移动的比背景图片要快。cocos2d有一个特 殊的节点用于实现这个效果.
CCParallaxNode和生成其它节点的方式是一样的,但是在添加子节点的时候可以传递 parallaRatio参数。这个参数是一个CGPoint类型,用于倍增 CCParallaxNode 的移动。
一旦子节点被加入 CCParallaxNode中,就不能再修改它们的位置了。只能够在背景的范围内移动,否则背景色就会被显示出来。可以通过添加相同的精灵作为背景来增加背景的覆盖区域。但是如果想拥有无限横向或者纵向滚屏的话,就需要自己写个“视差”系统(parallax system)了。

CCRibbon(图片链条) CCRibbon节点会生成一系列图片,就像一根链条。连续在指定的点上复制。


CCMotionStreak(拖尾效果) CCMotionStreak实际上是CCRibbon的一个封装实现。它会让CCRibbon的元素在 你画出它们之后慢慢淡出直至消失。

10.工具类
CGRectContainsPoint

11.播放音乐
在cocos2d里播放音频最好也是最简单的方式是使用SimpleAudioEngine。音频支持不是cocos2d自带的功能;它来自CocosDenshion,和物理引擎一样是cocos2d的第三方插件。
以下代码展示了如何使用SimpleAudioEngine播放音乐和音频:
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"blues.mp3" loop:YES];
[[SimpleAudioEngine sharedEngine] playEffect:@"alien-sfx.caf"];

如果播放音乐,MP3是最好的选择。只能一次播放一个MP3背景音乐。从技术上来说,有可能同时播放两个或两个以上的MP3文件,但是只有一个MP3文件可以通过硬件来解码。这样就会导致使用CPU来替其它MP3解码。对于游戏来说,这会给系统造成很大的压力。所以绝大多数情况下不应该同时播放多个MP3文件。

如果播放音效文件的话,建议使用CAF格式。

如果想快速转换音频文件格式,同时改变一些基本的音频设置比如采样率
(sampling rate),建议使用SoundConverter。500KB以下的音频文件转换是免费的,通过以下地址下载SoundConverter:
http://dekorte.com/projects/shareware/SoundConverter/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值