【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及动画创建!【一】

简介:

    上周貌似没有写新的博文,那么今天Himi写个精品的博文奉献给童鞋们;

         (不少童鞋说Himi的教程最近都没有源码放出=。 =,这里我解释下,一般我没有放出源码的博文那肯定已经将代码贴出来了,这点是肯定的,否则Himi一定给出源码的)

       本篇的知识点如下:

       1. 两种方式实现自定义精灵;

       2.两种方式让精灵利用多帧播放动画

       3. 为你的精灵设置带有攻击帧的动画,当执行攻击动作的中间会执行扣血等逻辑,然后接着播放动作喔~

       首先第一种如何自定义精灵:

       两种自定义一个精灵当然无疑我们仍然继承CCSprite,首先看第一种自定义方式,Himi新建一个类,名字是MySprite,代码如下,大家一看就很清晰了;

          MySprite.h

 


  
  
  1. //   
  2. //  MySprite.h   
  3. //  HimiAnimationsTestPro   
  4. //   
  5. //  Created by 华明 李 on 11-11-20.   
  6. //  Copyright (c) 2011年 __MyCompanyName__. All rights reserved.   
  7. //   
  8.    
  9. #import "CCSprite.h"   
  10.    
  11. @interface MySprite : CCSprite{   
  12.        
  13. }   
  14. +(id) mySpriteInitWithImage:(NSString*)fileName;   
  15. -(id) initWithMySpriteImage:(NSString*)fileName;   
  16. @end   

MySprite.m

 


  
  
  1. //   
  2. //  MySprite.m   
  3. //  HimiAnimationsTestPro   
  4. //   
  5. //  Created by 华明 李 on 11-11-20.   
  6. //  Copyright (c) 2011年 __MyCompanyName__. All rights reserved.   
  7. //   
  8.    
  9. #import "MySprite.h"   
  10.    
  11. @implementation MySprite   
  12. +(id) mySpriteInitWithImage:(NSString*)fileName   
  13. {   
  14.     return [[[self alloc] initWithMySpriteImage:fileName] autorelease];//这里仿照cocos2d原理,自动清理精灵   
  15. }   
  16.    
  17. -(id) initWithMySpriteImage:(NSString*)fileName   
  18. {   
  19.     if ((self = [super initWithFile:fileName]))   
  20.     {   
  21.         //初始化的东东都写在这里喔~   
  22.     }   
  23.     return self;   
  24. }     
  25.    
  26. -(void) dealloc   
  27. {   
  28.    //内存清理   
  29.     [super dealloc];   
  30. }   
  31. @end   

 

大家以后自定义精灵的时候可以将我这个当模版即可!如果你不想自定义的精灵传参,那就直接自己修改下构造函数即可,初始化的时候写死名字即可(比如一般游戏主角不需要传入图片名字作为参数,直接在我们主角类的构造中将图片资源名写死即可) 

 

    然后我们用第二种方式,所谓第二种方式其实就是修改我们的初始化函数,让其精灵初始化的方式改成帧缓存创建:(适合利用TP打包工具出的图进行来创建精灵)

