在cocos2dx 2.x中,如果我们要对sprite更换片段shader,写成: myProgram->initWithByteArrays(ccPositionTextureColor_vert, myFragSource); 但是到3.x中,上面做法会导致显示出来的sprite坐标不对. 于是看3.x代码,发现在3.x中,Sprite的默认shader不再是kCCShader_PositionTextureColor(即 GLProgram::SHADER_NAME_POSITION_TE…
摘要: cocos2dx 是一款优秀的多平台,专为2D游戏设计的引擎. 在活跃的开源社区的推进下, 越发稳定和强大. 2.x -> 3.x的更新幅度很大, 性能的提升和功能的丰富也非常明显. 但在享受进步的同时,也要承受迁徙之苦. 本文主要是总结自己迁徙的经历, 以防大家走弯路. 博客: http://www.cnblogs.com/jhzhu 邮箱: jhzhuustc@gmail.com 作者: 知明所以 时间: 2014-06-22 基础准备 进入正题 语法更新 obj-c式命名 ==>…
cocos2dx版本为3.10 1.具体原理和代码可以参考博文<利用shader改变图片色相Hue>,下面的代码根据该博文进行整理优化. 基本原理就是将RGB值转换为HSL值后加上输入的HSL值,再转换为RGB值. 2.spine变色的思路有三种: ①spine::SkeletonAnimation调用shader ②读取spine对应的atlas文件,分析该文件得到所需的png图片,将该图片读入内存,修改内存中像素颜色,然后生成texture赋值给spine中的spAtlas->pag…
转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让图片变灰.网上也有很多用shader处理图片变灰的方法,这些方法确实也实现了让图片变灰的需求,但是android平台从后台切换回来的时候,shader被释放,导致图片位置错乱.关键在于从android后台切换回来的时候需要重新加载shader.我们看一下cocos2dx原生的shader处理方式,我…
在OpenGL ES中,Shader是着色器,包括两种:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader).每个program对象有且仅有一个Vertex Shader对象和一个Fragment Shader对象连接到它. Shader和Program编程步骤: 1. 创建Shader       1)编写Vertex Shader和Fragment Shader源码. 2)创建两个shader 实例:GLuint   glCreateShader(GLenu…
灰度shader 最近在学习shader,就把cocos2d-x 3.x版本中的很简单也很常用的灰度shader拿出来学习一下. #ifdef GL_ES precision mediump float; // ES版本的精度限定符,精度变低后可以提高效率 #endif varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main(void) vec4 c = texture2D(CC_Texture0, v_texCoord)…
本节主要讲利用cocos2dx机制实现opengl es shader脚本的绘制 这里先看下最终效果:                      这里分别实现了灰度效果及残影的效果. 一.绘制基类 这里主要参考了cocos2dx源码中 RenderTexture 的实现,有兴趣的可以了解下. 绘制基类RenderShader主要实现以下方法: //****************************************************************** // 文件名:…
Cocos2d-x底层图形绘制是使用OpenGL ES协议的.OpenGL ES是什么呢? OpenGL ES(OpenGl for Embedded System)是OpenGL三维图形API的子集,针对手机.Pad和游戏主机等嵌入式设备而设计.该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准.OpenGL ES是OpenGL三维图形API的子集,针对手机.Pad和游戏主机等嵌入式设备而设计.Cocos2d-x底层图形渲染使…
安卓端cocos2dx/platform/android路径下CCApplication.h: virtual void openURL(const char* pszUrl); CCApplication.cpp: void CCApplication::openURL(const char* pszUrl) { JniMethodInfo minfo; if (JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/lib/Cocos2dxAc…
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引擎之前,我们可以不那么方便地在我们创建的工程里调试Cocos2d-x的代码,当我们使用了整合后的Cocos引擎,调试Cocos2d-x的代码就变得更加,非常不方便了! 使用Cocos2d-x创建的项目,在最先的版本必须是在Cocos2d-x引擎的目录下,放到其他的位置需要进行各种麻烦的设置,诸如头文…
使用任何版本的Cocos2d-x(1.x,2.x,3.0),在onEnter中调用addChild,都要小心谨慎,因为它有可能导致两种莫名其妙的BUG,莫名其妙的BUG当然难以定位了!更何况这个BUG隐藏在引擎的底层. 接下来是场景还原: 在某个节点下,需要执行这样一段逻辑,在游戏场景中,添加几个节点,由于游戏场景就是该节点的父节点,于是就直接getParent然后调用父节点的addChild,在onEnter函数中添加看上去比较合适,因为这时候该节点的父节点可以访问,而在init函数中,还没有…
Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内完成,就会有掉帧,游戏卡顿.比如,游戏中要解析一个动画json配置,需要60ms,这如果在主线程中搞就掉帧了,那么另再开个线程解析json,解析完了再通知主线程如何?这是可以的,但是考虑一种极端情况,线程切换到json解析线程,直到json解析完成后才切换到主线程,这不是一样掉帧吗!所以理想情况是让…
今天写了 cocos2d-x事件EventListenerTouchOneByOne,发现死活没反应,原代码复制到新工程没问题啊, 后来发现cocostudio用的基础容器(ccui.Layout:create())默认是可交互性的,导出lua发现setTouchEnabled(true); 设置可触摸是true,这就明了拉,是Layout(继承Widget)挡住了事件下发了,按照cocos2d-x事件的原理看了C++源码,发现: void Widget::setTouchEnabled(boo…
cocos2d-x 3.5后使用luasocket:local SOCKET = require "socket"; 结果运行就报错:[LUA-print] USE " cc.exports.socket = value " INSTEAD OF SET GLOBAL VARIABLE lua禁用全局变量 解决办法:在require "cocos.init"之前引入require "socket"; 即可, 代码: cc.Fi…
Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一.   为什么需要内存管理 1. new和delete 2. 堆上申请的内存作用于整个程序,而不是一个两个函数之内 3. 渲染树和整个游戏循环->引导出内存管理(全局变量,局部变量,和堆上申请的变量比较) 注:游戏循环:可以看作一种死循环 绘制 自动释放池的计数管理 绘制:包括时间调度,绘制结点等等 if (_purgeDirectorInNextLoop) { _…
这个东西很烦人,相信很多人都不理解 今天来总结一下,首先有很多概念都要事先弄得清楚明白 1.屏幕分辨率 所谓屏幕分辨率相信很多人都知道他的概念,不就是1280pxX720PX吗?不就是这种形式吗?有什么难的,这几个词在各种手机评测上面不是已经用烂了吗? 可是很多人都没有真正理解这个概念!!! 1280pxX720px 它的意思是纵向1280个像素,横向720个像素. 记住!只是像素而已,和尺寸,和大小,和比例没有半毛钱的直接关系 我一直都以为为什么这个东西要叫做屏幕分辨率,为什么要叫做分辨率?之…
cocos2d-x 是跨平台的游戏开发引擎,支持的平台有 ios , android , windows phone , web , tizen,windows等. 先来搭建开发环境,一般我们开发游戏的编码平台有以下几种: 1. windows 2.linux 3.mac os x 而使用cocos2d-x开发游戏的目标平台一般主要是 android和ios ,以及 windows. 当开发平台是windows时,游戏的目标平台只能是android,windows,windowsphone ,w…
引言Cocos2d-x引擎中有很多Action,这样可以方便的让开发者调用相应的Action去完成一些动作,例如:移动,弹跳,淡入淡出等.可在实际的开发过程中,由于游戏的需要,显然地,引擎自带的Action是完全不够用的,很多时候都需要我们自己去写.今天我就来分享一个让精灵和粒子绕着圆角矩形运动的实例,细讲一下实现过程(仅凭个人想法实现,如有其他更好的方法,欢迎交流分享). 效果该实例类似天天爱消除等系列游戏中的按钮特效: 实现方法刚开始本来考虑自己定义一条圆角矩形的路径,即建一个自己的动作模块…
最近准备学习cocos2d-x,之前一直是做iOS开发的,算是零基础开始学习吧. (此条后来修改,不用配置下面这些东西,下载一个cocosstudio就可以了,直接在里边就创建工程了) 本人用Mac电脑,不多说了,直接开始 第一步:下载需要的文件 1.下载cocos2dx http://www.cocos2d-x.org/download 2.下载android的sdk以及ndk http://developer.android.com/sdk/index.html 注释: 1)ndk可以直接下…
1 ccp : The "ccp" prefix means: "CoCos2d Point" //查看: ../cocos2d-x-2.2/cocos2dx/support/CCPointExtension.h /** * @addtogroup data_structures * @{ */ /** Helper macro that creates a CCPoint @return CCPoint @since v0.7.2 */#define ccp(__…
1.从http://www.cocos2d-x.org/download下载稳定版 比如cocos2d-x-2.2 2.解压cocos2d-x-2.2.zip,比如本文将其解压到 /opt 目录下 3.运行 android-buildsetup.sh,运行之前需要先设置3个环境变量,如将以下变量写到文件 /etc/profile中 export ANDROID_SDK_ROOT=/opt/android-sdk-linux export ANDROID_NDK_ROOT=/opt/android…
初玩Cocos2dx,多多包涵. 感觉版本之间的差异比较大,相对前面的版本来说,3.X更容易上手,更方便了. 一.安装python.我的python-2.7.3.配置环境变量 系统变量里:在Path里面增加 D:\2013\python\Python27 二.安装ant.我的apache-ant-1.9.3.配置环境变量 系统变量里:新建一个,ANT_HOME(D:\2013\ant\apache-ant-1.9.3),然后在Path里面增加 D:\2013\ant\apache-ant-1.9…
这个是很久就开始动手写的一个小游戏了,直到最近才把它收尾了,拖拖拉拉的毛病总是很难改啊. 项目是基于 cocos2d-x v2.2 版本 ,目前只编译到了 Win8 平台上,并且已经上传到了商店,支持 ARM 以及 X86,其它平台的可以自己动手术去编译. 下载试玩:点这里  项目介绍 这毕竟是个小游戏,本身其实没有什么技术难点,主要在于项目的设计,分为如下几个小模块…
关于随机数 cocos2d-x 定义了一个宏 CCRANDOM_0_1 生成的是 [0, 1] 之间的值 因此,要生成  [0-100] 之间的数    CCRANDOM_0_1 * 100 生成 [1,5]  之间的float 数,  就是 CCRANDOM_0_1 * 4 + 1 但是这个随机并不是真正的随机,你多试几次就会发现,每次都是固定的顺序产生,对于随机数我们一般都需要指定一个种子,让它依据这个种子产生. 这里采用当前时间生成随机种子: cc_timeval psv;   CCTim…
学习 Cocos2d-x 有一阵了,现在要做个小东西,第一步就遇到了文字展示的问题,于是想把可能遇到的问题统统整理一下.这一部分也不局限于wp8,全平台应该都是一个解决方案. 先在脑袋里大致想了一下,大致也就分为两个部分,第一部分是普通文字如何展示,第二部分是老大难的中文展示问题. 文本显示控件 Cocos2d-x 中使用 Label 来展示文字,看 官方介绍 可以知道,一共有三种类型的Label ,分别是 CCLabelTTF .CCLabelBMFont .LabelAtlas ,下面逐个来…
引言:我们使用cocos2d-x引擎制作了一款飞行射击游戏,其中创新性地融入了手势识别功能.但是我们在移植过程中遇到了很多的问题,同时也发现网上的资料少而不全.所以在项目行将结束的时候,我们特地写了这篇文章来完整记录我们整个移植的过程,纪念我们项目的成功完成,更以此来表达对帮助过我们的人的感谢.移植过程中我们在网上得到了很多帮助,更要感谢黄杨学长在最后时刻帮助我们突破难关! 0.开发平台 系统:win8 profession 64bit IDE:vs2012 rtm, eclipse cocos…
前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h #ifndef GAMESCENE_BIRD #define GAMESCENE_BIRD #include "cocos2d.h" #include "Box2D/Box2D.h" #include "SimpleAudioEngine.h" U…
我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-24625-8 2014年11月出版 定价:79.00元 404页 16开 内容提要 <我所理解的Cocos2d-x>针对最新的 Cocos2d-x 3.x版本,介绍了Coco2d-x游戏引擎的基本架构.渲染机制,以及各个子模块的功能和原理,并结合OpenGL ES图形渲染管线,深入探讨了游戏开发中涉及…
Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x 3.x游戏开发之旅>是<Cocos2d-x游戏开发之旅>的升级版,修改了Cocos2d-x 2.0版进阶到3.0版后的一些内容,新增了对CocoStudio.UI编辑器.Cocos2d-x 3.x新特性以及网络方面的知识点.主要介绍常用的API使用方式:如何通过官方Demo获取更多关于Coc…
Shader 和 RenderTexture 先贴上两张效果图 (Shader) (RenderTexture) 说一下实现的原因,因为项目中需要夜景,光影的效果.最初想到使用Shader来实现.实现之后.效果还不错.因为最初的测试是在Mac上跑的客户端,效果不错.但是放到手机端上之后.发现效率太低.超过3个光源之后,效率下降的太严重.不过既然做了,就拿出来分享一下.另一个则是用RenderTexture来实现的.效率则比Shader效率高很多. Shader篇 思路讲解 Shader中的所有的…