cocos2d-x初探学习笔记(3)--动作(CCAction)

合集下载

cocos2d-x学习笔记-触屏事件详解

cocos2d-x学习笔记-触屏事件详解

游戏跟视频最大的区别就是互动,玩家可以操控游戏中的角色,现在的移动设备几乎人手一台,基本上全部都是基于触屏操作的,今天就来学习一下cocos2d-x是怎么实现对触屏操作的处理的。

1.首先来了解一下相关的几个类、处理触屏事件时操作和执行的流程CCTouch:它封装了触摸点,可以通过locationInView函数返回一个CCPoint。

CCTouchDelegate:它是触摸事件委托,就是系统捕捉到触摸事件后交由它或者它的子类处理,所以我们在处理触屏事件时,必须得继承它。

它封装了下面这些处理触屏事件的函数:[cpp]virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); ccTouchesCancelled和ccTouchCancelled函数很少用,在接到系统中断通知,需要取消触摸事件的时候才会调用此方法。

游戏开发平台Cocos2D-x中的动作特效与动画

游戏开发平台Cocos2D-x中的动作特效与动画
Void ActionMove::onEnter(){ ActionsDemo::onEnter(); centerSprites(3); CCSizes=CCDirector::sharedDirector()->getWinSize(); CCActionlnterval*actionTo=CCMoveTo::create(2,CCPointMake(s.width-40,s.height-40)); CCActionlnterval*actionBy=CCMoveBy::create(2,CCPointMake(80,80)); CCActionlnterval*actionByBack=actionBy->reverse;); _tamara->runAction(actionTo); _grossini->runAction(CCSequence::create(actionBy,actionByBack,NULL)); _kathia->runAction(CCMoveTo::create(1,CCPointMake(40,40))); }
以上分别定义了CCScaleTo和CCScaleBy的实例。之前已经说过CCScaleBy是CCScaleTo的子类, CCScaleTo是缩放到相应比例,CCScaleBy是在目前基础上变化相应的缩放比例。create函数可以使用两个 参数或者三个参数。两个参数的第一个参数是时间间隔,第二个参数是缩放比例。三个参数的第一个参数是 时间间隔,第二个参数是x轴缩放比例,第三个参数是y轴缩放比例。
2019/3/8
xxxxxxxxxx
6
缩放动作
Void ActionScale::onEnter(){ ActionsDemo::onEnter(); centerSprites(3); CCActionlnterval*actionTo=CCScaleTo::create(2.Of,0.5f); CCActionlnterval*actionBy=CCScaleBy::create(2.Of/l.Of,lO.Of); CCActionlnterval*actionBy2=CCScaleBy::create(2.Of,5.Of,l.Of}; m_grossini->runAction(actionTo); m_tamara->runAction(CCSequence::create(actionBy,actionBy->reverse(),NULL)); m_kathia->runAction(CCSequence::create(actionBy2,actionBy2->reverse(),NULL)); }

02 Cocos2d-x基础知识学习

02 Cocos2d-x基础知识学习
cocos2d基础知识学习
p导演 p节点 p场景、图层、精灵
导演
选择在恰当的时期选择让哪些节点显示和隐藏
节点
可以近似的将节点与自然界中的单位或者物质进行对比。
(1)可以包含Node类及其子类对象作为子节点,对应的方法 为:addChild、getChildByTag、removeChild等。
(2)每一个Node类及其子类都可以使用定时器,如schedule 等。
(3)每一个Node类及其子类都可以继承动作,如runAction、 stioAction等。
场景
cocos2d中导演所控制的节点所在的容器、其本身也是一个节 点。主要可以分为以下三类:
(1)游戏内容场景:主要展示游戏中的内容如地图、怪物等。 (2)选项类场景:如游戏设置界面、关卡选择界面等。 (3)展示类场景:如游戏的开场动画、RPG游戏战斗结束后 的胜利信息等。
图层
每个场景由多个不同的图层构成,主要包括以下3类: (1)接收用户操作,比如点击、触摸屏幕等。 (2)作为显示内容的容器,比如在图层中显示游戏角色、选 项、文字等内容。 (3)作为游戏背景使用。
Байду номын сангаас
精灵
玩家所能够看到的最基本的单位。

老G的cocos2d-x学习笔记

老G的cocos2d-x学习笔记

由于cocos2d-x是cocos2d-iphone的c++移植版本。

所以我就直接翻译了cocos2d网站上的描述。

cocos2d for iphone 是一个用于构建2D游戏,demos和其他图形/交互应用程序的框架。

他基于cocos2d设计:他使用相同的概念,但是用objc替代了python。

cocos2d for iphone 是:易用的:他使用友好的API,并伴有大量例子快速的:他使用opengles实现并优化了数据结构灵活的:他容易扩展,容易整合第三方库免费的:开源,兼容闭源和开源游戏社区支持的:有一个大的活跃的友好的社区AppStore认可的:超过2500款AppStore游戏使用它开发,包括许多热卖游戏。

cocos2d for iphone 的特性:场景管理(工作流)场景间过度精灵和精灵表特效:Lens, Ripple, Waves, Liquid, Twirl, 等动作(行为)变换动作:Move, Rotate, Scale, Jump, 等组合动作:Sequence, Spawn, Repeat, Reverse,等灵活动作:Exp, Sin, Cubic, 等混合动作:CallFunc, OrbitCamera基本的菜单和按钮集成物理引擎(box2d和chipmunk)粒子系统文本渲染支持(可变的和固定宽度字体)纹理集支持瓦片地图支持(TMX格式):正交地图等角地图(斜视角)六边形地图视差滚动支持声音支持Streak Motion support渲染纹理支持高分榜(cocos live)Point based API: Supports Retina Display触摸、重力加速器、键盘、鼠标支持横竖屏切换、自动全屏支持整合Pause/Resume快速纹理:支持PVRTC textures, 8位 textures, 16位 textures and 32位 textures 基于opengl es。

