切割类游戏中的切割线类Version1
来源:互联网 发布:淮南阿里云大数据 编辑:程序博客网 时间:2024/04/28 07:56
第一种方案,不是很满意,因为虚线中的每个小节都是一个精灵,所以效率上有点儿偏低~
另外就是,移动的过程中,小节精灵有跳动,影响整体效果的呈现,抛弃之~
BYCutLine.h
//// BYCutLine.h// HungryBear//// Created by Bruce Yang on 12-8-26.// Copyright (c) 2012年 EricGameStudio. All rights reserved.//#import <Foundation/Foundation.h>#import "cocos2d.h"#import "SynthesizeSingleton.h"#import <vector>using namespace std;/** Added by Bruce Yang on 2012.08.26.12.12~ */@interface BYCutLine : NSObject { // 纹理对象,用于之后的销毁~ CCTexture2D* _texBar; CCTexture2D* _texSegment; // 端点精灵~ CCSprite* _spBarA; CCSprite* _spBarB; // 虚线批节点~ CCSpriteBatchNode* _batchSegment;}+(BYCutLine*) getInstance;-(BYCutLine*) addToParent:(CCNode*)nodeParent;-(void) setPointA:(CGPoint)pointA pointB:(CGPoint)pointB;-(void) disappear;@end
BYCutLine.mm
//// BYCutLine.m// HungryBear//// Created by Bruce Yang on 12-8-26.// Copyright (c) 2012年 EricGameStudio. All rights reserved.//#import "BYCutLine.h"// increase value to have less segments per rope, decrease to have more segments#define SEGMENT_LENGTH 8#define SEGMENT_GAP_LENGTH 4@implementation BYCutLineSYNTHESIZE_SINGLETON_FOR_CLASS(BYCutLine)-(id) init { if((self = [super init])) { // 1。加载纹理~ CCTextureCache* texCache = [CCTextureCache sharedTextureCache]; _texBar = [texCache addImage:@"img_cut_line_bar.png"]; _texSegment = [texCache addImage:@"img_cut_line_segment.png"]; // 2。切割虚线的精灵批节点~ int iArrSize = 32; _batchSegment = [[CCSpriteBatchNode alloc] initWithTexture:_texSegment capacity:iArrSize]; CCSprite* spSegment = nil; for(int i = 0; i < iArrSize; ++ i) { spSegment = [[CCSprite alloc] initWithTexture:_texSegment]; [spSegment setVisible:NO]; [_batchSegment addChild:spSegment]; } // 3。切割端点的精灵~ _spBarA = [[CCSprite alloc] initWithTexture:_texBar]; _spBarB = [[CCSprite alloc] initWithTexture:_texBar]; [_spBarA setVisible:NO]; [_spBarB setVisible:NO]; } return self;}-(void) removeFromParent { [_batchSegment removeFromParentAndCleanup:NO]; [_spBarA removeFromParentAndCleanup:NO]; [_spBarB removeFromParentAndCleanup:NO];}-(BYCutLine*) addToParent:(CCNode*)nodeParent { // 首先将单例对象从上一个场景移除~ [self removeFromParent]; [nodeParent addChild:_spBarA z:10]; [nodeParent addChild:_spBarB z:10]; [nodeParent addChild:_batchSegment z:10]; return self;}-(void) setPointA:(CGPoint)pointA pointB:(CGPoint)pointB { float fDistance = ccpDistance(pointA, pointB); int iPointCount = (int)(fDistance / (SEGMENT_LENGTH + SEGMENT_GAP_LENGTH) + 0.5f);CGPoint diffVector = ccpSub(pointB, pointA);float fMultiplier = fDistance / iPointCount; for(CCSprite* spSegment in [_batchSegment children]) { [spSegment setVisible:NO]; } // 第一个点和最后一个点不用安上节点精灵,因为会被端点精灵覆盖住,纯粹浪费性能~for(int i = 1; i < iPointCount - 1; i ++) {CGPoint pntTmp = ccpAdd(pointA, ccpMult(ccpNormalize(diffVector), fMultiplier*i));CCSprite* spSegment = [[_batchSegment children] objectAtIndex:i]; [spSegment setVisible:YES];[spSegment setPosition:pntTmp];} [_spBarA setVisible:YES]; [_spBarB setVisible:YES]; [_spBarA setPosition:pointA]; [_spBarB setPosition:pointB];}-(void) disappear { for(CCSprite* spSegment in [_batchSegment children]) { [spSegment setVisible:NO]; } [_spBarA setVisible:NO]; [_spBarB setVisible:NO];}-(void) dealloc { // 移除端点、虚线的精灵~ [_spBarA release]; [_spBarB release]; [_batchSegment removeAllChildrenWithCleanup:YES]; [_batchSegment release]; // 移除无用的纹理~ CCTextureCache* texCache = [CCTextureCache sharedTextureCache]; [texCache removeTexture:_texBar]; [texCache removeTexture:_texSegment]; [super dealloc];}@end
- 切割类游戏中的切割线类Version1
- 切割类游戏中的切割线类 Version2
- 图片切割工具类
- 图片切割工具类
- Android 图片切割工具类
- 文本中的单词切割
- 用线切割面
- 线切割平面问题
- 使用CImage类切割png图片
- php 翻页区间切割算法(翻页类)
- 使用CImage类切割png图片
- 关于String类的切割与整合
- 类间偏移地址以及切割,static_cast
- File类文件的切割与合并
- 车牌识别中的字符切割
- 文件切割合并器 2 切割类 Split
- 线段切割&&矩形切割
- 开发游戏开发方法一 切割图片
- Qt omapl137 移植攻略 开发板移植 移植 原创
- C# helper to dump any object to a log (zz)
- Android技巧:ListView去掉默认橙黄底色
- linux下安装jdk1.6
- swf格式文件上传
- 切割类游戏中的切割线类Version1
- MSSQL临时表与内存表的区别
- udev原理
- oracle如何查看当前数据库基本信息
- 埃拉托斯特尼筛法--查找素数
- 动态加载js 前3个是同步 最后一个是异步 不要被文章骗了~
- 微信架构的启示
- java异常
- c解毒之c设计中的谬误与恶习