代码如下:(这里Himi为了让童鞋们看得清楚,Himi新建一个类,名字是MySpriteByFrame

         MySpriteByFrame.h

 


  
  
  1. //   
  2. //  MySprite.h   
  3. //  HimiAnimationsTestPro   
  4. //   
  5. //  Created by 华明 李 on 11-11-20.   
  6. //  Copyright (c) 2011年 __MyCompanyName__. All rights reserved.   
  7. //   
  8.    
  9. #import "CCSprite.h"   
  10.    
  11. @interface MySpriteByFrame : CCSprite{   
  12.        
  13. }   
  14. +(id) mySpriteInitWithFrameName:(NSString*)frameName;   
  15. -(id) initWithMySpriteFrameName:(NSString*)frameName;   
  16. @end   

 

  MySpriteByFrame.m

 


  
  
  1. //   
  2. //  MySprite.m   
  3. //  HimiAnimationsTestPro   
  4. //   
  5. //  Created by 华明 李 on 11-11-20.   
  6. //  Copyright (c) 2011年 __MyCompanyName__. All rights reserved.   
  7. //   
  8.    
  9. #import "MySpriteByFrame.h"   
  10.    
  11. @implementation MySpriteByFrame   
  12. +(id) mySpriteInitWithFrameName:(NSString*)fileName   
  13. {   
  14.     return [[[self alloc] initWithMySpriteFrameName:fileName] autorelease];//这里仿照cocos2d原理,自动清理精灵   
  15. }   
  16.    
  17. -(id) initWithMySpriteFrameName:(NSString*)fileName   
  18. {   
  19.     if ((self = [super initWithSpriteFrameName:fileName]))   
  20.     {   
  21.         //初始化的东东都写在这里喔~   
  22.     }   
  23.     return self;   
  24. }     
  25.    
  26. -(void) dealloc   
  27. {   
  28.     //内存清理   
  29.     [super dealloc];   
  30. }   
  31. @end   

大家注意两种自定义精灵.m类中的 if((self = XXX)这里是重要的区别,一个是直接索引资源名称,一个是通过名称找到帧缓存中的帧;

 

OK,两种创建的方式的自定义精灵都完成了,下面我们来尝试创建吧:

 


  
  
  1. //---------创建一个我们自定义的MySprite精灵吧(利用文件名直接创建)   
  2. //1.import 自定义类.h (#import "MySprite.h")   
  3. MySprite*mySprite=[MySprite mySpriteInitWithImage:@"Icon.png"];   
  4. mySprite.position=ccp(70,size.height*0.5);   
  5. [self addChild:mySprite];   
  6.    
  7.    
  8. //---------创建一个我们自定义的MySpriteByFrame精灵吧(利用帧缓存中的文件名创建)   
  9. //@@@@注意因为是从帧缓存里找到对应名字的帧,那么肯定需要将用到的帧放在缓存里。   
  10. [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"mySpriteFrames-hd.plist"];   
  11. MySpriteByFrame *mySpriteByF =[MySpriteByFrame mySpriteInitWithFrameName:@"himi.png"];   
  12. mySpriteByF.position=ccp(300,size.height*0.5);   
  13. [self addChild:mySpriteByF];   

 

注意:利用帧来创建的时候必须要将使用的帧首先加载到帧缓存中,这里Himi利用TP打包工具将一张名字为himi.png的图打包到mySpriteFrames-hd.plist中了,也就是下面这句代码将himi.png图加载到帧缓存中了,否则报错找不到喔;

 


  
  
  1. [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"mySpriteFrames-hd.plist"];   

加载的图片资源图如下:

 

 

 注意这里的-hd 文件和非-hd的文件的区别,不太懂的童鞋请移步到这篇博文:
         【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!

 

运行截图如下:

 





本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/719894,如需转载请自行联系原作者
目录
相关文章
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
255 1
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
217 5
|
Swift iOS开发 UED
实现一个自定义的iOS动画效果
本文介绍如何使用Swift和UIKit在iOS应用中实现一个自定义按钮动画,当按钮被点击时,其颜色从蓝色渐变为绿色,形状从圆形变为椭圆形,释放后恢复原状。通过UIView动画方法实现这一效果,代码示例展示了动画的平滑过渡和状态切换,有助于提升应用的视觉体验和用户交互。
287 1
|
Swift iOS开发 UED
揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【9月更文挑战第5天】本文通过具体案例介绍如何在iOS应用中使用Swift与UIKit实现自定义按钮动画,当用户点击按钮时,按钮将从圆形变为椭圆形并从蓝色渐变到绿色,释放后恢复原状。文中详细展示了代码实现过程及动画平滑过渡的技巧,帮助读者提升应用的视觉体验与特色。
238 11
|
Swift iOS开发 UED
【绝妙创意】颠覆你的视觉体验!揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【8月更文挑战第13天】本文通过一个具体案例,介绍如何使用Swift与UIKit在iOS应用中创建独特的按钮动画效果。当按钮被按下时,其形状从圆形变化为椭圆形,颜色则从蓝色渐变为绿色;释放后,动画反向恢复原状。利用UIView动画方法及弹簧动画效果,实现了平滑自然的过渡。通过调整参数,开发者可以进一步优化动画体验,增强应用的互动性和视觉吸引力。
191 7
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
10月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
638 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
9月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
398 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
11月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
330 66
|
9月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
271 0