当前位置: 首页 > article >正文

cocos2d-iPhone

1.cocos2diphone环境搭建第一步下载cocos2diphone最新版本地址http://code.google.com/p/cocos2d-iphone/downloads/list 当前最新2.1-beta第二步下载完成之后解压第三步启动终端第四步先利用cd命令进入cocos2d引擎文件夹然后“./install-templates.sh -u”命令开始安装cocos2dhttp://blog.csdn.net/kepoon/article/details/7634013工程目录介绍预编译前缀头文件 “HelloWorld_prefix.pch”头文件的作用是给编译过程加速。把不常变化的框架(Frameworks)头文件添加到前缀头文件(prefix header)中。这样在编译的时候,框架的代码会被预先编译,所有的类都将可以使用这些头文件。不幸的是,这样做也有一个缺点:如果前缀头文件里其中一个头文件 发生了变化,你的所有代码将会重新编译。这就是为什么应该只添加那些极 少或者从来都不变化的头文件到前缀头文件中。cocos2d.h头文件可以被添加到前缀头文件中,因为它很少改变。,即使只为了不再需要在其他源代码里写 #import “cocos2d.h”, 也是值得一开始就在前缀头文件里写进 cocos2d.h 的。#ifdef __OBJC__#import Foundation/Foundation.h#import UIKit/UIKit.h#import cocos2d.h#endif任何在 AppDelegate 的 dealloc 方法中设置的断点都不起作用!这是正常的。当iOS 关闭一个程序时,它只是简单的把内存清空,以加快关闭的速度。这也是为什么 AppDelegate 的 dealloc 方法中的任何代码都不会被运行。并不需要 动调用 dealloc 方法以“解决这个问题”。如果确实需要在程序关闭之前在 AppDelegate 中运行代码,你可以在 applicationWillTerminate 方法中运行代码。如果目标 iOS 是 4 或者更高的版本,应该使用applicationDidEnterBackground。2.cocos2d-iPhonehttp://www.cocos2d-iphone.org/【cocos2d书籍翻译-更新结束】《Learn iPhone and iPad Cocos2D Game Development》http://blog.csdn.net/a287971/article/details/7631684http://cocos2d-central.com/files/file/2-source-code-for-the-learn-iphone-and-ipad-cocos2d-game-development-book/《Learn iPhone and iPad Cocos2D Game Development》3.cocos2d介绍一部分人感觉 iOS 设备更 加适合 2D 游戏。一般来说2D游戏更容易开发,也更容易让人理解。而且很多时候2D游戏对硬件的要求更小,这样就允许创建更生动和拥有更多细节的游戏图形。自带物理引擎cocos2d 整合了两套物理引擎。一套叫 Chipmunk,另一套叫 Box2d。它们的功能基本相同,最大的区别是编写它们所使用的编程语言:Chipmunk 是用 C 写的, Box2d 是用 C写的。对大多数开发者来说, Box2d 是比较好的选择,它面向对象的特性也更容易和 Objective-C 整合在一 起。隐藏了OpenGL ES 技术复杂度游戏开发者喜欢 cocos2d 的一个原因是它隐藏了底端的 OpenGL ES 代码。同时,cocos2d 允许你自由的在任何时间为任意游戏对象添加你自己的 OpenGL ES 代码。还可以添加一些 Cocoa Touch 的用户界面元素到程序中。大多数 cocos2d 游戏中的图形由简单的 Sprite 类利用图片文件生成。一 个 Sprite 就是一个贴图。可以通过改变 CCSprite 类的 Objective-C 属性来 改变这个贴图的大小,旋转和颜色。不需要关心这些效果是怎样用 OpenGL ES 代码来实现的。仍需要一些编程知识需要编程知识虽然其他的一些 iOS 游戏引擎,比如 Unity, iTorque 和 Shiva 专注于提供工具和流程以降低对编程知识的要求。但是使用那些工具的同时,你也牺牲了灵活性,当然还有钞票。使用一些工具学习一些与cocos2d配合使用的工具,比如Zwoptex和Particle Designer。 没有这些工具,你只能成为“半个”cocos2d开发者。这些工具可以帮助你制作 日益复杂的游戏。4.动画间隔(Animation Interval)iOS设备不支持超过60帧每秒的帧率,它的屏幕刷新率被锁定在60帧每秒(Hz)。动画间隔决定了cocos2d更新屏幕的频率。游戏不保证从始至终都达到60帧每秒的帧率。实际上,保持游戏运行在一个高的帧率上是我们的责任。在某些时候,把帧率设为30帧每秒可能更合适。对于那些很复杂的游戏,它们 的帧率可能在30和60帧每秒之间上下浮动的很厉害,设置一个低一点的帧率会 对这样的游戏有所帮助。当设置了一个低一点的帧率,而且游戏可以稳定的 保持在这个帧率,用户的体验会比使用一个高一些但是不稳定的帧率要好很多。iOS 应用属于用户界面驱动类型的程序,它需要发送和接收很多的事件。通常在游戏编程中不会发送和接收很多的事件,并且会让很多对象决定如何响应事件。因为提高运行效率和降低用户输入延迟的原因,游戏引擎常常联系的很紧密。很多工作会在循环和更新方法中完成。这些方法要么是每一帧都调用,要么是在特定的时间点调用。iOS设备使用的ARM CPU不支持直接在硬件上做除法, 乘法一般会快一些。虽然有时效果并不明显,但是养成这个习惯很有好处。在一定的数量级内分成两个循环所带来的额外系统开销是可以忽略不计的。5. 所有节点的基类都是CCNode类。它包含了位置信息,但是没有显示信息。它定义了许多除显示节点外的通用的属性和方法。所有节点都有一个共同的父类:CCNode。它是一个抽象类,没有视觉表现。它定义了许多除显示节点外的通用的属性和方法。除了场景本身,每一个节点只有一个父节点,但是可以有任意数量的子节点。CCNode,CCScene和CCLayer这些类是没有视觉表现的。它们是在内部作为场景图的抽象概念来使用的。CCSprite是具有视觉表现的节点。对一个节点施加的影响将会影响到它的所有子节点。但是有时候这也会产生混淆,因为像位置和旋转都是相对于 父节点来说的。CCNode类实现了所有添加,获取和删除子节点的方法addChild中的z参数决定了节点的绘制顺序。拥有最小z值的节点会首先被绘制; 拥有最大z值的节点最后一个被绘制。如果多个节点拥有相同的z值,他们的绘 制顺序将由他们的添加顺序来决定。这个规则只适用于像sprites有视觉表现的节点。6.CCDirector导演CCDirector类,简称Director(导演),是cocos2d游戏引擎的核心。很多cocos2d的初始化过程包含了 [CCDirector sharedDirector]的调用。Director是一个单例:它保存着 cocos2d的全局配置设定,同时管理着cocos2d的场景。Director的主要用处如下:(1). 访问和改变场景(2). 访问cocos2d的配置细节(3). 访问视图(OpenGL,UIView,UIWindow)(4). 暂停,恢复和结束游戏(5). 在UIKit和OpenGL之间转换坐标7.CCScene场景图(The Scene Graph) 场景层级。CCScene是一个抽象的概念,它的功能是根据像素坐标把物体放置在场景里相应的地方任何cocos2d场景都会用一个CCScene作为父对象。层次结构在游戏场景图中在最上面放置场景节点(MyScene),通常跟着的是一个层节点(CCLayer)。在cocos2d里,层节点的作用是接收触摸和加速计的输入。在CCLayer下一层的是游戏的组成要素,它们大多数是精灵(sprite)节点。CCScene对象总是场景图里面的第一个节点。通常CCScene的子节点都是继承自 CCLayer。CCLayer包含了各个游戏对象。因为大多数情况下场景对象本身不包 含任何游戏相关的代码,而且很少被子类化,所以它一般都是在CCLayer对象里 通过(id)scene这个静态方法来创建的。CCScene只是一个抽象的概念,默认的设置场景的方法是在类里面使用 一个静态初始化方法(static initializer)(id) scene。几乎在任何情况 下,CCScene都是在这里创建和使用的。以下是一个通用的(id) scene方法:(id) scene {CCScene *scene [CCScene node];id node [HelloWorld node];[scene addChild:node];return scene;}第一个创建场景的地方是在AppDelegate中aplicationDidFinishLaunching方法结束处用Director的runWithScene方法开始运行第一个场景:[[CCDirector sharedDirector] runWithScene:[HelloWorld scene]];在其它情况下,用replaceScene方法来替换已有的场景:[[CCDirector sharedDirector] replaceScene:[HelloWorld scene]];用以下代码在任意一个地方显示“设置场景”:[[CCDirector sharedDirector] pushScene:[Settings scene]];如果身处“设置场景”,但又想关闭“设置场景”时,可以调用popScene会回到之前还保留在内存里的场景:[[CCDirector sharedDirector] popScene];8.CCLayer: 有时候在同一个场景里你需要多个CCLayer。CCLayer类本身并不做什么,它的功能是允许触摸和加速计的输入。大多数游戏会接受基本的触摸输入,CCLayer通常是第一个被加入CCScene的类。和场景一样,层没有大小的概念。层是一个组织的概念。对一个层使用动作,那么所有在这个层上的物体都会同时受到影响比一个一个操作更有效率。用层和使用其它的节点一样,并不会因为使用多个层而降低运行效率。如果层接收触摸或者加速计事件的话就不一样了。因为接收处理外来事件很耗费资源。所以不应该使用很多接收外来事件的层。比较好的处理方式是只使用一个层来接收和处理事件。如果需要的话,这个层应该通过转发事件的方式来通知其它节点或类。CCLayer最典型的应用是把各个节点组织起来,还有接 收触摸输入和加速计输入的信息 - 前提是上述接收功能已被启用。设置isTouchEnabled为YES来让层接收触摸事件。CCLayer接收触摸事件一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用当手指首次触摸到屏幕时调用的方法:-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent*)event手指在屏幕上移动时调用的方法:-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent*)event当手指从屏幕上提起时调用的方法:-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent*)event当触摸事件被取消时调用的方法:-(void) ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent*)event取消事件的情况很少发生,所以在大多数情况下它的行为和触摸结束时相同。触摸事件由Cocoa Touch API接收,触摸的位置必须被转换为OpenGL的坐标-(CGPoint) locationFromTouches:(NSSet *)touches{UITouch *touch [touches anyObject];CGPoint touchLocation [touch locationInView: [touch view]];return [[CCDirector sharedDirector] convertToGL:touchLocation];}接收加速计事件和触摸输入一样,加速计必须在启用以后才能接收加速计事件: self.isAccelerometerEnabled YES; 层里面要加入一个特定的方法来接收加速计事件: -(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{CCLOG(acceleration: x:%f / y:%f / z:%f, acceleration.x, acceleration.y,acceleration.z);}在处理加速计事件的代码中改变速度变量的值间接更新主角精灵的位置而不是直接更新主角精灵。OS设备使用的ARM CPU不支持直接在硬件上做除法, 乘法一般会快一些。11.CCTransitionScene 所有过渡效果的类都继承自CCTransitionScene。在游戏里不是每个过渡效果都很有用,即使它们看起来很好看。玩家们最关心的是过渡的速度。设置过渡效果的时间不要超过一秒,或者干脆完全不用。14.CSpriteCCSprite是最常用到的类生成 精灵最简单的方法是把图片文件加载进CCTexture2D材质里面,然后将它赋给精灵。精灵中图片的中心点和精灵的左下角位置是一致的。生成的精灵被放 置在(0,0)点,也就是屏幕的左下角。将贴图的中心点和精灵的左下角位置设为一致有很大的好处一旦开始使用精灵的旋转或缩放属性,精灵的中心点将会保持在它的位置上。得到图片大小最简单的方法就是生成一个临时CCSprite精灵。15.定位点每个节点都有一个定位点 anchorPoint它定义的是贴图相对于节点位置(position)的向左向下的偏移通过把贴图的宽和高乘以定位点来得到贴图的偏移值。但是只有当此节点拥有贴图时,这个定位点才有用。默认anchorPoint属性设置为(0.5,0.5)或者贴图尺寸的一半。它是 一个抽象的因素,一个乘数,而不是一个特定的像素尺寸。如果设置anchorPoint为(0,0)的实际上是把贴图的左下角同节点的位置对齐了。但不要在cocos2d里面这样做。这样做会引起很多麻烦,包括旋转和缩放,父节点和子节点之间的相对位置,还有距离测试和碰撞测试。要保证anchorPoint在贴图的中央。如果anchorPoint的点的值为负值则图片在position的右上正值时图片在position的左下。当anchorPoint保存默认值(0.5,0.5)时position就是图片的中心点了。position节点的左下点原点。定位点anchorPoint默认值是两个0.5可理解为本来精灵和其图片重合但故意默认为两个0.5使精灵向右上移动了一半的位置。精灵的position是精灵的左下角同时是其中的图片的中心点这有个好处是精灵基于这个点旋转或缩放时我们看到图片的中心点没有移动。旋转在物理世界中常见基于位置的碰撞检测可能也已经适应了0.5。可能只需要在操作sprite时需要有时特殊调整定位点。如果没有设置positionposition默认值是(0,0)16.贴图大小 即一张资源图片的实际尺寸目前可用于iOS设备的贴图尺寸必须符合“2的n次方”规定所以贴图的宽和高必须是2,4,8,16,32,64,128,256,512,1024在第三代设备上可以达到2048像素。假设图片尺寸是260x260,用 的是32位颜色。在内存里,贴图本来只占279KB左右的空间,但是现在却使用了 整整1MB,这是因为iOS设备要求任何贴图的尺寸必须符 合“2的n次方”规定。260x260像素的贴图到了iOS设备中以后,系统会自动生 成一张与260x260尺寸最相近的符合“2的n次方”规定的图片(一张512x512像 素的图片),以便于把原贴图放进这个符合规定的“容器”中。而这张512x512 像素的图片占用了1MB的内存空间。纹理贴图集是一张包含多个图片的大图片同时这张大图片满足“2的n次方规则”。每一张包含于纹理贴图集中的图片都有一个精灵帧(sprite frame),这些帧用于定义各个图片在纹理贴图集中所处的各个长方形区域。精灵帧就是一个CGRect结构,定义了各个图片在纹理贴图集上所处的位置。这些精灵帧保存在一个单独的.plist文件中,cocos2d可以利用这个文件渲染纹理贴图集中指定的图片。这样避免了多张不符合规定的图片对内存的浪费。[player texture].contentSize是精灵纹理的内容尺寸即图片尺寸。因为纹理尺寸的大小只能是 2 的方幂但实际的图像尺寸可能会比纹理尺寸小。例如,如果原始图像的尺寸为 100×100 像素,那么纹理尺寸就是 128×128 像素。纹理的 contentSize 属性会返回原始图像的尺寸,也就是 100×100 像素。 大部分情况下,处理的都是内容尺寸而不是纹理尺寸因为纹理可能是包含多个图像的纹理图册。有时利用一个临时的精灵来得到图片的大小CCSprite* tempSpider [CCSprite spriteWithFile:spider.png];float imageWidth [tempSpider texture].contentSize.width;18.CCMenu需要一些可以让用户进行操作的按钮,使用CCMenu类来生成菜单。CCMenu只支持 CCMenuItem节点作为它的子节点。19.CCAction动作是用于在节点上运行某些“动作”的轻量级类。可以通过动作让节点移 动,旋转,缩放,着色,淡进淡出和干很多其它的事情。动作可以用于任何节点,可以在精灵,标签,甚至菜单或者整个场景中使用它们。cocos2d的动作可以分为两种类型。一种是“即时动作”,它的效果和设定节点属性一样,例如设定visible或flipX属性。另一种是“时间间隔动作”,这种动作在一段时间之内发生,例如上述代码的移动动作。不需要在这两种动作完成以后将它们从内存里清理出去,cocos2d会自动释放动作所占用的内存。一些动作类型重复动作舒缓动作动作序列即时动作。当一个物体需要经常改变它的速度或方向时(每秒钟好几次),选择动作来移动它就不是个好选择了。因为动作是设计用于存在时间相对较长的物体的,所以频繁的生成动作会增加系统分配和释放内存的开销,降低程序运行效率。CCBlinkCCMoveToCCCallFuncNCCCallFunc使用CCCallFunc的结果是sender为nil,CCCallFunc不会将 sender参数传进来。CCMoveByCCSequenceCCRepeatForeverCCEaseInCCRotateByCCScaleTo-(void) stopActionByTag:(NSInteger)aTag;-(CCAction*) runAction:(CCAction*) action;当一个物体需要经常改变它的速度或方向时(每秒钟好几次),选择动作来移动它就不是个好选择了。因为动作是设计用于存在时间相对较长的物体的,所以频繁的生成动作会增加系统分配和释放内存的开销,降低程序运行效率。如果你不为动作的运行留出时间的话,动作根本就不会起作用若在每一帧里都用新的动作去替换旧的动作时,新动作不会产生作用新动作没有时间去替换旧的动作。20.CCArray它和苹果官方的NSMutableArray类似,但是运行效率更高。 CCArray类实现了NSArray和NSMutableArray的子集,并且添加一些从NSArray初 始化到CCArray的新方法。CCArray通过将数组中的最后一个对象(nil)赋值给删 除的位置,实现了fastRemoveObject和fastRemoveObjectAtIndex两个方法。避 免了复制部份数组的内存。这让删除数组中的元素变的更快,不过这也意味着 CCArray中的对象会改变位置。如果程序依赖于指定的对象排列次序就不要使用fastRemoveObject这类方法。如果不是绝对必要,不要在for或者其它循环里的条件判断中调用方法,这样可以节省几个CPU循环。21. CCLOGCCLOG宏将苹果的 NSLog 方法进行了封装,所以 CCLOG 只在调试构建时会被编译,在发布构建时会被删除。建议在使用 NSLog 的地方用 CCLOG 代替,因为日志只是给自己看的。NSLog 会让发布的游戏变慢,因为它即使在发布构建里也会运行!即使一条 NSLog 或者 CCLOG 也会让 Debugger Console 的窗口填满日志信息,导致程序运行速度变慢。如果觉得游戏在调试构建中的运行性能很差,应该看一下 Debugger Console 里面是不是有多余的日志活动。从 Xcode 的 Run 菜单里,选择 Console 以显示 Debugger Console 窗口。两个构建配置(build configurations): 调试(Debug)和发布(Release)。他们之间的主要区别是:只有在调试时, 某些函数,比如 CCLOG才会编译和被游戏代码所使用。这是影响调试和发布构 建两个配置之间影响运行性能最主要的因素。22.。以下是一些最常用到的cocos2d 单例类和访问它们的方法:CCActionManager* sharedManager [CCActionManager sharedManager];CCDirector* sharedDirector [CCDirector sharedDirector];CCSpriteFrameCache* sharedCache [CCSpriteFrameCache sharedSpriteFrameCache];CCTextureCache* sharedTexCache [CCTextureCache sharedTextureCache];CCTouchDispatcher* sharedDispatcher [CCTouchDispatcher sharedDispatcher];CDAudioManager* sharedManager [CDAudioManager sharedManager]; SimpleAudioEngine* sharedEngine [SimpleAudioEngine sharedEngine];在创建任何一个单例类之前,要考虑是否真的需要单例,是否需求会在不久的将来改变。23.一些数学函数ccpDistancefloat actualDistance ccpDistance(player.position, spider.position);ccpMult 乘法ccpAddccpSub 减法可以在cocos2d的Xcode项目中 的cocos2d/Support组,找到CGPointExtension文件,里面有很多有用的数学函 数。24.- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{//screen coordinate, screen topleft (0,0)CGPoint po[touch locationInView:[touch view]];//screen coordinate, screen bottomleft (0,0)CGPoint touchLocation [[CCDirector sharedDirector] convertToGL:po];//NodeSpace coordinate, NodeSpace bottomleft (0,0)CCTMXTiledMap* map;CGPoint touchLocation [map convertTouchToNodeSpace:touch];}}25.Online Audio Converterhttp://media.io/100.示例如何使用cocos2d制作类似Scott Pilgrim的2D横版格斗过关游戏part2翻译http://blog.sina.com.cn/s/blog_4b55f6860101aaav.html1.场景转换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];}调用次序: initonEnter、过渡效果 、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];//转换到layer2layer1还是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:selfpriority:-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.工具类CGRectContainsPoint11.播放音乐在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以下的音频文件转换是免费的通过以下地址下载SoundConverterhttp://dekorte.com/projects/shareware/SoundConverter/2.左右轻微摇摆[sprite stopAllActions];CCRotateTo * rotLeft [CCRotateBy actionWithDuration:0.1 angle:-4.0];CCRotateTo * rotCenter [CCRotateBy actionWithDuration:0.1 angle:0.0];CCRotateTo * rotRight [CCRotateBy actionWithDuration:0.1 angle:4.0];CCSequence * rotSeq [CCSequence actions:rotLeft, rotCenter, rotRight, rotCenter, nil];[sprite runAction:[CCRepeatForever actionWithAction:rotSeq]];停止摇摆[sprite runAction:[CCRotateTo actionWithDuration:0.1 angle:0]];3.不停闪烁CCBlink* blink[CCBlink actionWithDuration:0.5 blinks:1];[sprite runAction:[CCRepeatForever actionWithAction:blink]];10.cocos2d的常用动作及效果总结http://lizi07.iteye.com/blog/1625985

