热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

知易Cocos2D-mysql教程

为什么需要粒子系统如果只是做卡通效果的游戏,我们可以通过动画实现所有游戏视觉效果,ZYG006中的爆炸效果就是这样的。但是如果需要更加真实的效果模拟,实现更加随机的、栩栩如生的烟雾、闪电、雨雪、火花掉落效果,我们就必须使用粒子系统。粒子系统让你

为什么需要粒子系统 如果只是做卡通效果的游戏,我们可以通过动画实现所有游戏视觉效果,ZYG006中的爆炸效果就是这样的。但是如果需要更加真实的效果模拟,实现更加随机的、栩栩如生的烟雾、闪电、雨雪、火花掉落效果,我们就必须使用粒子系统。粒子系统让你

为什么需要粒子系统

如果只是做卡通效果的游戏,我们可以通过动画实现所有游戏视觉效果,ZYG006中的爆炸效果就是这样的。但是如果需要更加真实的效果模拟,实现更加随机的、栩栩如生的烟雾、闪电、雨雪、火花掉落效果,我们就必须使用粒子系统。粒子系统让你的游戏显得更加真实而富有生命感(Ben Britten Smith-《iPhone Advanced Projects》)。

通过对这些自然现象的分析我们发现:这些现象的出现并不涉及一个可以触摸的、很明确的实体,而且现象的本身是动态的(随时间迅速变化的),而这种变化的效果是由大量微小微粒组合而成的,大量的粒子效果叠加成了我们看到的整体效果。这样一来,明确的、可以用数学公式表述的图形、图像效果都很难模拟出这样的效果,因为其中包含着大量的、不确定性的、随机性、混乱的模糊内涵。

物理学上关于大量粒子无规则运动的学科是热力统计学,一个令大家耳熟能详的概念是“熵”。关于这个物理量的典型描述是热力学第二定律,也称为“熵增原理”。当然还有一个更加令人费解但确实又是无可奈何的必然概念是“系综”。

无论是我们主观的分析判断也好,还是热力统计学的基本定律也好,共同的一点认识就是:这些自然现象的存在涉及到大量无规则运动的微粒。因此,为了模拟这样的系统所产生的现象,我们要建立这样一个粒子系统:

1) 包含大量所谓粒子对象(Particles)。

2) 宏观特性: 每一个例子都要遵守的主要规律。

3) 微观特性:每个例子都在宏观属性上的随机、变异特性。

4) 过程动态特性:每个粒子系统模拟的都是一个不断变化的动态效果而不是静态不变的,因此这就有一个持续更新状态的要求。

按照预先设计好的规则,不断产生、喷射出大量粒子,每个粒子按照自己的运动参数不断变化、运动,大量粒子效果叠加成为我们所需要的宏观现象。这样我们就可以模拟出许多栩栩如生的自然效果。

大约在1982年-1983年,一个叫做威廉姆·瑞午斯(William Reeves)的游戏开发者最先使用了这样的系统。他的算法实现了宏观上对粒子群整体的控制,同时保证了微观上各个粒子的无规则乱序运动。这就比较完美的给游戏系统带来的全新的体验。

当然,在一些简单的卡通类游戏和纸牌游戏中添加几丝粒子效果,也可以为玩家带来欣喜、兴奋的视觉体验。让你的游戏显得更加精致而令人珍惜。

粒子系统的组成

一个例子系统通常由以下几个关键部分组成:

l 粒子(Particles)

每一个粒子就是一个图形对象,可以使一色点或者一个图片。下面就是CocosNoded关于粒子的定义:(文件 CCParticleSystem.h)

typedef struct sParticle

{

CGPoint pos; // A位置

CGPoint startPos; // A开始位置

CGPoint dir; // A运动方向

float radialAccel; // 径向加速度。逃离发射原点的速度

float tangentialAccel; // 切线加速度。围绕发射原点旋转速度

ccColor4F color; // A颜色

ccColor4F deltaColor; // B颜色变化

float size; // A大小

float deltaSize; // B大小变化

float angle; // A角度

float deltaAngle; // B角度变化量

float life; // A存在时间

} Particle;

每一个粒子都有自己独立的属性,按照之前关于粒子系统的定义包括两大类:

A类,表述粒子的主属性,也就是宏观系统需要的宏观特性。

B类,代表每个例子的无规则变化属性,也就是微观特性。

这里需要说明的是,发射器对象在生成每一个的时候,已经会在宏观特性的基础之上设置每一个粒子的个性,B类变量保存了这种变化在生命周期中的单步变换量。

l 发射器(emitter)

发射器对象就是一个粒子系统的整体,一片云,一团雾,一次闪电,一股烟都是由一个独立的粒子系统来模拟的,Cocos2d-iPhone中关于粒子系统的定义如下:(文件 CCParticleSystem.h):

@interface CCParticleSystem : CCNode

{

int id;

// is the particle system active ?

BOOL active;

// duration in seconds of the system. -1 is infinity

float duration;

// time elapsed since the start of the system (in seconds)

float elapsed;

/// Gravity of the particles

CGPoint gravity; //A所有粒子的纵、横运动速度。

// position is from "superclass" CocosNode

// Emitter centerOfGravity position

CGPoint centerOfGravity; //粒子重力原点。

// Position variance

CGPoint posVar; //B粒子喷发原点的宽高变化范围。

// The angle (direction) of the particles measured in degrees

float angle; //A粒子喷发角度

// Angle variance measured in degrees;

float angleVar; //B粒子喷发角度的变化范围

// The speed the particles will have.

float speed; //A粒子运动速度

// The speed variance

float speedVar; //B粒子运动速度的变化范围

// Tangential acceleration

float tangentialAccel; //A粒子切向加速度

// Tangential acceleration variance

float tangentialAccelVar; //B粒子切向加速度的变化范围

// Radial acceleration

float radialAccel; //A粒子径向加速度

// Radial acceleration variance

float radialAccelVar; //B粒子径向加速度变化范围

// start ize of the particles

float startSize; //A粒子起始大小

// start Size variance

float startSizeVar; //B粒子起始大小尺寸变化范围

// End size of the particle

float endSize; //A粒子完毕尺寸

// end size of variance

float endSizeVar; //B粒子完毕尺寸变化范围

// How many seconds will the particle live

float life; //A粒子生命周期

// Life variance

float lifeVar; //B粒子生命周期变化范围

// Start color of the particles

ccColor4F startColor; //A粒子开始颜色

// Start color variance

ccColor4F startColorVar; //B粒子开始颜色变化范围

// End color of the particles

ccColor4F endColor; //A粒子结束颜色

// End color variance

ccColor4F endColorVar; //B粒子结束颜色变化范围

// start angle of the particles

float startSpin; //A粒子开始自旋角度

// start angle variance

float startSpinVar; //B粒子开始自旋角度变化范围

// End angle of the particle

float endSpin; //A粒子结束自旋角度

// end angle ariance

float endSpinVar; //B粒子结束自旋角度变化范围

// Array of particles

Particle *particles;

// Maximum particles

int totalParticles;

// Count of active particles

int particleCount;

// additive color or blend

BOOL blendAdditive;

// color modulate

BOOL colorModulate;

// How many particles can be emitted per second

float emissionRate; //粒子喷发速率

float emitCounter;

// Texture of the particles

CCTexture2D *texture_;

// blend function

ccBlendFunc blendFunc_;

// movment type: free or grouped

tPositionType positionType_;

// Whether or not the node will be auto-removed when there are not particles

BOOL autoRemoveOnFinish_;

// particle idx

int particleIdx;

}

通过以上定义我们可以看到,A类属性定义了整个粒子系统的宏观特性,B类属性定义了粒子微观特性,B类属性是由粒子系统在生成每一个微观粒子时通过随机函数CCRANDOM_MINUS1_1随机赋予的,一旦被激活,就可以模拟整个系统的随机、混乱的效果。

粒子和发射器对象描述了一个粒子系统的复杂性的全部属性,我们还可以根据自己游戏设计内容,通过增加新的A、B类属性来增加上述复杂性:闪烁、随机扰动等等。

...

如果您对本文感兴趣,可以到这里下载完整PDF。示例源代码下载。

推荐阅读
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
author-avatar
手机用户2502939333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有