FLASH Smoke simulation

【Simtalk2.0——第一篇】Simtalk2.0语法入门 赋值符号 := 如 a := 2 运算符 加法,减法,乘法,除法( ​+​, ​-​, ​*​, ​/ ​)和标准函数,如三角函数,对数和指数函数。 ​关系运算符 系运算符 ​=​, ​/ =​, ​>​, ​> =​, ​<​, ​<=​, ​= = ​比较两个值。结果TRUE或FALSE是数据类型Boolean。布尔运算符 ​与​, ​或​, ​不是 ​表达式组合。... 阅读详情
【my word】

图形学里面,在标准的3D API下面模拟这些现象已经很成熟了, 以前也看见过用粒子模拟的这些效果(不过没有收录),这次也就权当补上,这些模拟并非数值上的模拟,仅仅是视觉上的模拟,不过在一般的游戏应用中已经足够了。

原文:http://asgamer.com/2009/game-graphic-design-smoke-flash

----------------------------------------------------------------------------------------------------------------------------------------------------

 
Graphic Design - Making Smoke in Flash

Flash Animated Fire  Smoke Alarms  Action Flash Games  Photoshop Tutorial

What good is smoke? Let’s think for a second. What produces smoke? Failing mechanical equipment, grenades, guns, volcanoes, factories, fires, vehicles, and probably a million other things. So does your Flash game need smoke, well, that’s for your to decide. But the fact of the matter is we can produce some rather convincing smoke with a very simple bit of code and a little Adobe Photoshop. So let’s make some smoke.

Creating Our Smoke Graphic Texture in Photoshop

Open up Photoshop and create a new document 40×40. Now go to your brushes window (F5) and select the brush in the image below.

thepuff-0

and change a few of the settings on this brush as in the image below.

thepuff-01

Now simply go in the middle of your canvas and make a smoke puff. Set the opacity down a little maybe 20% and start drawing. Make a little texture to it.

thepuff-1

It should look a little something like the above. Take your puff and save it as a png. If you don’t like how your puff looks then you can feel free to copy mine above. Just save it, it’s a png and will work well.

Setting Our Smoke Puff up in Flash

Okay. Very simple, Import from the Library your smoke puff. File > Import > Import to Library…

Now just drop the image of your smoke puff dead center in the middle of a new MovieClip, name is SmokePuff.  Your stage should look like the image below:

thepuff-2

Okay so one more thing left to do and you are set. Right click your SmokePuff MovieClip from the Library(CTRL+L) and select Linkage… Now just copy what you see below and click okay.

thepuff-3

One last thing… set your document class to Main. Nice. Flash is ready, let’s start writing some code.

Writing the Actionscript to make some Smoke

Okay guys, this has been a super quick tutorial so far. Lots of images and little to say. Let’s get into the code that will say everything we need to make our smoke fly beautifully. Honestly guys this code is so straight forward, let me just post the Smokepuff.as class at once and explain it later. Make sure you save it to com/asgamer/graphics

package com.asgamer.graphics
{   import flash.display.BlendMode;
	import flash.display.MovieClip;
	import flash.events.Event;   public class Smokepuff extends MovieClip
	{   public var vx:Number;
		public var vy:Number;   public function Smokepuff() : void
		{
			alpha = Math.random();
			vx = Math.random() - Math.random();
			vy = Math.random() * 3 - 5;
			scaleX = scaleY = Math.random();
			addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
		}   private function loop(e:Event) : void
		{
			alpha -= 0.01;
			y += vy;
			x += vx;
			scaleX = scaleY += 0.02;   if (alpha < 0)
				removeSelf();
		}   private function removeSelf() : void
		{
			removeEventListener(Event.ENTER_FRAME, loop);
			parent.removeChild(this);
		}   }   }

Let’s break it down:

  • We have a vx(velocity x) and vy(velocity y) class variable. Both are numbers and will hold the velocity of our smoke puff.
  • In our constructor we set up some basic information we need to use through our smoke puff.
  • alpha = Math.random(); We need some diversity with our puffs, let’s make them all start at a random alpha.
  • vx = Math.random() - Math.random(); Set the vx to something randomly between -1 and 1
  • vy = Math.random() * 3 - 5; We need a negative vy so our smoke will move upward. This line will give us a number between -5 and -2 and some diversity in the speed of our smoke.
  • scaleX = scaleY = Math.random(); Choose a random value to start our smoke’s size. Once again to add some diversity.
  • addEventListener(Event.ENTER_FRAME, loop, false, 0, true); each time we enter a frame… call loop.
  • alpha -= 0.01; Make the alpha go down with each frame.
  • y += vy; x += vx; Apply our velocity to our smokepuff.
  • scaleX = scaleY += 0.02; Make our smoke spread out as it travels.
  • if (alpha < 0)  removeSelf(); If our smoke is no longer visible… let’s get rid of it.
  • removeSelf() no need to fully explain this. It simply removes our event listener and removes the smoke puff from the display stack.

