`

Cocos2D Coloring Sprites

 
阅读更多
#import "cocos2d.h"
#import "Recipe.h"

enum {
	TAG_FADE_TO_BLACK = 0,
	TAG_FADE_TO_WHITE = 1,
	TAG_FADE_SPRITE = 2,
	TAG_MOUNTAIN_BG = 3,
	TAG_SUN_BG = 4,
	TAG_GOOD_SAMURAI = 5,
	TAG_BAD_SAMURAI = 6,
	TAG_GROUND_GRADIENT = 7,
	TAG_RED_GRADIENT = 8
};

//Interface
@interface Ch1_ColoringSprites : Recipe
{
}

-(CCLayer*) runRecipe;
-(void) initButtons;
-(void) fadeToBlackCallback:(id)sender;
-(void) fadeToWhiteCallback:(id)sender;
-(void) drawColoredSpriteAt:(CGPoint)position withRect:(CGRect)rect withColor:(ccColor3B)color withZ:(float)z;
-(void) glowAt:(CGPoint)position withScale:(CGSize)size withColor:(ccColor3B)color withRotation:(float)rotation withSprite:(CCSprite*)sprite;

@end



//Implementation
@implementation Ch1_ColoringSprites

-(CCLayer*) runRecipe {
	[self initButtons];
		
	//The Fade Scene Sprite
	CCSprite *fadeSprite = [CCSprite spriteWithFile:@"blank.png"];
	[fadeSprite setOpacity:0];
	[fadeSprite setPosition:ccp(240,160)];
	[fadeSprite setTextureRect:CGRectMake(0,0,480,320)];
	[self addChild:fadeSprite z:3 tag:TAG_FADE_SPRITE];
	
	//Draw the sky using blank.png
	[self drawColoredSpriteAt:ccp(240,190) withRect:CGRectMake(0,0,480,260) withColor:ccc3(150,200,200) withZ:0];
	
	//Draw the sun
	CCSprite *sun = [CCSprite spriteWithFile:@"fire.png"];
	[sun setPosition:ccp(50,230)];
	[sun setScale:3.0f];
	[sun setColor:ccc3(255,255,0)];
	[self addChild:sun z:0 tag:TAG_SUN_BG];	
	
	//Draw some mountains in the background
	CCSprite *mountains = [CCSprite spriteWithFile:@"mountains.png"];
	[mountains setPosition:ccp(250,200)];
	[mountains setScale:0.6f];
	[self addChild:mountains z:0 tag:TAG_MOUNTAIN_BG];
	
	//Add a gradient below the mountains
	CCLayerGradient *groundGradient = [CCLayerGradient layerWithColor:ccc4(61,33,62,255) fadingTo:ccc4(65,89,54,255) alongVector:ccp(0,-1)];
	[groundGradient setContentSize:CGSizeMake(480,100)];
	[groundGradient setPosition:ccp(0,50)];
	[self addChild:groundGradient z:0 tag:TAG_GROUND_GRADIENT];
	
	//Add a sinister red glow gradient behind the evil samurai
	CCLayerGradient *redGradient = [CCLayerGradient layerWithColor:ccc4(0,0,0,0) fadingTo:ccc4(255,0,0,100) alongVector:ccp(1,0)];
	[redGradient setContentSize:CGSizeMake(200,200)];
	[redGradient setPosition:ccp(280,60)];
	[self addChild:redGradient z:2 tag:TAG_RED_GRADIENT];
	
	//Draw dramatic movie bars
	[self drawColoredSpriteAt:ccp(240,290) withRect:CGRectMake(0,0,480,60) withColor:ccc3(0,0,0) withZ:2];
	[self drawColoredSpriteAt:ccp(240,30) withRect:CGRectMake(0,0,480,60) withColor:ccc3(0,0,0) withZ:2];

	//Draw the good samurai
	CCSprite *goodSamurai = [CCSprite spriteWithFile:@"samurai_good.png"];
	goodSamurai.anchorPoint = ccp(0.5f,0);
	[goodSamurai setPosition:ccp(100,70)];
	[goodSamurai setScale:0.5f];
	[self addChild:goodSamurai z:1 tag:TAG_GOOD_SAMURAI];
	
	//Draw the evil samurai
	CCSprite *evilSamurai = [CCSprite spriteWithFile:@"samurai_evil.png"];
	evilSamurai.anchorPoint = ccp(0.5f,0);
	[evilSamurai setPosition:ccp(370,70)];
	[evilSamurai setFlipX:YES];
	[evilSamurai setScale:0.5f];
	[self addChild:evilSamurai z:1 tag:TAG_BAD_SAMURAI];
	
	// Make the swords glow
	[self glowAt:ccp(230,280) withScale:CGSizeMake(3.0f, 11.0f) withColor:ccc3(0,230,255) withRotation:45.0f withSprite:goodSamurai];
	[self glowAt:ccp(70,280) withScale:CGSizeMake(3.0f, 11.0f) withColor:ccc3(255,200,2) withRotation:-45.0f withSprite:evilSamurai];
	
	return self;	
}

-(void) initButtons {
	[CCMenuItemFont setFontSize:16];

	//'Fade to Black' button
	CCMenuItemFont* fadeToBlack = [CCMenuItemFont itemFromString:@"FADE TO BLACK" target:self selector:@selector(fadeToBlackCallback:)];
	CCMenu *fadeToBlackMenu = [CCMenu menuWithItems:fadeToBlack, nil];
    fadeToBlackMenu.position = ccp( 180 , 20 );
    [self addChild:fadeToBlackMenu z:4 tag:TAG_FADE_TO_BLACK];
	
	//'Fade to White' button
	CCMenuItemFont* fadeToWhite = [CCMenuItemFont itemFromString:@"FADE TO WHITE" target:self selector:@selector(fadeToWhiteCallback:)];
	CCMenu *fadeToWhiteMenu = [CCMenu menuWithItems:fadeToWhite, nil];
    fadeToWhiteMenu.position = ccp( 300 , 20 );
    [self addChild:fadeToWhiteMenu z:4 tag:TAG_FADE_TO_WHITE];	
}

/* Fade the scene to black */
-(void) fadeToBlackCallback:(id)sender {
	CCSprite *fadeSprite = [self getChildByTag:TAG_FADE_SPRITE];
	[fadeSprite stopAllActions];
	[fadeSprite setColor:ccc3(0,0,0)];
	[fadeSprite setOpacity:0.0f];
	[fadeSprite runAction: 
		[CCSequence actions:[CCFadeIn actionWithDuration:2.0f], [CCFadeOut actionWithDuration:2.0f], nil] ];	
}

/* Fade the scene to white */
-(void) fadeToWhiteCallback:(id)sender {
	CCSprite *fadeSprite = [self getChildByTag:TAG_FADE_SPRITE];
	[fadeSprite stopAllActions];
	[fadeSprite setColor:ccc3(255,255,255)];
	[fadeSprite setOpacity:0.0f];
	[fadeSprite runAction: 
		[CCSequence actions:[CCFadeIn actionWithDuration:2.0f], [CCFadeOut actionWithDuration:2.0f], nil] ];	
}

/* Draw a colored sprite */
-(void) drawColoredSpriteAt:(CGPoint)position withRect:(CGRect)rect withColor:(ccColor3B)color withZ:(float)z {
	CCSprite *sprite = [CCSprite spriteWithFile:@"blank.png"];
	[sprite setPosition:position];
	[sprite setTextureRect:rect];
	[sprite setColor:color];
	[self addChild:sprite];
	
	//Set Z Order
	[self reorderChild:sprite z:z];
}

/* Create a glow effect */
-(void) glowAt:(CGPoint)position withScale:(CGSize)size withColor:(ccColor3B)color withRotation:(float)rotation withSprite:(CCSprite*)sprite {
	CCSprite *glowSprite = [CCSprite spriteWithFile:@"fire.png"];
	[glowSprite setColor:color];
	[glowSprite setPosition:position];
	[glowSprite setRotation:rotation];
	[glowSprite setBlendFunc: (ccBlendFunc) { GL_ONE, GL_ONE }];
	[glowSprite runAction: [CCRepeatForever actionWithAction:
		[CCSequence actions:[CCScaleTo actionWithDuration:0.9f scaleX:size.width scaleY:size.height], [CCScaleTo actionWithDuration:0.9f scaleX:size.width*0.75f scaleY:size.height*0.75f], nil] ] ];	
	[glowSprite runAction: [CCRepeatForever actionWithAction:
		[CCSequence actions:[CCFadeTo actionWithDuration:0.9f opacity:150], [CCFadeTo actionWithDuration:0.9f opacity:255], nil] ] ];	
		
	[sprite addChild:glowSprite];
}

@end
分享到:
评论

相关推荐

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-x-cocos2d-x-2.2.2.zip

    这个压缩包“cocos2d-x-cocos2d-x-2.2.2.zip”包含了cocos2d-x 的2.2.2版本,该版本是cocos2d-x发展中的一个重要里程碑,它提供了许多改进和优化,使得开发者能够更加高效地创建2D游戏和应用。 在cocos2d-x 2.2.2中...

    cocos2d-android.jar.zip_CoCos2d_android jar_android game_cocos2d

    cocos2d-android游戏引擎是著名游戏引擎cocos2d游戏引擎的Android版。cocos2d-android游戏引擎性能优越、易学、可以进行纯java编程、具有极高的研 究价值、大大的降低了开发者的学习成本。您只需要一台普通配置的...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    《cocos2d-x 3.8:经典游戏引擎源码解析》 cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...

    Cocos2d-JS游戏开发

    Cocos2d-JS是一款强大的2D游戏开发框架,它结合了JavaScript的灵活性与Cocos2d-x的高效性能,让开发者能够轻松地创建跨平台的游戏。本篇将深入探讨Cocos2d-JS的游戏开发知识,从基础到进阶,帮助你掌握这一利器。 ...

    cocos2d-x windows vs2010配置

    "cocos2d-x windows vs2010 配置详解" 本文将详细介绍如何在 Windows 环境下使用 Visual Studio 2010 配置 Cocos2d-x 游戏引擎。Cocos2d-x 是一个跨平台的游戏引擎,可以在多种平台上运行,包括 Windows、Mac OS X...

    cocos2d-x json字符串与cocos2d::Value转换工具

    该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...

    Cocos2d-x实战C++卷关东升著完整版pdf

    《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...

    Cocos2d-x实战:C++卷(2版)源代码

    《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...

    cocos2d-x_v3.16安装及环境变量配置文档

    cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...

    cocos2d-android jar包全套.zip

    Cocos2d是一款开源的游戏开发框架,被广泛用于创建2D游戏、演示程序和其他互动内容。在Android平台上,Cocos2d-x是一个基于C++的版本,提供了原生的编程接口,同时也支持Java API,方便Android开发者使用。"cocos2d-...

    cocos2d-x 3.0

    《cocos2d-x 3.0:游戏开发中的角色移动技术详解》 在游戏开发领域,cocos2d-x是一款广泛使用的开源2D游戏引擎,尤其在移动平台上的应用非常广泛。cocos2d-x 3.0版本带来了许多性能优化和新特性,使得开发者能够更...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    标题中提到了"Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整",这里面包含了几个关键知识点: 1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、...

    cocos2d-x-3.1.zip

    3. **渲染引擎**:Cocos2d-x 3.1包含了强大的2D渲染引擎,能够处理精灵(Sprites)、纹理(Textures)、动画(Animations)、粒子系统(Particle Systems)等图形元素。 4. **场景管理**:使用Scene类来管理游戏的...

    cocos2d-x-3.13.1 spine3.6.zip

    《Cocos2d-x 3.13.1与Spine 3.6集成详解》 Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,同时支持Lua和JavaScript等多种脚本语言,为开发者提供了高效、跨平台的游戏开发解决方案。在3.13.1版本中,...

    Cocos2d-x实战 JS卷

    《Cocos2d-x实战 JS卷》是一本深入探讨Cocos2d-x游戏开发的专著,主要聚焦于使用JavaScript语言进行游戏编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备和桌面平台,支持iOS、Android、Windows等多...

    Cocos2d-x 闪电特效

    Cocos2d-x是一款流行的开源游戏开发框架,它基于C++,并利用OpenGL进行图形渲染。在游戏开发中,特效的实现是至关重要的,能够极大地提升游戏的视觉体验和玩家的沉浸感。"Cocos2d-x 闪电特效"正是这样一个专题,它...

    cocos2d-iphone~cocos2d-html5移植之旅

    ### cocos2d-iphone至cocos2d-html5移植之旅:深入解析与实践指南 #### 引言 在数字化时代,跨平台游戏开发成为了一种趋势,尤其在移动设备和网页端之间的转换变得日益频繁。《cocos2d-iphone至cocos2d-html5移植...

Global site tag (gtag.js) - Google Analytics