相关文章:

cocos2d-iPhone

1.cocos2d-iphone环境搭建 第一步:下载cocos2d-iphone最新版本;地址:http://code.google.com/p/cocos2d-iphone/downloads/list (当前最新2.1-beta) 第二步:下载完成之后解压&#x…...

途游游戏AI产品经理面试题精选:10道高频考题+答案解析

途游游戏简介途游游戏(Tuyoo Games)成立于2013年,是中国领先的互动娱乐供应商,全球服务用户超过十亿,日活跃用户近500万。公司以策略、休闲双产品线为核心,代表产品包括《捕鱼大作战》等,长期位…...

TypeScript HTTP客户端clientele:声明式API与全链路类型安全实践

1. 项目概述:一个现代、类型安全的HTTP客户端库在构建现代应用程序时,与外部API进行通信几乎是每个开发者都会遇到的日常任务。无论是调用一个天气服务、与支付网关交互,还是从内部微服务获取数据,你都需要一个可靠、高效且易于维…...

《QGIS空间数据处理与高级制图》001:什么是空间数据预处理?

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、…...

SD-WebUI-Inpaint-Anything:智能图像修复的终极指南

SD-WebUI-Inpaint-Anything:智能图像修复的终极指南 【免费下载链接】sd-webui-inpaint-anything Inpaint Anything extension performs stable diffusion inpainting on a browser UI using masks from Segment Anything. 项目地址: https://gitcode.com/gh_mirr…...