cocos2d-x学习笔记:简单动画

cocos2d-x学习笔记:简单动画

cocos2d-x学习笔记:简单动画需要说明的是:因为cocos2d-x是通用游戏引擎,为了保证兼容性和易用性,对动画机制作了最简单的设计(被做成了一个action)。

但代价就是绘制动画的代码可能比较多,如果在实际开发中,一般都要选择自己封装。

这里只给出最基本的动画代码,具体使用要根据实际情况自己封装。

最好自己开发一个编辑器。

额外说一句,开发编辑器最好使用Qt,因为是跨平台的。

我们随便找一张动画资源图片,在66RPG里有很多。

#1 动画代码1CCSize s = CCDirector::sharedDirector()->getWinSize();23//#1:生成动画需要的数据类4CCTexture2D*texture=CCTextureCache::sharedTextureCache()->addImage("pic2476.png");5CCSpriteFrame *frame0=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*0, 48*0, 32, 48));6CCSpriteFrame *frame1=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*1, 48*0, 32, 48));7CCSpriteFrame *frame2=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*2, 48*0, 32, 48));8CCSpriteFrame *frame3=CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*3, 48*0, 32, 48));910CCMutableArray<CCSpriteFrame*> *animFrames = new CCMutableArray<CCSpriteFrame*>(4);11animFrames->addObject(frame0);12animFrames->addObject(frame1);13animFrames->addObject(frame2);14animFrames->addObject(frame3);1516CCAnimation *animation = CCAnimation::animationWithFrames(animFrames, 0.2f);17animFrames->release();18//#2:初始化并设置Sprite19CCSprite *sprite = CCSprite::spriteWithSpriteFrame(frame0);//设置一个初始frame 20sprite->setPosition( ccp( s.width/2, s.height/2) );21addChild(sprite);2223//#3:使用animation生成一个动画动作animate24CCAnimate *animate = CCAnimate::actionWithAnimation(animation, false);25sprite->runAction(CCRepeatForever::actionWithAction(animate));//重复播放注意,cocos2dx不支持使用clip的动画,另外,clip动画的开发成本很高,在智能手机这种大内存的平台是否适用(牺牲内存换开发速度么?),值得商量。

对cocos2d-x的学习笔记

对cocos2d-x的学习笔记

对cocos2d-x的学习笔记1、版本2.2.4和3.1.1是有差异的,打开sln文件后:解决方案中的工程,工程名以lib开头的是cocos2d-x重要的库文件,其他的是例子,供学习。

下图是2.2.4版本的工程:全部重新编译约耗时10分钟。

下图是3.1.1版本的工程:全部编译一次约耗时45分钟。

2、libcocos2dx的位置在 2.2.4版本中,libcocos2dx的android工程的目录是:cocos2d-x-2.2.4\cocos2dx\platform\android\java。

在3.1.1版本中,目录是:cocos2d-x-3.1.1\cocos\platform\android\java。

在eclipse中编译cocos2d-x工程的apk时,必须将libcocos2dx添加到eclipse中,并设置依赖关系。

使用2.2.4和3.1.1创建的android工程导入到eclipse后,必须使用相对应版本的libcocos2dx,否则可能运行失败。

当使用2.2.4的libcocos2dx并编译运行3.1.1的android应用时程序异常中止。

3、创建新工程并编译libcocos的版本在不断变化,创建新工程以及编译lib的方法也在发生变化。

(1)2.2.4版本(需使用cygwin)进入cocos2d-x-2.2.4\tools\project-creator目录,可以在windows cmd下执行:python create_project.py -project Test-package .test-language cpp其中,Test为工程名称,.test为包名。

自动创建的工程的位置是cocos2d-x-2.2.4\projects目录下。

要编译该工程,则使用cygwin进入proj.android目录,运行build_native.sh脚本文件即可。

(2)3.1.1版本(不需使用cygwin)进入到目录cocos2d-x-3.1.1\tools\cocos2d-console\bin,打开windows cmd终端运行cocos.py脚本创建文件,命令如下:python cocos.py new test -p -l cpp -d ~/Desktop参数说明:test为项目名称;-p后面接包名;-l后面接开发语言类型,有cpp, lua, js三种类型;-d后面接新项目保存的目录。

cocos2d-x入门重要概念及Test例子结构

cocos2d-x入门重要概念及Test例子结构

1.几个重要概念
在cocos2d引擎中,有几个概念,分别是导演,场景,布景和人物角色。

导演(CCDirector)在cocos2d-x引擎中,导演类是游戏的组织者和领导者,导演制定规则让游戏内的场景,布景,和人物角色有序的运行
摄像机(CCCamera),每个节点都需要使用摄像机,当节点发生缩放,旋转,和位置变化时,都需要覆盖摄像机,让这个节点通过摄像机重新渲染。

