cocos2d-iPhone

news2026/5/9 22:07:34
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…