Hermes Agent对接Taotoken自定义提供商配置详解

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent对接Taotoken自定义提供商配置详解 1. 准备工作 在开始配置之前,你需要准备好两样东西:一个有…...

opencode-mcp:让AI编码助手学会“摇人”的本地自动化工具

1. 项目概述:当你的AI助手学会“摇人” 如果你和我一样,每天都在和Claude、Cursor这类AI编码助手打交道,那你肯定遇到过这个场景:你让它“重构一下这个模块”,它噼里啪啦给你生成了一堆代码,然后你发现它没…...

Godot运行时控制台:实时调试与游戏状态交互的瑞士军刀

1. 项目概述:一个为Godot游戏引擎量身打造的开发者控制台 如果你正在用Godot引擎开发游戏,尤其是在调试阶段,你肯定遇到过这样的场景:游戏运行时,你想快速修改一个角色的移动速度,或者想立刻查看当前场景中…...

XUnity Auto Translator:打破语言壁垒的Unity游戏翻译革命性方案

XUnity Auto Translator:打破语言壁垒的Unity游戏翻译革命性方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经遇到过这样的情况:终于等到心仪的Unity游戏发售&#x…...

Taotoken API Key 的精细化管理与访问控制实践

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken API Key 的精细化管理与访问控制实践 在团队协作与多项目并行的开发环境中,大模型 API 密钥的管理往往成为一…...