场景(CCScene)在游戏里,场景就是关卡,关卡有人物和背景构成
布景(CCLayer)从概念上说,布景就是场景里的背景,其实就是层次的概念,这种概念在kjava时代就有,就是手动的把游戏中的场景分层(也有靠地图编辑器实现这一功能的)人物(CCSprite),这就很明显了,当然包括主角和敌人,和npc,以我个人的理解,也包括游戏中的动态大图素及机关等
动作(CCAction),就是人物(CCSprite)拥有的动作
以下就是这些概念的关系图
2.test程序结构
在cocos2d-x引擎中,有一个例子非常适于刚入手此引擎的人的学习,就是test工程,提供了大多数例子
先来看看这个工程的结构,可以发现工程中的资源放在Res文件夹中,资源文件夹可以通过修改工作目录来修改,如图
程序基本结构如图所示
和helloworld基本一样,打开tests文件夹后发现内容增加,包括testResource.h里面声明了,资源的路径(由于资源文件夹中还分了子文件夹),test.h也是声明一些状态常量和引入一些子状态的场景类文件
testBasic这组文件主要是一个基础场景类,实现了一些基本功能,之后的场景类继承与此Controler这组文件主要是主菜单场景,包括了主菜单的控制,和启动正式的测试效果场景。

cocos2dx 面试题

cocos2dx 面试题

cocos2dx 面试题1. 介绍Cocos2d-x引擎Cocos2d-x是一个开源的跨平台游戏开发框架,可用于创建2D和小型3D游戏。

它提供了丰富的功能和工具,适用于多种平台,包括iOS、Android、Windows、MacOS和Web等。

Cocos2d-x使用C++编程语言,具有高效的性能和灵活的扩展性。

2. Cocos2d-x的特点- 跨平台支持:Cocos2d-x可以在不同的移动设备和操作系统上运行,提供了对不同平台的一致支持。

- 强大的功能:Cocos2d-x提供了丰富的游戏开发功能,包括场景管理、精灵动画、碰撞检测、图像处理和音频管理等。

- 高性能:Cocos2d-x采用C++编写,具有优秀的性能,并针对不同平台进行了优化。

- 易学易用:Cocos2d-x提供了清晰简洁的API和文档,使开发者可以快速上手并进行游戏开发。

- 社区支持:Cocos2d-x拥有庞大的开发者社区,提供了丰富的教程、示例代码和插件扩展等资源。

3. Cocos2d-x的基本架构Cocos2d-x的基本架构由以下几个部分组成:- 场景(Scene):游戏中的一个逻辑场景,可以包含多个层(Layer)。

- 层(Layer):包含游戏中的各个元素和逻辑,如精灵、动画和碰撞检测等。

- 精灵(Sprite):游戏中的可见对象,可以设置位置、大小、动画和纹理等属性。

- 动作(Action):用于实现游戏中的各种动画效果,如移动、旋转和渐变等。

- 调度器(Scheduler):用于管理游戏的更新和定时任务,可以按照指定的时间间隔执行代码。

- 触摸(Touch):接收用户的输入,如点击、滑动和多点触控等。

- 物理引擎(Physics Engine):用于模拟游戏中物体的运动和碰撞效果。

4. Cocos2d-x的优化技巧- 使用图像压缩:优化游戏中的图像资源,减少内存占用和加载时间。

- 纹理合批:将多个相邻的精灵合并为一个纹理,减少绘制调用次数。

Cocos2d-x开发action动作总结

Cocos2d-x开发action动作总结

1.基本动作Cocos2d提供的基本动作:瞬时动作、延时动作、运作速度。

瞬时动作:就是不需要时间,马上就完成的动作。

瞬时动作的共同基类是 InstantAction。

Cocos2d提供以下瞬时动作:∙放置– Place效果类似于 node.Position = ccp(x, y)。

之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。

∙隐藏– Hide效果类似于 [node setVisible:NO]. 之所以作为一个劢作来实现是为了可以与其他动作形成一个连续动作。

∙显示– Show效果类似于 [node setVisible:YES]. 之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。

∙可见切换– ToggleVisibility2.延时动作延时动作就是指动作的完成需要一定时间。

因此actionWithDuration 是延时动作执行时的第一个参数,延时动作的共同基类是 CCIntervalAction(包含了组合动作类)。

Cocos2d提供以下瞬时动作(函数命名规则是:XxxxTo: 意味着运动到指定的位置, XxxxBy:意味着运动到按照指定的 x、y 增量的位置。

[x、y 可以是负值]):∙移动到– CCMoveTo∙移动– CCMoveBy∙跳跃到– CCJumpTo 设置终点位置和跳跃的高度和次数。

∙跳跃– CCJumpBy 设置终点位置和跳跃的高度和次数。

∙贝塞尔– CCBezierBy 支持 3 次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。

∙放大到– CCScaleTo 设置放大倍数,是浮点型。

∙放大– CCScaleBy∙旋转到– CCRotateTo∙旋转– CCRotateBy∙闪烁– CCBlink 设定闪烁次数∙色调变化到– CCTintTo∙色调变换– CCTintBy∙变暗到– CCFadeTo∙由无变亮– CCFadeIn∙由亮变无– CCFadeOut3.组合动作按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。

cocos2d-x学习方法之CCAction

cocos2d-x学习方法之CCAction

cocos2d-x学习笔记-CCAction(动作);上一篇我们学习了CCNode类(实体),但游戏单单只有静止不动的实体肯定不行,得让它们执行一些动作,有丰富的动画效果,CCAction及它的子类就是起着这样的作用,它是通过改变这些实体的属性实现的。

从结构图可以看出,动作类的基类是CCAction,通过继承它可以实现很多种动作。

CCFiniteTimeAction:有限次动作执行类,就是按时间顺序执行一系列动作,执行完后动作结束;CCSpeed:调整实体(节点)的执行速度;CCFollow:可以使节点跟随指定的另一个节点移动。

下面我们主要来学习CCFiniteTimeAction,这个类在平常的开发中很常见。