Alright, so that makes our smoke move.  Let’s write the code for the main class.

package
{   import flash.display.Stage;
	import flash.display.MovieClip;
	import flash.events.Event;
	import com.asgamer.graphics.Smokepuff;
	import flash.display.Sprite;   public class Main extends Sprite
	{   public function Main() : void
		{
			addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
		}   private function loop(e:Event) : void
		{
			var smokepuff:Smokepuff = new Smokepuff();
			smokepuff.x = 250;
			smokepuff.y = 250;
			stage.addChild(smokepuff);
		}   }   }

Okay breaking this down is extremely simple. We’re just creating an event listener to call loop on every enter frame like we did in Smokepuff. In the loop class we simply are creating a Smokepuff and positioning it at (250, 250) and adding it to the stage. From here our Smokepuff code will do everything on it’s own with a little help from garbage collection in the end.

Ready to see what it looks like?

The Flash plugin is required to view this object.

Awesome we’re done. Here’s the final source:
Making Smoke in Flash Source Code Zip Archive

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计06 字段详细内容编号​B1类型​PaaS + MaaS(基于微服务 + 事件溯源 + CQRS + 国产化组件:鲲鹏CPU + 昇腾GPU + TiDB + Ceph国产版 + Kafka国产版 + 东方通中间件 + 华为云CDN + WebSocket + QUIC)问题​微服务 + 事件溯源 + 鲲鹏920 + 昇腾910 + TiDB + Ceph(XSKY)+ 国产Kafka + WebSocket + QUIC 电-热-力耦合:如何支持单个超大客户(10亿注册用户,5亿日活),每秒1亿条消息 + 10 阅读详情

相关推荐

em_plant simTALK教程

eM-Plant工厂、生产线及生产物流过程的仿真与优化系统 可以对从全球生产设施、当地工厂到具体生产线的各级生产厂规划的材料流、资源利用和物流情况进行优化 simtalk为其编程语言

Tecnomatix plant simulation基础及Simtalk编程入门视频教程

主要内容: 一、Tecnomatix plant simulation基础 1.1类、对象和实例 1.2 plant simulation基础操作 二、simtalk语法基础 2.1代码注释、变量和数据类型 2.2运算符和逻辑控制 2.3 文本处理和数...

santayana的专栏 1万+

Simulation 仿真

Ross写的关于仿真的一本书,是第四版,覆盖了很多最基本的概率与仿真尝试,值得下载。

Plant Simulation学习之旅——官方教程的指导(补充)

Plant Simulation学习之旅——官方教程的指导开始阶段 跟着教程学习第一阶段 简单流程第一阶段 简单流程的仿真分析第二阶段 分层设计的思想 开始阶段 跟着教程学习 我也是刚开始学习这个仿真软件,想在网上找些资料发现大都具有非常浓厚的历史味道,所以决定镶口好牙,啃起来。 首先先从官方指导着手。它简短而全面,足以让初学者开始在Plant Simulation中创建和执行仿真模型。但在这之前...

gw_dragon的博客 5万+

SimTALK 1.0语法学习.pdf

适合机械工程、工业工程、管理科学与工程的高年级本科生或研究生使用,simtalk是使用plant-simulation进行仿真的一门重要语言,希望对大家有所帮助

plant simulation基础培训教程(中文)

plant simulation基础培训教程(中文),含实例,对plant simulation菜单进行了基础性的介绍,适合新手快速掌握软件。

SimTalk 笔记(二)———— 用Method创建模块