从CV到NLP:在SAM模型里第一次用torch.nn.Embedding,我搞懂了词嵌入是咋回事

从CV到NLP:在SAM模型里第一次用torch.nn.Embedding,我搞懂了词嵌入是咋回事 第一次在Segment Anything Model(SAM)的PromptEncoder模块中看到nn.Embedding时,我盯着那行代码愣了半天——作为长期在计算机视觉领域摸爬…...

鸿蒙 App 重构:如何从混乱到清晰?

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...

CANN / runtime 内存语义同步

内存语义同步 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 内存语义同步机制允许用户基于通用Device内存实现同步。与Event/Notify同步机制不同,基于内存语义的同步机制还支持算子作为同…...

2026届学术党必备的降AI率神器实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 作为一款基于自然语言处理跟深度学习技术的智能辅助工具,AI 写作软件可以快速生成…...

别再被‘共地’坑了!STM32连接热敏打印机从接线到打印的保姆级避坑教程

STM32与热敏打印机联调实战:从共地原理到格式化文本输出的完整指南 当你兴奋地将STM32与热敏打印机连接,却发现无论如何发送数据都如同石沉大海时,那种挫败感每个嵌入式开发者都深有体会。这往往不是代码逻辑的问题,而是硬件连接…...

CANN/ops-cv 三线性上采样算子

