COCOS2D中对精灵的操作、对图片的各种操作
ios游戏开发--Cocos2d-X中的动作,特效与动画

MIDP移动互联网创新工场
2015-4-15
7
扭曲动作
Void ActionSkew::onEnter(){ ActionsDemo::onEnter();centerSprites(3); CCActionlnterval*actionTo=CCSkewTo::create(2,37.2f,-37.2f); CCActionlnterval*actionToBack=CCSkewTo::create(2,0,0); CCActionlnterval*actionBy=CCSkewBy::create(2,O.Of,-90.Of); CCActionlnterval*actionBy2=CCSkewBy::create(2,45.Of,45.0f); CCActionlnterval*actionByBack=actionBy->reverse(); m_tamara->runAction(CCSequence::create(actionTo,actionToBack,NULL)); M_grossini->runAction(CCSequence::create(actionBy,actionByBack,NULL)); m_kathia->runAction(CCSequence::create(actionBy2,actionBy2->reverse(),NULL)); }
MIDP移动互联网创新工cos2D-x的动作类CCAction并不是一 个在屏幕中显示的对象,动作必须要依托 于CCNode类及它的子类的实例才能发挥 作用。 C0C0S2D-x的动作包括位置移动、跳跃, 甚至是对象颜色的渐变。 CCAction类继承于对象类CCObject,有 三个子类:有限时间动作、跟随、移动速 度,其中有限时间动作分为瞬时动作 (CCActionlnstant)和延时动作 (CCActionlnterval)。
cocos2d的常用功能与常用控件

CCDirector,主要职责是管理场景和切换场景,游戏暂停等.另外他还负责初始化openes相关的一东西.是一个单例类常用函数runWithScene 运行场景replaceScene 替换场景getRunningScene 获得当前场景getAnimationInterval 获取帧间距setAnimationInterval 设置帧间距isDisplayFPS 是否显示帧率setDisplayFPS 设置是否显示帧率,可以再调试阶段使用getWinSize 获取窗口大小getWinSizeInPixels 获取窗口像素大小drawScene 绘制场景所有元素CCScene,场景类,游戏场景一般是指在某个时刻能独立运行的部分,包括可见的怪物,地形和不可见的逻辑脚本等.例如一个游戏的一个特定关卡,游戏菜单,过场动画等都是一个独立的场景.cocos2d中的场景又由不同的层(CCLayer)组成. CCScene是CCNode的子类, 主要作用是一个容器CCNode,节点类,是游戏中最重要,最基础的对象,在cocos2dx中,任何可见的或不可以的游戏逻辑对象都是一个节点,节点有以下特点:a) 是一个容器,可以包含任意多个其它节点.b) 可以执行一个行为(CCAction)c) 可以执行一定时的任务回调d) 拥有坐标变换(transform)信息,如postion,scale,rotation等e) 由于一个节点可以添加任意个子节点,所有的节点组成一个树状结构,因此父节点的坐标变换会影响子节点在世界坐标系中的坐标,一个节点只能拥有一个父节点常用函数:getScale 获取缩放setScale 设置缩放addChild 添加子节点removeChild 删除子节点removeFromParentAndCleanup 从父节点移除,同时移除子节点removeChildByTag 移除标记节点removeAllChildrenWithCleanup 移除所有子节点getChildByTag 获得标记节点runAction 执行动作stopAction 停止动作stopAllActions 停止所有动作scheduleUpdate 执行update函数,需要重载unscheduleUpdate 停止执行update函数schedule(SEL_SCHEDULE selector); 执行回调unschedule(SEL_SCHEDULE selector); 停止执行回调CCLayer,层类,继承自CCNode类,主要是起到容器和处理案件消息的作用registerWithTouchDispatcher 注册事件监听ccTouchBegan 按下按键处理回调,需重载ccTouchesMoved 移动按键处理回调,需重载ccTouchesEnded 弹起按键处理回调,需重载layerWithColorWidthHeight 用颜色初始化函数CCMenu 菜单类,主要用于添加按钮,处理案件消息。
游戏开发中的Cocos2dx引擎教程及使用方法