1. Objects obj := .MaterialFlow.SingleProc.createObject(.Models.Frame,x,y,“Maschine”) Maschine.ProcTime := 50 创建其他模块时更改模块的类型和其所在的标签页 2. Connection of Objects obj := .MaterialFlow.Connector.connect(.Mo...

KibaSE的博客 2756

plant simulation and simtalk

车间布局规划与物流仿真软件em-plant的教程,包括编程语言simtalk的使用手册

Unity粒子系统实战:从核心模块到性能优化的特效设计指南

粒子系统是实时渲染中模拟动态视觉效果的通用技术,通过控制大量微小粒子的运动、外观和行为,模拟火焰、烟雾、水流等自然现象或魔法、爆炸等艺术效果。其原理基于模块化参数控制,每个模块负责粒子生命周期的特定阶段,如发射、运动、外观变化等,通过数据驱动实现复杂的视觉叙事。在游戏开发、影视特效和互动媒体中,粒子系统能极大增强沉浸感和表现力,是连接用户情感与虚拟世界的关键技术。本文以Unity引擎为例,深入解析其粒子系统的核心模块与实战应用,涵盖从基础概念到高级性能优化的完整工作流,帮助开发者掌握用数据‘雕刻’视觉、用逻

weixin_30753873的博客 395

em-plant simulation and simtalk

英文原版 em-plant教程,包含simtalk语言教程及大量实例

学习STM32的无人机控制

设计并实现无人机控制系统,使用STM32单片机进行控制。无人机控制系统主要包括飞行控制、姿态控制、定位导航等功能。以下是一个基于STM32的无人机控制系统的代码案例。以上是一个基于STM32的无人机控制系统的代码案例,包括飞行控制、姿态控制和定位导航等功能。请根据实际情况进行修改和完善。

qq_67153941的博客 837

UE5 Niagara粒子系统:5分钟打造电影级爆炸特效实战指南

实时视觉特效是游戏与影视制作的核心技术之一,其原理在于通过程序化或粒子系统模拟自然现象的动态视觉效果。Niagara作为虚幻引擎5中现代化、数据驱动的粒子系统,通过模块化堆叠与可视化节点编辑,极大地降低了高级特效的制作门槛,为开发者提供了高效、灵活的特效创作工具。其技术价值在于实现了复杂物理现象的实时模拟与动态参数控制,使特效能够无缝集成到游戏逻辑中,广泛应用于游戏战斗、环境互动、过场动画等场景。本文聚焦于利用Niagara的模块化设计,快速构建包含爆心闪光、冲击波、浓烟、碎片及地面痕迹的爆炸特效,其中【模

迷彩风情 399

内窥镜胶囊(胶囊内镜)硬件方案

内窥镜胶囊(胶囊内镜)硬件方案 前言 说明:该方案为作者2018年上半年完成的第一版,后来搁置了一段时间,才重启这个项目。目前(2020.07)第二版已经快要完成。[联系v:1#7#6#3#3#3#5#0#8#7#0]先给一下第一版和第二版的基本参数。 第一版: 续航时间:3h 帧率:0.5fps 尺寸:12mm * 25mm 角度:45° 第二版: 续航时间:12h 帧率:2-6fps 尺寸:9.8mm * 25mm 角度:130° 第一版属于尝试版,整体方案不是很成熟。第二版这个数据就非常优秀了。我拿了

CrekerLi的博客 4776

基于STC89C52与Proteus仿真的木材仓库火灾报警系统设计实战

嵌入式系统开发是物联网与智能硬件领域的核心技术,其核心原理在于通过微控制器(MCU)协调传感器、执行器与通信模块,实现对物理世界的感知与控制。这项技术的核心价值在于能够构建低成本、高可靠性的专用电子系统,广泛应用于工业自动化、环境监控与智能家居等场景。以火灾预警为例,传统单一传感器系统存在误报率高、响应慢的局限。通过集成温度与烟雾传感器,并利用STC89C52单片机进行多参数融合判断,可以显著提升预警的准确性与及时性。本文以木材仓库为具体应用场景,详细阐述了如何运用DS18B20温度传感器与MQ-2烟雾传感

weixin_33985679的博客 317

A Super-Resolution Imaging Method for Forward-Looking Scanning Radar Based on Improved TV论文阅读

具体而言,作者提出了一种改进的总变差(Improved Total Variation, ITV)方法,通过引入。论文旨在解决前视扫描雷达(Forward-Looking Scanning Radar)超分辨率成像中传统。(Batch Processing),以增强图像边缘特征的保留能力,并提升计算效率。论文的核心创新点在于对传统TV正则化的邻域梯度计算进行扩展,提出。ITV剖面(图3d)在噪声下仍保持矩形边缘,仅存。​(公式10):实现稀疏约束。),抑制远端单元贡献。(幅度远低于目标)。

yangqoor的博客 1238

别再死记硬背了!一张图搞懂无刷电机半桥与全桥驱动的核心差异(附避坑指南)

本文深入解析无刷直流电机的半桥与全桥驱动方式的核心差异,提供直观对比与选型指南。半桥驱动结构简单、成本低,适合低要求场景;全桥驱动性能优越但复杂,适用于高精度控制。文章还包含实战避坑指南,帮助工程师优化驱动方案选择与应用。

weixin_29290947的博客 318

嵌入式自动化测试实战:从框架搭建到CI/CD集成

自动化测试是软件工程中保障代码质量的核心实践,其原理是通过预设脚本自动执行测试用例并验证结果,从而替代重复的手动操作。在嵌入式开发领域,这一技术价值尤为突出,能够有效解决因硬件依赖、环境多变和后期集成带来的调试难题。通过构建分层测试体系(单元测试、集成测试、系统测试),并结合主机模拟与目标机实测的混合模式,工程师可以大幅提升测试的可靠性和效率。在应用场景上,无论是基于STM32、FreeRTOS的物联网设备,还是运行Linux的嵌入式平台,自动化测试都能嵌入持续集成流程,实现快速反馈。本文以实战为导向,深入

weixin_34355559的博客 420

睿尔曼超轻量仿人机械臂--医疗工作站运行Demo(Python)

开发环境系统:win10Python版本:python 3.11.2由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。

realman_Rop的博客 1091

[PlantSimulation]#C009#Simtalk语法学习-S01-匿名标识符

当您在方法中使用匿名标识符RootFolder时,RootFolder指定类库中的一个文件夹,您已经为该文件夹设置了属性RootFolder。匿名标识符RootFolder指定类库中存储方法的文件夹,许多对象使用这些方法。这样可以避免浪费主内存,避免在进行Plant Simulation时使用长路径,然后只从类库调用此方法一次,而不是从该方法的大量实例中调用。在这里,Plant Simulation查找您为其设置属性RootFolder的文件夹,首先是您将为其编写控件的对象插入其中的框架的类。

yuanzhongliang的博客 955

下采样新突破!ADown模块让YOLOv11多尺度特征提取更精准

ADown 凭借可编程梯度信息与多分支特征聚合的创新设计,打破了传统下采样在特征保留上的固有局限。本教程从原理到代码实现,再到工业场景适配,完整呈现了其在 YOLOv11 中的集成路径。只需简单新增模块脚本并修改配置文件,你的目标检测模型就能在多尺度特征捕捉能力上实现跨越式提升——无论是学术研究中的小目标检测突破,还是工业场景下的复杂多尺度任务落地,ADown 都能成为你攻克下采样瓶颈的利器。现在就动手尝试,让你的检测模型在下一代下采样技术的创新中再上一个台阶吧。

know_F0727的博客 524

EMS案例:BMS传导发射超标整改案例

BMS作为新能源汽车的关键部件,其EMC性能直接影响整车的安全性和可靠性。本文通过一个实际的传导发射整改案例,详细展示了从问题定位、分析到解决方案实施的全过程。希望这些经验能够为从事类似产品设计的工程师提供有价值的参考,在未来的产品开发中避免类似问题,设计出更加可靠、稳定的BMS产品。EMC设计是一门结合理论与实践的艺术,只有通过不断积累经验、深入理解电磁场理论,并紧密结合实际应用场景,才能在复杂的电磁环境中设计出鲁棒性强的电子产品。

m0_56451176的博客 272

Simtalk 学习笔记

Method 命名 Reset:重置仿真时执行 Init:开始仿真时执行 EndSim:结束仿真时执行 @.move @.move @.move(name) @.move(后续节点) @.insert 把MU移动到目标位置 @.insert(Conveyor, 5.6) @.transfer 直接移动,会挤掉别的MU 常见属性 succ(<intege...

weixin_44478522的博客 4183

C++ Qt6 qml CMakeLists.txt如何添加qrc文件

本文介绍了在Qt6项目中如何通过CMake管理QML图片资源。相比Qt5的qmake,CMake需要手动创建qrc文件并配置CMakeLists.txt。关键步骤包括:1)创建resources.qrc文件并添加图片资源;2)在CMakeLists.txt中设置CMAKE_AUTORCC为ON开启自动资源处理;3)使用qt_add_resources将qrc文件绑定到项目。配置完成后,可通过"qrc:alias"方式引用资源图片,解决了相对路径管理复杂的问题。

琅嬛福地 1453

Plant Simulation编程语言SimTalk中SPrint和Print的区别

本人原创,转载说明出处。 公众号:仿真社区Plant Simulation 目录 解释 代码演示 1、解释 SPrint:(String Print)把格式化的字符串输出到某个字符串缓冲区(变量); ...

知识的海洋 1664

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: [转载]Build a Fluid Website Layout
下一篇: [ZZ]CSS FRAME WORK – A SURVEY AND INTRODUCTION
zinking3
博客等级 码龄20年 262粉丝 215原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值