ResizeUpsampleTrilinear 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/A…...

开源复合工程工具OpenClaw的维护实践与架构演进

1. 项目概述与核心价值 最近在开源社区里,一个名为 foxjwjw99-rgb/compound-engineering-openclaw-maintenance 的项目引起了我的注意。这个项目标题乍一看有点长,但拆解开来,信息量不小。 foxjwjw99-rgb 看起来是作者或组织的标识&#…...

多模态AI对齐技术:从CLIP对比学习到BLIP融合架构的工程实践

1. 项目概述:为什么“对齐”是多模态AI的命门?如果你最近在捣鼓大语言模型(LLM)或者图像生成模型,可能会发现一个有趣的现象:让模型“画一只猫坐在键盘上”,它可能给你生成一只猫,旁…...

昇腾CANN/GE UDF接口列表

UDF接口列表 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前…...

构建高效工程文化:从核心原则到团队实践指南

1. 什么是好的工程文化?从一次讨论说起前几天翻看一些老资料,又看到了EE Times在2012年那篇关于工程文化的文章,里面提到了当时在Quora上很火的一个帖子:“什么造就了好的工程文化?” 发起人Edmond Lau,一位…...

CANN/sip交换向量示例

信号处理加速库SwapOperation C Demo 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 介绍 该目录下为信号处理…...