游戏开发中的Cocos2dx引擎教程及使用方法Cocos2d-x引擎是一款流行的开源游戏开发引擎,它基于C++编写,并支持多平台游戏开发。
它拥有强大的功能和灵活的架构,使得游戏开发者可以方便地创建高质量的游戏。
本文将介绍Cocos2d-x引擎的教程和使用方法,以帮助开发者快速上手并开发出优秀的游戏作品。
一、Cocos2d-x引擎的介绍Cocos2d-x引擎是Cocos2d家族的一员,它是Cocos2d开源项目的C++版本。
与其他Cocos2d引擎相比,Cocos2d-x引擎具有较高的性能和跨平台的优势。
它可以在多个平台上运行,包括iOS、Android、Windows、Mac OS等,并且支持多种编程语言,如C++、JavaScript、Lua等。
Cocos2d-x引擎提供了丰富的游戏开发工具和功能,包括图形渲染、动画、音频、物理引擎等,让开发者可以轻松实现各种游戏场景和效果。
二、Cocos2d-x引擎的安装和配置要开始使用Cocos2d-x引擎,首先需要安装和配置相应的开发环境。
以下是一些基本的步骤:1. 下载Cocos2d-x引擎:可以从Cocos2d-x官方网站下载最新版本的引擎。
2. 解压引擎文件:解压下载的引擎文件到本地目录。
3. 配置环境变量:将Cocos2d-x引擎路径加入到系统的环境变量中,以便在命令行中运行引擎命令。
4. 创建新项目:使用引擎提供的命令行工具创建一个新的项目。
5. 编译和运行:通过命令行进入项目目录,执行相应的命令进行编译和运行。
三、Cocos2d-x引擎的基本概念和架构Cocos2d-x引擎以场景为基本单位进行游戏开发,每个场景由层和节点组成。
层是场景中的一个可见区域,用于显示游戏对象和处理用户输入。
节点是层的基本元素,它可以是精灵、标签、按钮等。
通过创建和组合节点,开发者可以实现游戏中的各种功能和效果。
除了场景、层和节点,Cocos2d-x引擎还提供了许多其他的功能模块,如动画、音频、物理引擎等,开发者可以根据需要选择和使用这些功能模块,以实现游戏中的各种特效和交互。
龙图教育:COCOS2D菜单介绍及使用方法