CCFiniteTimeAction又分为CCActionInstanse(瞬时动作的基类)和CCActionInterval(延时动作的基类)。

CCActionInstanse:没什么特别,跟CCActionInterval主要区别是没有执行过程,动作瞬间就执行完成了;CCActionInterval:执行需要一定的时间(或者说一个过程)。

我们用的最多的就是延时动作,下面对它进行单独介绍。

根据上面的类结构图,CCActionInterval的子类有很多,可以通过cocos2d-x自带的tests 例子来学习,主要有这些动作:移动(CCMoveTo/CCMoveBy)、缩放(CCScaleTo/CCScaleBy)、旋转(CCRotateTO/CCRotateBy)、扭曲(CCSkewTo/CCSkewBy)、跳跃(CCJumpTo/CCJumpBy)、贝塞尔曲线(CCBezierTo/CCBezierBy)、闪烁(CCBink)、淡入淡出(CCFadeIn/CCFadeOut)、染色(CCTintTo/CCTintBy)等,还可以把上面这些动作的几个组合成一个序列。

下面是移动和缩放动作的代码示例,其他的动作都类似,都是调用actionWithDuration函数,用到的时候具体参数的含义可以参考cocos2d-x自带的tests例子。

cocos2d-x 学习文档

cocos2d-x 学习文档

001:对cocos2d-x项目的初步分析.根据上面的截图可以看出,项目默认分Classes Resources win32三个文件夹。

Classes下存放的是程序的主要源代码,Resources下放的是资源文件,win32目录下的文件是平台相关的,99%的情况下不需求变动。

1)主程序入口打开main.cpp可以看到如下代码#include "main.h"#include "AppDelegate.h"int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// create the application instanceAppDelegate app;return cocos2d::CCApplication::sharedApplication().run();}看起来是不是有点儿像MFC的CWinApp呢?2)AppDelegate的使用实际上AppDelegate是从CCApplication派生出来的。

作为初学者,目前只需要注意1个成员函数,那就是applicationDidFinishLaunching。

他负责初始化CCDirector并创建第1个CCScene供程序显示。