测试90测试90测试90测试90测试90

测试90测试90测试90测试90测试90测试90测试90测试90测试90测试90...

AI编程助手Cursor开源生态实践:智能体配置与自动化工作流

1. 项目概述:当AI代码助手遇上开源协作 最近在开发者圈子里,一个名为 undivided-actium697/opencode-cursor 的项目引起了我的注意。乍一看,这像是一个普通的GitHub仓库,但它的名字组合却很有意思:“opencode”和“c…...

安全关键领域可解释AI:从技术原理到人机协同的实践指南

1. 项目概述:当AI走进驾驶舱与手术室“可解释AI”这个词,在技术圈里已经热了好几年。但如果你问一个在自动驾驶测试场里盯着屏幕的工程师,或者一个在手术室里准备引入AI辅助诊断系统的医生,他们最关心的是什么?答案往往…...

Claude Code Plus:AI编程效率倍增器,代码交互与工作流优化实战

1. 项目概述与核心价值最近在开发者社区里,一个名为touwaeriol/claude-code-plus的项目引起了我的注意。乍一看,这只是一个针对 Claude 代码解释器的增强插件,但深入使用后,我发现它远不止于此。它本质上是一个为提升代码编写、调…...

AI叙事命令行工具:从原理到工程化实践

1. 项目概述:一个为AI叙事注入灵魂的命令行工具 如果你和我一样,对AI生成的故事、剧本或者角色对话感兴趣,并且不满足于简单地在网页界面上点点按钮,那么你很可能已经对 narrator-ai-cli 这个项目产生了好奇。乍一看这个名字&am…...