COCOS2D菜单介绍及使用方法本文将介绍游戏制作中不可缺少的一项功能-游戏菜单,在cocos2d游戏制作中,菜单的制作方法有很多,下面将逐一介绍下菜单的制作方法(使用CCMenu类来生成菜单。
CCMenu只支持 CCMenuItem节点作为它的子节点。
):一.文字菜单-(id)init{self =[super initWithColor:ccc4(255, 0, 255, 255)]; if(self){CGSize size =[[CCDirector sharedDire ctor]winSize];//获得OpenGL View的尺寸,虽然这里是winSize,其实并不一定是整个windows的size [CCMenuItemFont setFontName:@"Marker Felt"]; //设置菜单字体[CCMenuItemFont setFontS ize:32]; //设置菜单字体大小//菜单项*文字标签菜单*并指定调用方法CCMenuItemFont * menuOne =[CCMenuItemFont itemFromString:@"start Game"target:selfselector:@selector(startGame)]; CCMenuItemFont *menuThr =[CCMenuItemFont itemFro mString:@"return Game"target:self selector:@selector(returnGame)]; CCMenuItemFont *menuT wo =[CCMenuItemFont itemFromString:@"end Game"target:self selector:@selector(endGame)];CCMenu *menu =[CCMenu menuWithItems:menuOne,menuThr,menuTwo, nil]; //用菜单项生成菜单menu.position =ccp(size.width/2, size.height/2); //坐标[menu alignItemsVerticallyWithPadding:2 0]; //排列对齐 *这个很重要*如果没有菜单将重叠在一起[self addChild:menu z:0tag:2]; //加入到层}return self; }-(void)startGame {CCLOG(@"开始游戏"); }-(void)returnGame{CCLOG(@"返回游戏"); }-(void)endGame {CCLOG(@"结束游戏"); }基于CCMenuItemFont,用于显示一条文字。
龙图教育:cocos2dx之精灵类Sprite使用方法

cocos2dx之精灵类Sprite使用方法精灵类精灵类Sprite 是一张二维图片对象,可以使用一张图片或者一张图片的一块矩形部分来定义。
精灵对象可以移动,旋转,缩放,执行动画,并接受其他转换。
Cocos2dx的Sprite 由Texture ,Frame 和Animation 组成,由OpenES负责渲染。
一般使用Texture2D 加载图片,使用Texture2D 生成对应的SpriteFrame(精灵帧),SpriteFrame 添加到Animation 生成动画数据,用Animation 生成Animate (就是最终的动画动作),最后用Sprite 执行这个动作。
我们在游戏中,比如战场中的英雄、怪物等这些都是Sprite ,对于Sprite 的使用,直接关系到你对游戏的编写和控制。
好吧,言重了,反正是比较重要的东西。
理解Sprite 的不同创建与加载方式,对游戏的性能都有很大的关系。
废话不说,开始学习吧。
Sprite不管是使用Texture ,Frame ,还是Animation ,我们最终得到的是Sprite 对象,先来看看创建Sprite 的函数。
/*** 不适用任何纹理来创建一个空的精灵对象。
我们可以在随后调用setTexture设置精灵的纹理* @return 返回一个autoreleased的精灵对象*/static Sprite * create ( ) ;/*** 通过一个image文件名来创建一个精灵对象* 创建精灵完成以后,精灵的大小就是这个image的大小,同时offset是(0, 0)* @param filename image文件的路径* @return 返回一个autoreleased的精灵对象static Sprite * create ( const std :: string & filename ) ;/*** 通过一个image文件来创建一个精灵对象,并指定这个精灵在image文件中的位置和大小* 注:这里的rect的坐标系统是UI坐标系统,从左上角开始计算** @param filename image文件的路径* @param rect 精灵的位置和大小* @return 返回一个autoreleased的精灵对象*/static Sprite * create ( const std :: string & filename , const Re ct & rect ) ;/*** 通过一个Texture2D对象来创建精灵对象* 创建以后,这个精灵对象的大小就是这个纹理的大小,精灵的offset是(0, 0)** @param texture 一个Texture2D对象指针* @return 返回一个autoreleased的精灵对象*/static Sprite * createWithTexture ( Texture2D * texture ) ;/*** Creates a sprite with a texture and a rect.* 通过一个Texture2D对象来创建精灵对象,并指定这个精灵的位置和大小* @param texture 指向Texture2D对象的指针,这个指针可以进行复用* @param rect 精灵的位置和大小* @param rotated 是否需要旋转这个精灵,逆时针旋转90°* @return 返回一个autoreleased的精灵对象*/static Sprite * createWithTexture ( Texture2D * texture , const Rect & rect , boolrotated = false ) ;/*** 通过精灵帧来创建一个精灵** @param spriteFrame 一个精灵帧的指针* @return 返回一个autoreleased的精灵对象*/static Sprite * createWithSpriteFrame ( SpriteFrame * spriteFrame ) ;/*** 通过一个精灵帧名字来创建一个精灵* 内部实现中,会通过spriteFrameName参数从SpriteFrameCache中获取SpriteFrame对象* 如果在SpriteFrameCache中没有对应的SpriteFrame, 会引发一个异常** @param spriteFrameName 精灵帧的名字* @return 返回一个autoreleased的精灵对象*/static Sprite * createWithSpriteFrameName ( const std :: string & spr iteFrameName );上面这些都是创建Sprite 对象的函数,我们在实际工作中也就是通过这些函数来完成Sprite 的创建。
html5游戏开发—Cocos2d-x自定义按钮类控制精灵攻击--之游戏开发《赵云要格斗》(2)

游戏发开引擎—Cocos2d-x 自定义按钮类控制精灵攻击--之游戏开发《赵云要格斗》(2)本文关键词:游戏引擎,游戏开发引擎,cocos 引擎html5游戏开发上一讲中我们学习了如何实现虚拟摇杆控制精灵上下左右运动。
本篇要讲讲怎么自定义按钮类,并通过这个按钮类的对像来控制精灵的攻击。
精灵的攻击也是一个动画,只不过,这个动画只播放一次,相当于在界面上加一个按钮,然后你点一次按钮,精灵就播放一次动画。
一、自定义按钮类按钮可以用Cocos2d-x 自带的,想着方便一点,我就自己封装了一个按钮类ControlButton ,在里面添加一个1 2 //按钮控件变量CCControlButton* controlBtn;并对其添加相应的回调事件即可实现我们自己封装的按钮类。
1 2 3 #ifndef __ControlButton_H__#define __ControlButton_H__#include "cocos2d.h"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT;//用于标识当前按钮的状态typedef enum{touch_begin,touch_down,touch_up,}tagForTouch;class ControlButton :public CCNode{public:ControlButton();~ControlButton();CREATE_FUNC(ControlButton);//创建按钮,其中name_png 为按钮的背景图片,button_title 为按钮图片上要显示的文字,num 为文字的透明度0-100,0为透明void CreateButton(const char* name_png,const char* button_title="0",unsigned int num=0); //绑写按钮事件void BindButtonEven();/* 当鼠标处于按下并曾经点中按钮时,则触发一次 */void touchDownAction(CCObject* pSender, CCControlEvent event);26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */void touchDragEnter(CCObject* pSender, CCControlEvent event);/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */void touchDragExit(CCObject* pSender, CCControlEvent event);/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */void touchDragInside(CCObject* pSender, CCControlEvent event);/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */void touchDragOutside(CCObject* pSender, CCControlEvent event);/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */void touchUpInside(CCObject* pSender, CCControlEvent event);/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */void touchUpOutside(CCObject* pSender, CCControlEvent event);/* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */void touchCancel(CCObject* pSender, CCControlEvent event);//是否按下按钮bool isTouch;private://按钮控件变量CCControlButton* controlBtn;};#endif ControlButton.cpp文件1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1#include "ControlButton.h"ControlButton::ControlButton():controlBtn(NULL),isTouch(false){}ControlButton::~ControlButton(){}void ControlButton::CreateButton(const char* name_png,const char* button_title,unsigned int num) {//得到按钮图片的大小CCScale9Sprite* btn = CCScale9Sprite::create(name_png);CCLOG("%f",btn->getContentSize().width);CCLOG("%f",btn->getContentSize().height);int png_height=static_cast<int>(btn->getContentSize().height);int png_width=static_cast<int>( btn->getContentSize().width);btn->release();4 15 16 17 18 19 2 0 2 1 2 2 2 3 2 4 2 //要显示的图片大小CCRect rect = CCRectMake(0,0,png_width,png_height); //图片的大小CCRect rectInsets = CCRectMake(1,1,1,1); //left,right,width,height//按钮标题,Marker Felt为字体类型,png_height为字体高度CCLabelTTF *title = CCLabelTTF::create(button_title, "Marker Felt",png_height-10); title->setOpacity(num);//设置可见度//正常状态下的按钮图片CCScale9Sprite *btnNormal = CCScale9Sprite::create(name_png,rect,rectInsets);//创建按钮controlBtn = CCControlButton::create(title,btnNormal);this->addChild(controlBtn);//绑定事件BindButtonEven();}void ControlButton::BindButtonEven(){if(!controlBtn)5 26 27 28 29 3 0 3 1 3 2 3 3 3 4 3 5 3 return;controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDo wnAction),CCControlEventTouchDown);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDra gEnter),CCControlEventTouchDragEnter);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDra gExit),CCControlEventTouchDragExit);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDra gInside),CCControlEventTouchDragInside);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDra gOutside),CCControlEventTouchDragOutside);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchUpI nside),CCControlEventTouchUpInside);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchUp Outside),CCControlEventTouchUpOutside);controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchCa ncel),CCControlEventTouchCancel);}/* 当鼠标处于按下并曾经点中按钮时,则触发一次 */void ControlButton::touchDownAction(CCObject* pSender, CCControlEvent event){isTouch=true;63 7 3 8 3 94 0 4 1 4 2 4 3 4 4 45 46 4}/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */void ControlButton::touchDragEnter(CCObject* pSender, CCControlEvent event){}/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */void ControlButton::touchDragExit(CCObject* pSender, CCControlEvent event){}/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */ void ControlButton::touchDragInside(CCObject* pSender, CCControlEvent event){}/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */ void ControlButton::touchDragOutside(CCObject* pSender, CCControlEvent event){}7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */void ControlButton::touchUpInside(CCObject* pSender, CCControlEvent event){isTouch=false;}/* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */void ControlButton::touchUpOutside(CCObject* pSender, CCControlEvent event){}/* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */ void ControlButton::touchCancel(CCObject* pSender, CCControlEvent event){}5 96 0 6 1 6 2 6 3 6 4 6 5 6 6 67 68 67 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 88 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9929394使用方法:在要用到的地方加头文件1 #include "ControlButton.h"定义成员变量:1 ControlButton* btn;//按钮控件变量在bool HelloWorld::init()函数里添加:1 2 3 4 5 //添加攻击按钮btn=ControlButton::create();btn->CreateButton("bt.png");btn->setPosition(ccp(visibleSize.width-50,50));this->addChild(btn,2);我们来看看效果:二、精灵攻击动画和结束判断按钮有了,接下来要想想怎么来控制精灵攻击的动画呢?精灵攻击的动画应该是我们按下按钮,他就播放一次动画,这里为小心,如果我们连着按按钮很快呢?这时精灵就会动得很不真实,我们应该每次按下前要先判断上次的动画是否结束,如果结束,而且又按下按钮,那么就就放攻击的动画,如果上次的动画还没结束,那就不再播放攻击的动画。
cocos中 stopallaction

cocos中stopAllAction一、概述在使用Cocos2d-x引擎进行游戏开发的过程中,我们经常需要对游戏中的角色、精灵等进行动画控制。
Cocos2d-x提供了丰富的动画功能,其中stopAllAction是一个常用的方法,用于停止所有正在运行的动画。
二、stopAllAction方法的作用stopAllAction方法用于停止节点上所有正在运行的动画动作。
当我们需要在游戏中切换场景、暂停游戏或者重新开始游戏时,经常需要停止当前节点上的所有动画,以免出现不必要的冲突和错误。
三、使用方法使用stopAllAction方法非常简单,只需要在需要停止动画的节点上调用该方法即可。
下面是使用stopAllAction方法的示例代码:node->stopAllActions();四、stopAllAction的原理stopAllAction方法的原理是遍历当前节点上的所有动作,然后调用每个动作的stop方法来停止动画。
Cocos2d-x的动作系统是基于Action类的,每个动作都继承自Action类,并实现了其抽象方法。
stop方法是Action类中的一个虚函数,用于停止当前动作的执行。
五、stopAllAction的注意事项在使用stopAllAction方法时,需要注意以下几点:1.stopAllAction方法会停止当前节点上的所有动画,包括通过runAction方法添加的动画和通过schedule方法添加的定时器动画。
2.stopAllAction方法只会停止当前节点上的动画,不会影响子节点上的动画。
如果需要停止子节点上的动画,需要分别调用每个子节点的stopAllActions方法。
3.stopAllAction方法会停止动画的执行,但不会恢复到动画的初始状态。
如果需要恢复到动画的初始状态,可以通过重新设置节点的位置、缩放、旋转等属性来实现。
六、示例场景下面是一个使用stopAllAction方法的示例场景,以帮助读者更好地理解该方法的使用:1. 场景描述假设我们正在开发一个打飞机游戏,游戏中有一个飞机精灵,玩家可以通过手指滑动控制飞机的移动。
龙图教育:Cocos2d-x3.0新的触摸机制介绍

Cocos2d-x3.0新的触摸机制介绍我们将从源码级来分析cocos2d-x 3.0新的触摸机制。
运行引擎本身的TestCpp之后,我们可以看到Touchable Sprite Test,如下图,我们将从这里开始分析。
这个例子实现在一个界面中添加三个按钮,三个按钮互相遮挡,并且能够触发触摸事件。
1. 创建三个精灵,作为三个按钮的显示图片[cpp]1.Point origin = Director::getInstance()->getVisibleOrigin();2.Size size = Director::getInstance()->getVisibleSize();3.4.auto sprite1 = Sprite::create("Images/CyanSquare.png");5.sprite1->setPosition(origin+Point(size.width/2, size.height/2) + Point(-80, 80));6.addChild(sprite1, 10);7.8.auto sprite2 = Sprite::create("Images/MagentaSquare.png");9.sprite2->setPosition(origin+Point(size.width/2, size.height/2));10.a ddChild(sprite2, 20);11.a uto sprite3 = Sprite::create("Images/YellowSquare.png");12.s prite3->setPosition(Point(0, 0));13.s prite2->addChild(sprite3, 1);2. 创建一个单点触摸事件监听器,在监听器中完成逻辑处理[cpp]1.// 创建一个事件监听器 OneByOne 为单点触摸2.auto listener1 = EventListenerTouchOneByOne::create();3.// 设置是否吞没事件,在 onTouchBegan 方法返回 true 时吞没4.listener1->setSwallowTouches(true);5.6.// 使用 lambda 实现 onTouchBegan 事件回调函数7.listener1->onTouchBegan = [](Touch* touch, Event* event){8.// 获取事件所绑定的 target9. auto target = static_cast<Sprite*>(event->getCurrentTarget());10.11.// 获取当前点击点所在相对按钮的位置坐标12. Point locationInNode = target->convertToNodeSpace(touch->getLocation());13. Size s = target->getContentSize();14. Rect rect = Rect(0, 0, s.width, s.height);15.16.// 点击范围判断检测17.if (rect.containsPoint(locationInNode))18. {19. log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);20. target->setOpacity(180);21.return true;22. }23.return false;24.};25.26.// 触摸移动时触发27.l istener1->onTouchMoved = [](Touch* touch, Event* event){28. auto target = static_cast<Sprite*>(event->getCurrentTarget());29.// 移动当前按钮精灵的坐标位置30. target->setPosition(target->getPosition() + touch->getDelta());31.};32.33.// 点击事件结束处理34.l istener1->onTouchEnded = [=](Touch* touch, Event* event){35. auto target = static_cast<Sprite*>(event->getCurrentTarget());36. log("sprite onTouchesEnded.. ");37. target->setOpacity(255);38.// 重新设置 ZOrder,显示的前后顺序将会改变39.if (target == sprite2)40. {41. sprite1->setZOrder(100);42. }43.else if(target == sprite1)44. {45. sprite1->setZOrder(0);46. }47.};3. 添加事件监听器到事件分发器[cpp]1.// 添加监听器2._eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite1);3._eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite2);4._eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite3);_eventDispatcher是Node的属性,通过它管理当前节点(如场景、层、精灵等)的所有事件分发情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cocos2d中关于精灵的各种操作,仅供参考。
内容简要:
1、初始化
2、创建无图的精灵
3、设置精灵贴图大小
4、添加入层中
5、对精灵进行缩放
6、对精灵款或高进行缩放
7、旋转精灵
8、设置精灵透明度9、精灵的镜像反转10、设置精灵的颜色
11、得到图的宽高 12、按照像素设定图片大小13、在原有的基础上加xy 的坐标
14、设置图片锚点15、从新排列z轴顺序 16、更换精灵贴图
17、设置可视区域 18、贴图无锯齿
//初始化
CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];
//创建无图的精灵
CCSprite*sprite2 =[CCSprite node];
//设置精灵贴图大小
sprite2.textureRect=CGRectMake(0, 0, 20, 20);//设置其为宽20,高20. //添加入层中
[self addChild:sprite z:2]; //将精灵加入层中设置其z轴为2
//对精灵进行缩放
sprite.scale=2;//放大2倍
//对精灵款或高进行缩放
sprite.scaleX = 2;//宽放大2倍
sprite.scaleY = 2;//高放大2倍
//旋转精灵
sprite.rotation=90;//旋转90度
//设置精灵透明度
sprite.opacity=255;//设置透明度为完全不透明(范围0~255)
//定义精灵位置
sprite.position=ccp(100,100);//设置精灵中心点坐标是x=100,y=100
//精灵的镜像反转
[sprite setFlipX:YES];//X轴镜像反转
[sprite setFlipY:YES];//Y轴镜像反转
//设置精灵的颜色
[sprite setColor:ccc3(255, 0, 0)];//设置颜色为红色
//得到图的宽高
float contentSize = sprite .contentSize.width //得到图片的宽高//按照像素设定图片大小
sprite.scaleX=(20)/contentSize; //按照像素定制图片宽高
//在原有的基础上加xy的坐标
sprite.position = ccpAdd(sprite.position,ccp(20,20));//在原有坐标的基础上加减坐标
//设置图片锚点
[sprite setAnchorPoint:ccp(0.5,0.5) ];//设置图片的锚点
//从新排列z轴顺序
[self reorderChild:sprite z:1];//从新排列z轴顺序
//更换精灵贴图
CCTexture2D * test=[[CCTextureCache sharedTextureCache] addImage: @"test.png"];//新建贴图
[sprite setTexture:test];
//更换精灵贴图,加载帧缓存,这个test.plist保存了fram这张图[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"test.plist"];
CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"fram.png"];
[sprite2 setDisplayFrame:frame];
//设置可视区域
CCSprite * sprite3 =[CCSprite spriteWithFile:@"icon.png" rect:CGRectMake(0, 0, 20,20)];//创建时设置
[sprite3 setTextureRect:CGRectMake(10, 10, 30, 30)];//创建后设置
//贴图无锯齿
[sprite3 .texture setAliasTexParameters];
为上发的v搞不好广泛。