【IOS】仿捕鱼达人的金币滚动显示

              原文地址:http://blog.csdn.net/toss156/article/details/7439769

今天给大家带来一个模仿捕鱼达人中,金币的滚动显示。(部分代码参考了cocoachina上一个C++版的)

【IOS】仿捕鱼达人的金币滚动显示_第1张图片

[cpp]  view plaincopy
  1. //  
  2. //  UiNumRoll.h  
  3. //  WheelScore  
  4. //  
  5. //  Created by 周海锋 on 12-4-8.  
  6. //  Copyright 2012年 CJLU. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10. #import "cocos2d.h"  
  11.   
  12. #define NUM_HEIGHT 20  
  13. #define NUM_WIDTH  20  
  14.   
  15. typedef enum{  
  16.     NumStyleNormal,  
  17.     NumStyleSameTime,  
  18. }NumStyle;  
  19.   
  20. @interface UINumber : CCSprite {  
  21.     NumStyle m_style;       //滚动样式  
  22.     int m_num;              //显示的数字  
  23.     int m_nPosCur;          //当前的位置  
  24.     int m_nPosEnd;          //结束的位置  
  25.     int m_nMoveLen;         //每次移动的位置  
  26.     CCTexture2D *m_texture; //数字的texture  
  27. }  
  28.   
  29. @property(nonatomic,retain) CCTexture2D *m_texture;  
  30. -(id) initWithStyle:(NumStyle) style;  
  31. -(void) setNumber:(int) num;  
  32. -(void) onRollDown:(ccTime) dt;  
  33. -(void) onRollUP:(ccTime) dt;  
  34. -(void) setup;  
  35. @end  

[cpp]  view plaincopy
  1. //  
  2. //  UiNumRoll.m  
  3. //  WheelScore  
  4. //  
  5. //  Created by 周海锋 on 12-4-8.  
  6. //  Copyright 2012年 CJLU. All rights reserved.  
  7. //  
  8.   
  9. #import "UINumber.h"  
  10. @implementation UINumber  
  11. @synthesize m_texture;  
  12.   
  13. /* 
  14.  * init 初始化 
  15.  */  
  16. -(id) init  
  17. {  
  18.     if( (self=[super init])) {  
  19.         m_texture = NULL;  
  20.         m_style = NumStyleNormal;  
  21.         m_num = 0;  
  22.         m_nPosCur = 0;  
  23.         m_nPosEnd = 0;     
  24.         [self setup];  
  25.     }  
  26.     return self;  
  27. }  
  28.   
  29. /* 
  30.  * initWithStyle 初始化 
  31.  */  
  32. -(id) initWithStyle:(NumStyle) style  
  33. {  
  34.     if( (self=[super init]))   
  35.     {  
  36.         m_texture = NULL;  
  37.         m_style = style;  
  38.         m_num = 0;  
  39.         m_nPosCur = 0;  
  40.         m_nPosEnd = 0;  
  41.         [self setup];  
  42.     }  
  43.     return self;  
  44. }  
  45.   
  46. /* 
  47.  * setup 设置texture 
  48.  */  
  49. -(void)setup  
  50. {  
  51.     UIImage *image = [UIImage imageNamed:@"number.png"];  
  52.     m_texture = [[CCTexture2D alloc]initWithImage:image];  
  53.     CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:m_texture rect:CGRectMake(0, 0, NUM_WIDTH, NUM_HEIGHT)];  
  54.     [self setDisplayFrame:frame];  
  55. }  
  56.   
  57. /* 
  58.  * setNumber 设置显示的数字 
  59.  */  
  60. -(void) setNumber:(int) num  
  61. {  
  62.     m_nPosCur = NUM_HEIGHT * m_num;  
  63.     m_nPosEnd = NUM_HEIGHT * num;  
  64.     if (NumStyleNormal == m_style) {  
  65.         m_nMoveLen = 4;  
  66.     }  
  67.     else if (NumStyleSameTime == m_style) {  
  68.         m_nMoveLen = (m_nPosEnd-m_nPosCur)/20;  
  69.     }  
  70.       
  71.     if (m_num > num) {  
  72.         [self schedule:@selector(onRollUP:) interval:0.03];  
  73.     }  
  74.     else {  
  75.         [self schedule:@selector(onRollDown:) interval:0.03];  
  76.     }  
  77.     m_num = num;  
  78. }  
  79.   
  80. /* 
  81.  * onRollDown 向下滚动 
  82.  */  
  83. -(void) onRollDown:(ccTime) dt  
  84. {  
  85.     m_nPosCur += m_nMoveLen;  
  86.     if (m_nPosCur >= m_nPosEnd) {  
  87.         m_nPosCur = m_nPosEnd;  
  88.         [self unschedule:@selector(onRollDown:)];  
  89.     }  
  90.       
  91.     CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:m_texture rect:CGRectMake(0, m_nPosCur, NUM_WIDTH, NUM_HEIGHT)];  
  92.     [self setDisplayFrame:frame];  
  93. }  
  94.   
  95.   
  96. /* 
  97.  * onRollUP 向上滚动 
  98.  */  
  99. -(void) onRollUP:(ccTime) dt  
  100. {  
  101.     m_nPosCur -= 4;  
  102.     if (m_nPosCur <= m_nPosEnd) {  
  103.         m_nPosCur = m_nPosEnd;  
  104.         [self unschedule:@selector(onRollUP:)];  
  105.     }  
  106.       
  107.     CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:m_texture rect:CGRectMake(0, m_nPosCur, NUM_WIDTH, NUM_HEIGHT)];  
  108.     [self setDisplayFrame:frame];  
  109. }  
  110.   
  111. -(void)dealloc  
  112. {  
  113.     [self unscheduleAllSelectors];  
  114.     [m_texture release];  
  115.     [super dealloc];  
  116. }  
  117. @end  