从零构建Llama 3:深入理解大语言模型架构与训练全流程

1. 项目概述:从零构建Llama 3意味着什么? 最近在开源社区里,一个名为“Building-llama3-from-scratch”的项目引起了我的注意。乍一看标题,很多人可能会觉得这又是一个“标题党”——毕竟,Meta的Llama 3是一个拥有数百…...

Python声明式数据抓取:openclaw-py工具库的设计理念与实战应用

1. 项目概述与核心价值 最近在折腾一些自动化脚本和数据处理任务时,我常常遇到一个痛点:需要从各种网页、文档或者API接口里精准地“抓取”特定格式的数据,比如表格、列表,或者嵌套在复杂HTML结构里的信息。手动写正则表达式或者用…...

python控制台同行覆盖显示文本,追加,换行的原理

VC / C / C Windows 控制台 完全是同一套原理全平台 Windows 控制台 底层逻辑一模一样:\r \n 行为、光标移动、同行覆盖、进度条刷新,和 Python、VB6 完全通用。一、标准对应关系(全语言通用)表格转义符ASCII含义控制台行为\rChr(…...

保姆级教程:用Python和Pandas快速上手Argoverse2数据集(附代码避坑指南)

保姆级教程:用Python和Pandas快速上手Argoverse2数据集(附代码避坑指南) Argoverse2作为自动驾驶领域的高质量开源数据集,正成为轨迹预测和场景理解研究的热门选择。但对于刚接触这个数据集的数据工程师或机器学习初学者来说&…...