bool AppDelegate::applicationDidFinishLaunching(){// initialize directorCCDirector *pDirector = CCDirector::sharedDirector();pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());// enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.// pDirector->enableRetinaDisplay(true);// turn on display FPSpDirector->setDisplayFPS(true);// set FPS. the default value is 1.0/60 if you don't call thispDirector->setAnimationInterval(1.0 / 60);// create a scene. it's an autorelease objectCCScene *pScene = HelloWorld::scene();// runpDirector->runWithScene(pScene);return true;}小结:通过本章内容,我们对cocos2d-x引擎有了一个初步的体验,002:landscape or portrait.在cocos2d-x代码中,对设备方向有这样的定义:/** @typedef ccDeviceOrientationPossible device orientationstypedef enum {/// Device oriented vertically, home button on the bottomkCCDeviceOrientationPortrait = 0, // UIDeviceOrientationPortrait,/// Device oriented vertically, home button on the topkCCDeviceOrientationPortraitUpsideDown = 1, // UIDeviceOrientationPortraitUpsideDown,/// Device oriented horizontally, home button on the rightkCCDeviceOrientationLandscapeLeft = 2, // UIDeviceOrientationLandscapeLeft,/// Device oriented horizontally, home button on the leftkCCDeviceOrientationLandscapeRight = 3, // UIDeviceOrientationLandscapeRight,// Backward compatibility stuffCCDeviceOrientationPortrait = kCCDeviceOrientationPortrait,CCDeviceOrientationPortraitUpsideDown = kCCDeviceOrientationPortraitUpsideDown,CCDeviceOrientationLandscapeLeft = kCCDeviceOrientationLandscapeLeft,CCDeviceOrientationLandscapeRight = kCCDeviceOrientationLandscapeRight,} ccDeviceOrientation;根据注释所说,肖像模式是设备为垂直方向的,home键在下方。

cocos2d-x学习笔记

cocos2d-x学习笔记

第一课解读cocos2d-x中的AppDelegate文件《一》AppDelegate.h中的文件如下#ifndef_APP_DELEGATE_H_ //预编译头也可以写#define_APP_DELEGATE_H_ //#pragma once#include"cocos2d.h"class AppDelegate : private cocos2d::CCApplication{public:AppDelegate();virtual ~AppDelegate();virtual bool applicationDidFinishLaunching();virtual void applicationDidEnterBackground();virtual void applicationWillEnterForeground();};#endif《二》AppDelegate.cpp中的文件如下#include"AppDelegate.h"#include<vector>#include<string>#include"HelloWorldScene.h"#include"AppMacros.h"#include"Myscene.h"USING_NS_CC; //cocos内部命名方法using namespace std; //使用命名空间AppDelegate::AppDelegate() { //构造函数}AppDelegate::~AppDelegate() { //析构函数}bool AppDelegate::applicationDidFinishLaunching() {// initialize directorCCDirector* pDirector = CCDirector::sharedDirector();CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();pDirector->setOpenGLView(pEGLView);CCSize frameSize = pEGLView->getFrameSize();// Set the design resolution#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) ||(CC_TARGET_PLATFORM == CC_PLATFORM_WP8)pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionShowAll);#elsepEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);#endifvector<string> searchPath;if (frameSize.height > mediumResource.size.height){searchPath.push_back(largeResource.directory);pDirector->setContentScaleFactor(MIN(largeResource.size.height/designResolutionS ize.height, largeResource.size.width/designResolutionSize.width));}// if the frame's height is larger than the height of small resource size, select medium resource.else if (frameSize.height > smallResource.size.height){searchPath.push_back(mediumResource.directory);pDirector->setContentScaleFactor(MIN(mediumResource.size.height/designResoluti onSize.height, mediumResource.size.width/designResolutionSize.width));}// if the frame's height is smaller than the height of medium resource size, select small resource.else{searchPath.push_back(smallResource.directory);pDirector->setContentScaleFactor(MIN(smallResource.size.height/designResolutionS ize.height, smallResource.size.width/designResolutionSize.width));}// set searching pathCCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);// turn on display FPSpDirector->setDisplayStats(true); //是否在屏幕上显示FPS// set FPS. the default value is 1.0/60 if you don't call thispDirector->setAnimationInterval(1.0 / 60); //帧数// create a scene. it's an autorelease objectCCScene *pScene = Myscene::scene();//初始页面的控制就在这里// runpDirector->runWithScene(pScene); //运行游戏return true;}// This function will be called when the app is inactive. When comes a phone call,it's be invoked toovoid AppDelegate::applicationDidEnterBackground() {CCDirector::sharedDirector()->stopAnimation();// if you use SimpleAudioEngine, it must be pause// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); }// this function will be called when the app is active againvoid AppDelegate::applicationWillEnterForeground() {CCDirector::sharedDirector()->startAnimation();// if you use SimpleAudioEngine, it must resume here// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); }第二课添加新场景我们这里就介绍添加一个Myscene场景,分别添加Myscene.h文件和Myscene.cpp文件,那么在Myscene.h和Myscene.cpp中该如何写?《一》Myscene.h中的文件#pragma once#include"cocos2d.h"USING_NS_CC;class Myscene : public cocos2d:: CCLayer{public :Myscene(void);//构造函数~Myscene(void);//析构函数virtual bool init();//初始化函数static cocos2d::CCScene* scene();//场景创建函数// void menuCloseCallback(CCObject* pSender);// CREATE_FUNC(Myscene);//这个是必须要写的东西哦// void menuCallback(CCObject* pSender);//回调函数// void scheCallback(float dt);//计时器的回调函数//void update(float dt);//计时器的回调函数//CCLabelTTF* label;//int n;//char str[50];};《二》Myscene.cpp中的文件#include"Myscene.h"#include"HelloWorldScene.h"using namespace cocos2d;//命名空间2种写法USING_NS_CC;//USING_NS_CC;Myscene::Myscene()//构造函数{}Myscene::~Myscene()//析构函数{}CCScene* Myscene::scene()//场景和层的创建{CCScene *scene = CCScene::create(); //创建一个场景Myscene *layer = Myscene::create();//创建一个层scene->addChild(layer);//把层加到场景中return scene;//返回到场景}bool Myscene::init()//函数的初始化,场景中的东西都在这里写的{return true;}这样一个空的场景就创建好了,但是我们在控制台上只能看见一个黑框框,什么都没有。

cocos ccactioninterval解析

cocos ccactioninterval解析

cocos ccactioninterval解析`CCActionInterval` 是Cocos2d-x 框架中的一个类,它是动作(Action)和间隔(Interval)的组合。

在Cocos2d-x 中,动作是动画的一部分,它描述了如何改变一个节点(例如一个精灵或一个场景)的属性。

`CCActionInterval` 是一个特定的动作,它表示一个在一段时间内进行的动作。

`CCActionInterval` 通常包含以下属性:1. `duration`:动作的持续时间。

2. `repeatCount`:重复的次数。

3. `repeatForever`:是否无限重复。

4. `speed`:动作的速度。

此外,`CCActionInterval` 还包含一些方法,例如`startWithTarget`,`reverse`,`clone` 等。

以下是一个示例代码,展示如何使用`CCActionInterval`:```cppauto moveUp = MoveBy::create(2, Vec2(0, 100)); // 创建一个动作,将节点向上移动100个像素,持续2秒auto moveDown = MoveBy::create(2, Vec2(0, -100)); // 创建一个动作,将节点向下移动100个像素,持续2秒auto sequence = Sequence::create(moveUp, moveDown, nullptr); // 将两个动作按顺序组合在一起auto repeat = RepeatForever::create(sequence); // 创建一个无限重复的动作序列sprite->runAction(repeat); // 在精灵上运行这个无限重复的动作```在这个示例中,我们首先创建了两个`MoveBy` 动作,一个向上移动,一个向下移动。

然后我们使用`Sequence` 类将这两个动作按顺序组合在一起。

Cocos2d-3.xAction介绍

Cocos2d-3.xAction介绍

Cocos2d-3.xAction介绍我们在做游戏的时候,或是我们在玩游戏的时候有以下⼏点我认为是⾮常重要的1.游戏效果2.游戏的画风3.游戏耐玩性其中游戏的效果有⼀个很重要的要素,这⾥就包含游戏中⼈物的动作(Action)。

有时候我们说这个游戏这个技能真帅啊,这指的有两点,技能的效果帅和动作帅。

下⾯我领⼤家来看看官⽅的Demo⼀、下载解压官⽅的框架⼆、我们运⾏⼀下官⽅的例⼦我们最好卸载掉⼀些别的⼯程,加快我们的编译速度,C++编译速度很慢的三、打开我们的官⽅例⼦代码如下,已经加上了注释//------------------------------------------------------------------//// Test1////------------------------------------------------------------------void CrashTest::onEnter(){ActionManagerTest::onEnter();//创建精灵 s_pathGrossini是什么呢?static const char s_pathGrossini= "Images/grossini.png"; auto child = Sprite::create(s_pathGrossini);//设置到屏幕中⼼点child->setPosition( VisibleRect::center() );//添加的逻辑必须/*** 添加⼀个child(带有z order和tag)到⼀个容器⾥**如果这个child是被添加到⼀个运⾏中的节点,然后onEnter和onEnterTransitionDidFinish将会被调⽤ * @param child ⼀个child 节点.* @param localZOrder Z order 是为了描画的顺序的* @param tag ⼀个整形很容易确定节点.*/addChild(child, 1, kTagGrossini);//Sum of all action's duration is 1.5 second.//旋转 90度,持续1.5秒child->runAction(RotateBy::create(1.5f, 90));//DelayTime这个参数是推迟这个动作 1.4秒//FadeOut淡出 1.1秒child->runAction(Sequence::create(DelayTime::create(1.4f),FadeOut::create(1.1f),nullptr));//1.5秒后将会移除这个动作child->runAction(Sequence::create(DelayTime::create(1.4f),CallFunc::create(CC_CALLBACK_0(CrashTest::removeThis, this)),nullptr));}void CrashTest::removeThis(){//通过Tag号获取了节点auto child = getChildByTag(kTagGrossini);//将节点删除child->removeChild(child, true);//运⾏下⼀个例⼦getTestSuite()->enterNextTest();}std::string CrashTest::subtitle() const{return "Test 1. Should not crash";}//------------------------------------------------------------------//// Test2////------------------------------------------------------------------void LogicTest::onEnter(){ActionManagerTest::onEnter();//创建精灵auto grossini = Sprite::create(s_pathGrossini);//将精灵加到层上addChild(grossini, 0, 2);//添加到中⼼点grossini->setPosition(VisibleRect::center());//移动到(150,0)点,时间为5秒//CC_CALLBACK_1(LogicTest::bugMe,this) 五秒之后调⽤的函数grossini->runAction( Sequence::create(MoveBy::create(5, Vec2(150,0)),CallFuncN::create(CC_CALLBACK_1(LogicTest::bugMe,this)),nullptr));}void LogicTest::bugMe(Node* node){node->stopAllActions(); //After this stop next action not working, if remove this stop everything is workingnode->runAction(ScaleTo::create(2, 2));//放⼤倍x和y轴,也就是图⽚放⼤2倍}四、我领着⼤家看看效果吧,我特意放慢了速度 Test1Test2五、总结对于Demo的Action总结1.创建精灵2.加载精灵到层上3.创建动作4. 精灵调⽤runAction 传递⼀个动作的参数学习⽅法之我的建议1. 我们在学习cocos2d的时候,遇到不会的⽅法可以去看看框架中的注释 3.搜索⼀些博客,然后看看继承图。

Cocos2dX动作Action

Cocos2dX动作Action

动作概述
• 动作类(Action)是所有动作的基类,它创建的一个对象代表 一个动作。动作作用于Node,因此每个动作都需要由 Node对象执行。动作类(Action)作为基类,实际上是一个 接口,动作类的大多数实现类都派生于有限时间动作类 (FiniteTimeAction)。
• 在实际开发中我们通常用到两类动作:即时动作和持续动 作,它们均继承于有限时间动作类。
//旋转动作 var rotation = new cc.RotateTo(2, 180, 0);
//淡入动作 var fade = cc.fadeOut(5);
//Sequence复合动作 var seq = cc.sequence(move, cc.delayTime(2), rotation, fade); e.runAction(seq);
• 动作概述 • 即时动作 • 持续动作 • 复合动作 • 变速动作 • 综合实例
内容
引言
• 动作用于制造各种动态。 • 将一朵云从屏幕左边漂浮移动到右边,可以使用上节学习
的调度器来实现。但如果要实现诸如回合制游戏中控制角 色从当前位置移动到地方阵地,攻击敌方之后再跑回来这 样的效果,使用定时器来实现就非常麻烦。这时动作( Action)来拯救我们了。 • 通过组合,动作可以轻易地完成非常复杂的行为。 • 对界面应用动作,可以创建出炫酷和动感的界面。
变速动作
• 变速动作和复合动作类似,也是一种特殊的动作,它可以把任何动作按照改变后 的速度执行。
• 在游戏中,我们经常要实现一些加速度或者减速度的效果。Cocos2d-x已经为我们 做好了。
• ActionEase类可以实现动作的速度由快到慢、速度随时间改变的匀速运动。该类 包含5类运动:

Cocos2d-x(1)CCAction动作机制

Cocos2d-x(1)CCAction动作机制

Cocos2d-x(1)CCAction动作机制动作机制ActionCCAction是动作类的基类,所有的动作都派⽣⾃这个类,它创建的⼀个对象代表了⼀个动作。

动作作⽤于CCNode,因此,任何⼀个动作都需要由CCNode对象来执⾏。

以下代码实现了⼀条鱼⽤1 秒钟的时间移动到了(0, 0)点:CCSprite* sprite = CCSprite ::create("fish.png");CCAction* action = CCMoveTo ::create(1.0f, ccp(0, 0));sprite->runAction(action);值得注意的是,⼀个 CCAction只能使⽤⼀次,这是因为动作对象不仅描述了动作,还保存了这个动作持续过程中不断改变的⼀些中间参数。

对于需要反复使⽤的动作对象,可以通过copy⽅法复制使⽤。

CCAction作为⼀个基类,其实质是⼀个接⼝(即抽象类),由它派⽣的实现类(如运动和转动等)才是我们实际使⽤的动作。

CCAction的绝⼤多数实现类都派⽣⾃ CCFiniteTimeAction,这个类定义了在有限时间内可以完成的动作。

CCFiniteTimeAction定义了reverse ⽅法,通过这个⽅法可以获得⼀个与原动作相反的动作(称作逆动作),例如隐藏⼀个精灵后,⽤逆转动作再显⽰出来。

当然,并⾮所有的动作都有对应的逆动作,例如类似" 放⼤到" 等设置属性为常量的动作不存在逆动作,⽽设置属性为相对值的动作则往往存在相应的逆动作。

关于逆动作,后⾯将会看到更多演⽰。

由CCFiniteTimeAction派⽣出的两个主要类分别是瞬时动作(CCActionInstant )和持续性动作(CCActionInterval),这两类动作与4.4 节中介绍的复合动作配合使⽤,能得到复杂⽣动的动作效果。

如图,为CCAction的继承关系图-----------------------CCAction-的分割线----------------------------------------------------2.瞬时动作(CCActionInstant )瞬时动作是指能⽴刻完成的动作,是 CCFiniteTimeAction中动作持续时间为 0 的特例。

Cocos2d-x学习笔记(三)浅析动作类CCAction(2)

Cocos2d-x学习笔记(三)浅析动作类CCAction(2)

Cocos2d-x学习笔记(三)浅析动作类CCAction(2)有关CCAction其它动作类简介:(1)摄像机动作类CCOrbitCamera:摄像机动作是环绕中心屏幕旋转所形成的动作,其旋转坐标采用球坐标描述。

Create()函数原型CCOrbitCamera* create (float,float,float,float,float,float,float),第一个参数表示时间间隔,第二、三个参数分别表示起始半径和过程半径,第四、五个参数分别表示起始Z轴夹角和过程Z轴夹角,第六、七个参数分别表示起始X 轴夹角和过程X轴夹角。

(2)基本样条动作:CCCatmullRomTo(By)和CCCardinalSplineT o(By)游戏对象通过一些离散的点模拟出相应的路径,有相应的公式模拟出这条曲线,那就是基本样条了。

1、基本样条路径CCCardinalSplineTo(By):Create()函数原型CCCardinalSplineT o* crete(float,CCPointArray*,float),第一个参数表示时间间隔,第二个参数表示点数组,第三个参数表示拉力系数。

前面说过,一个是相对量,一个是绝对量,注意使用相对量时应第一个点最好设置为(0,0),否则会被忽略掉。

2、Catmull-Rom样条路径CCCatmullRomTo(By),用法类似,只是不需要拉力系数做参数。

(3)缓冲动作类CCActionEase:在现实运动中,常常需要实现一些加减速效果,缓冲动作可以帮我们实现。

主要有指数缓冲、赛因缓冲、跳跃缓冲、弹性缓冲、回震缓冲和基本缓冲六大类。

一般第一个参数为缓冲动作,若有2个参数,基本动作的第二个参数为速率,弹性缓冲为震动周期。

其基本调用形式为(CCActionInterval*)(move->copy()->autorelease()……)。

(4)组合动作类CCSequence、CCSpawn和CCRepeat、CCrepeatForever:在游戏中,游戏对象有时不只是执行一个动作执行多个动作的动作序列,这时需要用动作组合在一起,用组合动作类可以实现它。

Cocos2d-x之动作管理与CCActionManager的使用

Cocos2d-x之动作管理与CCActionManager的使用

Cocos2d-x之动作管理与CCActionManager的使用Cocos2d-x之动作管理与CCActionManager的使用一、动作管理类动作管理类CCActionManager是一个管理所有动作的单例,工作原理是:当CCNode执行runAction时,该函数会把动作通过动作管理类的addAction函数将对象传递给CCActionManager的单例,该实例再把这个动作添加到自己的动作序列中。

动作管理单例通过定时刷新自己的update方法,在这个方法中去调用行为序列中每个动作的step(暂停的行为不会update),这些step方法再根据自身的完成进度去update或是结束行为。

实际上是由动作管理单例驱动的每个动作去更新自己的逻辑,而runAction方法只是将行为对象添加进CCActionManager的待执行队列。

当节点被清除或是行为结束时,动作管理类会自动将动作从队列中删除,不需要程序员的管理。

一般情况下,不需要使用这个单例来管理动作,可以使用CCNode类的stopAction、stopActionByTag和stopActions等函数来管理、但是有两种情况需要使用CCActionManager类单例:<1> 动作的执行者不是同一个节点。

<2> 需要暂停/重启活动时。

CCActionManager类的继承关系如下图所示。

61.png二、CCActionManager类的主要函数CCActionManager类的主要函数见如下图所示。

62.png三、CCActionManager类的使用之前提到过,不要轻易使用动作管理类,除非是不同动作目标和需要暂停/重启动作。

这里的例子就是需要暂停/重启动作时使用。

1、项目示例。

<1> 首先新建Cocos2D-X项目,取名为“MyCCActionManager”,然后在HelloWorldScene.h文件中声明成员函数。

浅谈ios游戏开发之CCAction

浅谈ios游戏开发之CCAction

浅谈ios游戏开发之CCAction摘要:在ios游戏开发中,目前最为流行的是游戏开发引擎cocos2d-x,它是一种开源、跨平台的免费2D游戏开发引擎。

在cocos2d-x引擎中动作定义了各个节点或精灵之间的移动效果,比如动态效果、跳跃效果、旋转效果等,每一个效果都是一个CCAction动作。

CCAction动作主要分为瞬时动作CCActionInstanse和延时动作CCActionInterval。

关键词:ios游戏;cocos2d-x;CCAction“动作”在生活中的含义人人皆知,那么在cocos2d-x引擎中,“动作”的含义也十分类似,它是指在CCNode节点上运行某些具有目的的行为,比如移动、缩放、跳跃、染色、贝赛尔曲线等行为。

无论是菜单CCMenu、图层CCLayer、还是标签CCLabel、图片精灵CCSprite,只要是CCNode的子类,都可以实现CCAction,动作是作用在某个CCNode上的变化逻辑,通过动作可以非常方便地实现对节点的位置、大小、缩放、扭曲、显示等属性进行调整,也可以实现对节点操作的各种逻辑处理,通过CCNode上执行runAction方法,就可以实现动作的执行,不仅可以完成一个独立的动作,也可以定义动作序列、组合序列、反向动作等,这让开发者在控制CCNode节点时易如反掌。

一、CCFiniteTimeAction动作基类CCAction继承的是CCObject类,并且CCFiniteTimeAction(有限次动作执行类)、CCFlow(节点跟随类)、CCSpeed(节点执行速度类)三个大类都继承的是基类CCAction。

CCFiniteTimeAction(有限次动作执行类)又可分为瞬时动作CCActionInstant和延时动作CCActionInterval两个子类。

其中,瞬时动作CCActionInstant表示动作没有执行过程,动作在瞬间完成,这中间不产生任何动画效果。

菜鸟学习Cocos2d-x-3.x——浅谈动作Action

菜鸟学习Cocos2d-x-3.x——浅谈动作Action

菜鸟学习Cocos2d-x 3.x——浅谈动作Action动作类概述一款游戏,设计的再NB的游戏,如果都是一堆静态的图片,没有任何动作,那也只能“呵呵”了。

动作体系对于一款游戏的成功与否,有着非常重要的影响。

所以,这篇文章就对Cocos2d-x中的动作进行总结。

先来看看Cocos2d-x中的与动作相关的类。

与动作相关的类图如下图所示:现在就对这些类进行简单的介绍,在后续的小节中还会进行详细的分析的。

•Ref和Clonable:这里不说,在总结Cocos2d-x内存管理的时候再进行详细总结;•Action:所有动作的父类,定义了公共的操作;•FiniteTimeAction:瞬时动作和延时动作的父类,可以定义动作的时间变化;•Follow:跟随节点的动作;•Speed:改变一个动作的时间,比如实现慢动作回放或者快进;•ActionInstant:瞬间完成动作,中间没有任何动画效果;•ActionInterval:动作会在指定的时间内完成,中间会有动画效果;•FlipX:X轴方向翻转;•MoveTo:移动动作;•……下面就对上面说的这些类进行通过实际的代码进行总结。

Action类的主要成员函数以下是Action类的主要成员函数:/*** 返回一个新的Action对象,表示原动作的相反的动作*/virtual Action* reverse()const=0;// 如果动作已经完成了,就返回truevirtual bool isDone()const;// 在动作开始之前被调用,设置动作作用的对象virtual void startWithTarget(Node*target);/*** 在动作完成以后会被调用,它会设置"target"对象为空* 注:请永远不要手动调用该函数,而是调用对应的"target->stopAction(a ction);"*/virtual void stop();/*** 每帧都会调用的方法,如果你需要在每帧控制动作,则需要重写,时间间隔为动作间隔时间* 最好不要重写该函数,除非你真的知道怎么做*/virtual void step(float dt);/*** 每一帧都会调用一次该函数,参数time取值为0和1之间的任意值,例如:* 0表示动作刚刚开始的时候调用;* 0.5表示动作执行到一半的时候调用;* 1表示动作完成以后调用;*/virtual void update(float time);// 获得执行动作的对象inline Node* getTarget()const{return _target;}// 设置执行动作的对象inline void setTarget(Node*target){ _target = target;}// 动作标签inline int getTag()const{return _tag;}inline void setTag(int tag){ _tag = tag;}瞬时动作ActionInstant是瞬时动作类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

cocos2d-x初探学习笔记(3)--动作(CCAction)
1.内存自动回收
Cocos2d—x提供了一种类似java的内存回收机制,,在java中定义的对象实例,不用担心他什么时候被释放,因为java虚拟机会在变量不再使用时自动释放内存,而在C++中,不再使用这个变量时,我们需要手动释放(使用delete),不然我们的内存就会溢出,而在使用cocos2d-x时我们无需再关心这个问题,就是在新创建实例时,加入autorelease,如图
所示:
这样就可以自动释放不再需要的内存了.
2.动作(CCAction)
在cocos2d-x引擎中,动作定义了在节点上进行通用的操作,他不依赖于节点,但是运行时需要指定节点作为目标,动作可以实现很多动画效果
动作分为瞬时动作(基类CCActionInstanse)和延时动作(基类CCActionInterval),实现动作包括几个步骤:
1.创建目标节点(一般是精灵)
m_grossini = CCSprite::spriteWithFile(s_pPathGrossini);
2.定义动作
CCActionInterval* actionTo = CCMoveTo::actionWithDuration(2, CCPointMake (s.width-40, s.height-40));
3.动作执行
m_grossini->runAction( CCSequence::actions(actionBy, actionByBack, NULL)); 以下就通过test中的几个例子来分析动作
1.直接设置(这个不算动作动画)
这个没什么好说的,就是直接设置位置,颜色,缩放度等内容,动作执行没有过程,直接看到结果
2.动作返回
其中reverse就是执行动作的反动作,回到原来的状态
3.消息机制
cocos2d-x也采用了消息机制,如上图中代码所示,在完成动作后调用相应函数。

相关文档
最新文档