
cocos2dx
文章平均质量分 63
经验
泡泡茶壶Wending
男
展开
-
改写cocos2d的ProgressTimer,实现任意起始点的Radial进度条
就是根据起点向量和旋转到某个角度后的终点向量,和旋转过程中经过的矩形顶点,把这些点连接成一个个相邻的三角形,用纹理颜色绘制这些三角形即可。原创 2023-06-19 18:51:00 · 691 阅读 · 0 评论 -
游戏物理引擎概述
3d物理引擎:bullet2d物理引擎有两种:1.box2d 2.chipmunkcocos中用到的物理引擎:cocos2dx中的Node自带物理引擎的参数(基于chipmunk封装的)://Physics:remaining backwardly compatible #if CC_USE_PHYSICS PhysicsBody* _physicsBody;public: void setPhysicsBody(PhysicsBody* physi.原创 2022-05-02 14:20:43 · 2780 阅读 · 0 评论 -
帧动画与spine动画
一.帧动画原理:帧动画是一组“相关联”图片,在很短的时间内,播放切换,让大脑认为是连续的;优点: 实现简单播放性能高,播放性能高;缺点: 资源占用过大;二.Spine原理:将一个模型,根据动画的需求分成一些骨骼,一个骨骼对应一张贴图,将这些 骨骼通过工具,在不同的时间点来调整骨骼的位置、缩放、透明度等信息, 将这些时间点连续的播放形成动画;优点:资源占用少;缺点: 播放的性能比帧动画差;spine动画的cocos2dx播放代码:SkeletonAnimation* no原创 2022-04-26 01:23:15 · 3269 阅读 · 0 评论 -
cocos onCreate与onEnter调用时机
cocos onCreate与onEnter调用时机1.onCreate是在LUA层调用create函数时候出发构造函数ctor 构造函数结尾调用onCreate是创建完节点实例时候调用2.onEnter是在C++层addChild(child)时候 调用child的onEnter()也就是onEnter是被添加到父节点后执行3.onExist是removeAllChildrenWithCleanup()调用child的onExit如果节点未被addChild到父节点,自动销毁时候,原创 2022-01-07 22:36:31 · 2636 阅读 · 0 评论 -
cocos2dx中常见设计模式
1、单例设计模式:导演类2、观察者模式: 被观察者(EventDispatcher)含有一个数组(std::vector<EventListener*>),里边存放了所有观察者(EventListener监听者)的引用,在被观察者的状态发生改变的时候,通过调用观察者的函数来通知观察者(dispatchEventToListeners),实现了信息的传递。 事件监听器:就是采用了观察者模式,当一个事件被触发的时候,所有监听它的对象都将收到通知3、工厂模式create...原创 2020-08-13 17:43:55 · 920 阅读 · 0 评论 -
cocos2dx 自动裁剪
自动裁剪在draw函数内执行,由renderer->checkVisibility(transform, _contentSize)实现,判断该渲染指令是否被裁减掉,如果裁剪掉不显示,就不会把该渲染指令加入到渲染队列。void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags){#if CC_USE_CULLING // Don't do calculate the culling原创 2020-05-31 16:19:18 · 608 阅读 · 1 评论 -
cocos合批绘制
Cocos中,对于使用相同贴图且没有自定义uniform变量且采用默认绘制指令TrianglesCommand或QuaCommand的节点可以进行自动合批绘制合批绘制的本质是将两个模型动态合并为一个模型,并使用相同的材质在一个DrawCall中进行绘制,以减少DrawCall数量,提高运行效率。Cocos判断两个uniform是否能够合批,靠的是通过GLProgram、TextureID和...原创 2020-04-27 14:04:00 · 2583 阅读 · 1 评论 -
cocos 中每个节点的visit与draw函数
visit函数内会先调用自己的draw函数,然后变量所有子节点递归调用字节的visit:cocos渲染流程是从Director类的主循环mainLoop中开始:1.调用drawScene()://精简后的代码,方便理解void Director::drawScene(){ /*此处省略一些代码 ..... */ _renderer->clear(); pushMatrix(MATRIX_STACK_TYPE::MATRIX_ST..原创 2020-05-24 22:15:00 · 1294 阅读 · 0 评论 -
Cocos2d-x 渲染器Renderer
渲染队列RenderQueueRenderQueue遍历场景时会生成渲染命令,生成的渲染命令存储在渲染队列中。渲染队列RenderQueue会将命令分层5类存储,分别是:class RenderQueue {public: /** RenderCommand will be divided into Queue Groups. 渲染队列RenderQueue把渲染命令...原创 2020-04-26 23:36:14 · 463 阅读 · 0 评论 -
cocos2dx遇到的坑
1. cocostudio 中的UI元素如果是非widget类型(比如Node类型),在代码里用getChildByName()找不到这个子节点2. cocos3.10 Lua中ui:PageView有个Bug, 给其添加的监听事件没效果,不会响应3.cocosLua中音频cc.SimpleAudioEngine播放声音有bug,未预加载的声音文件第一次播放会无声音,并且播放的时候会掉帧,原创 2017-10-24 09:59:42 · 1081 阅读 · 0 评论 -
详解针对cocos2d-x.ini文件
这一篇主要针对cocos2d.ini文件进行一个详解。在我们需要调用C++自定义累得时候,需要对cocos2dx.inicopy一份进行修改。那么修改哪些地方呢?在 frameworks\cocos2d-x\tools\tolua 中,复制一份该文件夹下cocos2dx.ini的配置信息,然后修改一些参数,改成我们自定义类的参数。[custom_api]# prefix会被添加到生成的函数.你也可...转载 2018-03-22 15:32:05 · 553 阅读 · 0 评论 -
cocos2dx Jni调用需要线程切换 ui线程和GL线程
cocos2d-x for Android 运行在多线程环境下,所以在 Lua/C++ 和 Java 交互时需要注意选择适当的线程。cocos2d-x 在 Android 上以两个线程来运行,分别是负责图像渲染的 GL 线程和负责 Android 系统用户界面的 UI 线程。在 cocos2d-x 启动后,Lua/C++代码将由 GL 线程调用,因此从 Lua/C++中调用的 Java 方...转载 2018-07-21 16:34:48 · 2826 阅读 · 0 评论 -
cocos2d-x getVisibleSize、getFrameSize理解
首先要理解visibleSize和frameSize的意义:frameSize:local director = cc.Director:getInstance()local view =director:getOpenGLView()local frameSize =view:getFrameSize()local w,h =frameSize.width,frameS...原创 2018-09-17 15:34:37 · 2789 阅读 · 0 评论 -
cocos2dx实现翻书效果。
因为项目需求,需要使用cocos实现3d翻书的效果,刚开始确实没有什么思路,cocos2d做3d的效果这不是开玩笑吗。但是,再难也得做啊,没办法。后来想到cocos2dx的例子里有个类似的效果,不过那个是个action,后来看了看感觉还可以,只是效果和我的需求有点差异,但终归是找到了实现的思路,于是开始看cocos2dx的源码,主要用到的是cocos的网格动画,涉及到以下几个文件:CCGr...转载 2019-01-31 10:52:16 · 1556 阅读 · 1 评论 -
cocos2dx优化内存技巧
一、内存优化原则为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Texture(纹理)!它几乎占据了90%的应用内存。那么我们应该尽力去减小我们应用的纹理内存使用,否则我们的应用进程可能会被系统杀死。为了减少内存警告,这里我们给出两个普遍的关于cocos2dx游戏内存优化的指导原则。1)了解瓶颈,然后解决掉什么样的纹理消耗了大部分应用的内存呢?或者说这些纹...转载 2019-04-11 17:23:21 · 744 阅读 · 0 评论 -
Cocos2d-x 3.6 命令行创建项目
Cocos2d-x 3.6 创建项目的方式与它之前的几个版本并没有什么区别,打开终端(Windows下是打开cmd)进入到引擎文件夹目录,运行setup.py,然后再输入以下命令行就可以创建一个新项目。cocosnew myGame -p com.cocos2dx.game -l cpp -d /Users/cocos2d-x/workspace/cocos2dx/projects原创 2015-08-05 15:13:59 · 7662 阅读 · 0 评论 -
cocos2dx 坐标系
首先脑补下基础知识吧:1、OpenGL坐标系:该坐标系原点在屏幕左下角,x轴向右,y轴向上。这也就是cocos2dx中用到的坐标系所以没啥好说的。2、屏幕坐标系:该坐标系的原点在屏幕左上角,x轴向右,y轴向下,其实和OpenGL坐标系的差别也就是y轴的方向拉。假设游戏场景的分辨率为(500,500),其中一个点的坐标为(200,200),那么它在OpenGL坐标系中的坐标还是(200,20转载 2015-08-03 11:37:24 · 515 阅读 · 0 评论 -
cocos2dx的内存管理机制
必须尊重作者:版权声明:本文由( 小塔 )原创,转载请保留文章出处!本文链接:http://www.zaojiahua.com/memory-management.html今天看了一下cocos2dx的内存管理机制,有些地方不太好理解搞了挺长的时间,现在感觉自己理解的差不多了,赶快写下自己的思路和互联网的广大朋友分享,如果你发现有错误的地方或者不理解的地方欢转载 2015-06-17 00:03:48 · 633 阅读 · 0 评论 -
COCOS2DX坐标转换
游戏中经常会用到一些变换:游戏中武器和角色在一个layer上,为了效率,会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,对应的层上使用batchnode来提高效率武器和PhysicsParticleLauncher(粒子发射器)绑定,发射的时候,会向PhysicsParticleLayer的武器相同的位置上生成一个物理粒子特效会经常用到c...原创 2015-06-16 18:48:47 · 583 阅读 · 0 评论 -
Cocos2dx现成的粒子特效
函数1.特效CCParticleExplosion //爆炸粒子特效CCParticleFire //火焰粒子特效CCParticleFlower //花束粒子特效CCParticleFireworks //烟花粒子特效CCParticleGalaxy转载 2015-05-28 18:45:18 · 1032 阅读 · 0 评论 -
cocos2d 自带算法
/** @def CCRANDOM_MINUS1_1 returns a random float between -1 and 1返回一个随机漂浮在-1和1之间的随机数 */#define CCRANDOM_MINUS1_1() ((2.0f*((float)rand()/RAND_MAX))-1.0f) /** @def CCRANDOM_0_1转载 2015-06-02 11:57:01 · 687 阅读 · 0 评论 -
Cocos2dx-3.0--- std::bind与CC_CALLBACK不得不说的故事
本篇的主题就是揭露CC_CALLBACK 与 std::bind之间不可告人的秘密......首先看一段代码:?12345678910111213141516171819//先是创建3个精原创 2014-08-23 22:02:07 · 879 阅读 · 0 评论 -
Cocos2dx教程-多线程与异步加载
1.为什么要使用多线程Cocos2d-x是一个单线程循环的引擎,引擎通过每一帧之间更新游戏中各元素的状态,以保证它们之间互不干扰,这个过程中尽管看起来成程序像是在并行运行,但实际上却是一个串行过程。单线程的好处就是我们无需去担心游戏对象更新的线程安全问题,但是当我们的程序遇到某些费时的I/O操作时,单线程的缺点也就显现出来了。举例来说,在游戏进行场景跳转时,通常我们会释放当前场景的原创 2015-04-18 17:48:57 · 4846 阅读 · 0 评论 -
Cocos2dx 3.0 触摸机制
1、 创建一个精灵sprite;2、一个触摸事件 listener ,设置listener的onTouchBegan,onTouchMoved,onTouchEnded;3、将sprite 和 listener关联起来。实现如下:1、 创建精灵:Point origin = Director::getInstance()->getVisibleOrigi转载 2014-10-09 17:44:03 · 542 阅读 · 0 评论 -
Cocos2d-x 3.x RenderTexture渲染纹理源码分析
最近在学习3.x的源码,3.x的渲染机制改动比较大,改变了之前在每帧遍历所有的Node树节点时通过draw()方法中的直接渲染,而是通过生成渲染指令并将渲染指令发送到渲染队列,在每一帧结束时进行延迟渲染,这样就把游戏循环和渲染分离开来,2dx官方说要把渲染放在一个独立的线程来处理,按照3.x现在的架构可能不久就会实现。Cocos2d-x提供了一个RenderTexture类来支持把帧缓冲中转载 2015-10-19 19:20:00 · 3708 阅读 · 0 评论 -
cocos2dx 常见的49中动作
bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCSprite * sp= CCS转载 2015-12-25 15:49:14 · 586 阅读 · 0 评论 -
cocos2dx3.x的所有事件总结
事件系统,是一个软件的核心组成部分。从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块。在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户输入,内存不足等。 然而,通常我们并不直接使用系统事件,例如一个界面可能不同区域的元素对触摸事件的理解都不一样,在某些情况下需要优先处理某些逻辑,这就需要对系统事件再包装,以应对界面复杂的元素和逻辑。转载 2016-08-29 20:01:04 · 3205 阅读 · 0 评论 -
COCOS2DX 3.0 优化提升渲染速度 Auto-batching
有人会问,怎么快速知道到底渲染了多少次了,告诉你吧,游戏左下角有三行数据: GL verts 表示给显卡绘制的顶点数 GL calls 表示代表每一帧中OpenGL指令的调用次数 FPS 这个是帧率不多说 主要看第二个“GL calls”代表每一帧中OpenGL指令的调用次数,这个数字越小,程序的绘制性能就越好。转载 2016-02-25 17:07:02 · 9829 阅读 · 1 评论 -
cocos2dx之onEnter,onExit
cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍层(Layer)的生命周期函数按如下的顺序进行:1、init() 初始化层调用(在类初始化时,只会调用一次)。2、onEnter() 进入层时候调用(init初始完后进入,可能调用多次,如addChild一次就会调用一次)。3转载 2016-06-13 11:02:36 · 1664 阅读 · 0 评论 -
cocos2d-x中有一个JniHelper类详细使用
主体思路通过JNI获取java虚拟机,再获取当前程序的JNI环境,通过JNI环境获取需要调用的java类信息,再获取需要调用的java类中的函数信息。再通过JNI环境调用,使用类信息、函数信息,调用对应的java函数。看起来好像有点复杂,but不用担心,cocos2d-x中有一个JniHelper类(头文件的copyright为:cocos2d-x.org,是Google提供的还是co转载 2015-10-29 11:57:42 · 457 阅读 · 0 评论 -
Scale9Sprite原理
对于CCScale9Sprite类,不知道该怎么翻译,有人叫它点九图,有人叫它九宫图,有有人叫它九妹图。 那么什么是CCScale9Sprite呢?CCScale9Sprite对象,是一种CCSprite对象的变形,它的用法和CCSprite类似,不同点是:CCScale9Sprite对象有个特性就是缩放贴图时可以尽量不失帧。 如下图所示,用普通的CCSprite拉伸后转载 2016-03-15 17:19:28 · 907 阅读 · 0 评论 -
globalZOrder()与localZOrder()
本文转自:http://blog.youkuaiyun.com/star530/article/details/24576057下面看一段3.0Release Notes 对于新渲染器的一段介绍:Node 增加了新的函数 setGlobalZOrder() / getGlobalZOrder(),之前的旧函数 setZOrder() / getZOrder() 也被重命名为 setLocalZ转载 2016-02-25 17:13:20 · 691 阅读 · 0 评论