热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

知易游戏开发教程cocos2dx移植版007

原文:http://www.cnblogs.com/cocos2d-x/archive/2012/06/10/2544260.html 在新的一章中,知易带来了粒子系统

原文:http://www.cnblogs.com/cocos2d-x/archive/2012/06/10/2544260.html


在新的一章中,知易带来了粒子系统的相关知识。如果你不清楚粒子系统到底是怎么一回事,那就赶快来看一下吧。

为什么需要粒子系统

在示例6中,我们通过一组图片实现了炮弹的爆炸效果,这是游戏开发中常见的表现手法之一,它的理论基础就是动画。但是如果我们希望模拟更加真实的效果,比如烟雾、闪电、雨雪、火焰等,我们就需要使用另外一个工具——粒子系统。

粒子系统是计算机图形学中模拟模糊现象的技术之一。一般来说,为了表现某一现象,会有大量的微小粒子被创建出来。从宏观上讲,这些粒子是一个整体,它们是确定的可控的;从微观上讲,这些粒子各自为战,每一个个体都保持着自身的随机性。

粒子系统能让你的玩家眼前一亮,整个游戏都灵动起来。

科普一下

1983年先驱William T. Reeves在《Computer Graphics》上发表了《Particle Systems: A Technique for Modeling a Class of Fuzzy Objects》一文。他向人们介绍了在《Star Trek II: The Wrath of Khan》中使用的粒子系统,被认为是最早掌握此系统的人之一。

维基百科上写的是William "Bill" Reeves,论文上署名的是William T. Reeves,我想应该是同一个人吧,卢卡斯影业的大牛,皮克斯的创始员工之一。

有兴趣的朋友可以去拜读一下大师的文章,十多页,我水平有限,看得很慢,只看了个开头。

使用粒子系统

额,这方面的知识还真是繁杂啊,为了避免一知半解误导大家,所以关于粒子系统的详细介绍请参看知易原教程第7章

http://blog.sina.com.cn/s/blog_537cabb80100i0qu.html

或者老G的学习笔记14

http://4137613.blog.51cto.com/4127613/767801

让我们跳过枯燥的原理和参数介绍,关注最基本的使用。

1)基本用法

像其他类一样,cocos2d-x的粒子效果类也提供了静态函数以方便我们创建其实例。

1 emitter2 = CCParticleSun::node();
2 emitter2->retain();
3 emitter2->setTexture(CCTextureCache::sharedTextureCache()->addImage(s_fire));
4 emitter2->setPosVar(ccp(3, 3));
5 emitter2->setStartSize(20.0f);
6 emitter2->setStartSizeVar(2.0f);
7 emitter2->setEndSize(0.0f);
8 emitter2->setEndSizeVar(0.0f);
9 ccColor4F endColor2 = { 0.0f, 0.0f, 0.0f, 0.1f };
10 emitter2->setEndColor(endColor2);
11 emitter2->stopSystem();
12 addChild(emitter2);


使用这种方法的缺点是我们不能指定粒子的数量,因为它在init内固定了这个值。

1 class CC_DLL CCParticleSun : public ARCH_OPTIMAL_PARTICLE_SYSTEM
2 {
3 public:
4 CCParticleSun(){}
5 virtual ~CCParticleSun(){}
6 // 使用node方法创建的对象实例默认350个粒子
7 bool init(){ return initWithTotalParticles(350); }
8 virtual bool initWithTotalParticles(unsigned int numberOfParticles);
9 static CCParticleSun * node()
10 {
11 CCParticleSun *pRet = new CCParticleSun();
12 if (pRet->init())
13 {
14 pRet->autorelease();
15 return pRet;
16 }
17 CC_SAFE_DELETE(pRet)
18 return NULL;
19 }
20 };



2)更灵活的应用

为了定制粒子的数量,我们会使用另外一种方法:

1 emitter2 = new CCParticleSun();
2 emitter2->initWithTotalParticles(250);
3 emitter2->setTexture(CCTextureCache::sharedTextureCache()->addImage(s_fire));
4 emitter2->setPosVar(ccp(3, 3));
5 emitter2->setStartSize(20.0f);
6 emitter2->setStartSizeVar(2.0f);
7 emitter2->setEndSize(0.0f);
8 emitter2->setEndSizeVar(0.0f);
9 ccColor4F endColor2 = { 0.0f, 0.0f, 0.0f, 0.1f };
10 emitter2->setEndColor(endColor2);
11 emitter2->stopSystem();



3)第三种方式

还有一种方式,那就是使用粒子编辑器来创建粒子效果文件。我还没有尝试过这种方法,只能以后再补充啦。

注意事项

需要注意的是,无论使用哪种方式来创建粒子效果对象,请确保设置了纹理,否则渲染时会崩溃。

此外,这里还涉及到cocos2d-x中对象生命周期的管理。

如果你使用方法一,并将创建的对象保存在成员变量中,那么需要调用retain来避免其自动释放掉,并记得在不用的时候调用release来释放。

如果你使用的是方法二,你要时刻记住“谁申请谁就负责释放”的原则。不过对于这些CCObject对象,请使用release来代替直接delete掉,因为它可能不止一份引用。

小结

虽然繁杂的参数稍稍变动可能就有一个新的效果,但是不要有任何心里负担,你要坚定信心,常用的就那么几个,用的多了自然就会得心应手。粒子系统中不同效果的使用方法是相通的,即便是一个没用过的新效果,只要稍微学习一下,也可以立马上手的。

示例7

在上一个示例的基础上,我们只做两处更改,给敌方坦克的炮弹增加烟雾效果,给我方坦克的炮弹增加火焰效果。

都是非常简单的调用,如果遇到问题,可以参考我上传的代码。

http://files.cnblogs.com/cocos2d-x/ZYG007.rar



推荐阅读
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本文介绍了一种根据用户选择动态切换屏幕界面的方法,通过定义不同的选择块(Selection Block),实现灵活的用户交互体验。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
author-avatar
马彭的小窝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有