[cpp]  view plaincopy
  1. //  
  2. //  UIRollNum.h  
  3. //  WheelScore  
  4. //  
  5. //  Created by 周海锋 on 12-4-8.  
  6. //  Copyright 2012年 CJLU. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10. #import "cocos2d.h"  
  11. #import "UINumber.h"  
  12.   
  13. @interface UIRollNum : CCSprite {  
  14.     int m_nNumber;              //显示的数字  
  15.     int m_maxCol;               //最大显示位数  
  16.     NSMutableArray *numArray;   //存放每个数字的数组  
  17.     CGPoint m_point;            //坐标  
  18.     bool  zeroFill;             //是否开启0填充  
  19.     NumStyle style;             //滚动样式  
  20. }  
  21.   
  22. @property (nonatomic,retain) NSMutableArray *numArray;  
  23. @property (nonatomic) CGPoint m_point;  
  24. @property (nonatomic) NumStyle style;    
  25.   
  26. -(void) rebuildEffect;  
  27. -(void) clearEffect;  
  28. -(int) getNumber;  
  29. -(void) setNumber:(int)num;  
  30. @end  

[cpp]  view plaincopy
  1. //  
  2. //  UIRollNum.m  
  3. //  WheelScore  
  4. //  
  5. //  Created by 周海锋 on 12-4-8.  
  6. //  Copyright 2012年 CJLU. All rights reserved.  
  7. //  
  8.   
  9. #import "UIRollNum.h"  
  10. @implementation UIRollNum  
  11. @synthesize numArray,m_point,style;  
  12.   
  13. /* 
  14.  * init 初始化 
  15.  */  
  16. -(id) init  
  17. {  
  18.     if (self = [super init]) {  
  19.         m_nNumber = 0;  
  20.         m_maxCol = 6;  
  21.         numArray =[[NSMutableArray alloc] init];  
  22.         zeroFill = YES;  
  23.         style = NumStyleNormal;  
  24.     }     
  25.     return self;  
  26. }  
  27.   
  28. /* 
  29.  * getNumber 获取显示的数字 
  30.  */  
  31. -(int) getNumber  
  32. {  
  33.     return m_nNumber;  
  34. }  
  35.   
  36. /* 
  37.  * setNumber 设置显示的数字 
  38.  * num int 设置的数字 
  39.  */  
  40. -(void) setNumber:(int)num  
  41. {  
  42.     if (m_nNumber != num) {  
  43.         m_nNumber = num;  
  44.        [self rebuildEffect];  
  45.     }  
  46. }  
  47.   
  48. /* 
  49.  * rebuildEffect 重新设置每位数字 
  50.  */  
  51. -(void) rebuildEffect  
  52. {  
  53.     [self clearEffect];  
  54.       
  55.     int i=0;  
  56.     int num = m_nNumber;  
  57.     while (1) {  
  58.         if (num<=0) {  
  59.             if(m_maxCol<=i && zeroFill)  
  60.             break;  
  61.         }  
  62.         int showNum = num%10;  
  63.           
  64.         UINumber* pNumber = [[UINumber alloc]initWithStyle:style];  
  65.         [numArray addObject:pNumber];  
  66.         [pNumber setNumber:showNum];  
  67.         [pNumber setPosition:CGPointMake(m_point.x - i*NUM_WIDTH, m_point.y)];  
  68.         [pNumber setAnchorPoint:CGPointMake(1, 0.5)];  
  69.         [self addChild:pNumber z:100];  
  70.           
  71.         i++;  
  72.         num = num/10;  
  73.     }  
  74. }  
  75.   
  76. /* 
  77.  * rebuildEffect 清楚每位数字 
  78.  */  
  79. -(void) clearEffect  
  80. {  
  81.     for(int i=0;i<[numArray count];i++) {  
  82.           
  83.         UINumber* pNumber = (UINumber *)[numArray objectAtIndex:i];  
  84.         [self removeChild:pNumber cleanup:YES];  
  85.     }  
  86.     [numArray removeAllObjects];  
  87. }  
  88.   
  89. -(void)dealloc  
  90. {  
  91.     [numArray release];  
  92.      [super dealloc];  
  93. }  
  94.   
  95. @end  

demo的下载地址:http://download.csdn.net/detail/toss156/4209940

你可能感兴趣的:(ios,c,image)