Anterior | Índice | Siguiente
Capítulo 8: Partículas - Explosión
Lenguaje: C#
Para: VS2005 / VS2008 / SharpDevelop 2.2
Por Dark-N: hernaldog@gmail.com
Visita mi Blog


http://darknromhacking.com

Ir a Parte 1 | Ir a Parte 3


Objetivo: En este capítulo, un emitidor que simula una explosión.

Nota: Para todo el tópico de partículas use el código libre hecho por uno de los programadores de SDL.Net Rob Loach.

La clave de una explosión de partículas está en al método ParticleCircleEmitter, esta se inicializa así:
ParticleSystem miParticula = new ParticleSystem();
ParticleCircleEmitter explosion = new ParticleCircleEmitter(miParticula, colorPrincipal, ColorSecundario,radioMinimo, radioMaximo);

También, esta clase tiene los atributos:
  • Life: cantidad de particulas por cada frecuencia
  • SpeedMin y SpeedMax: rango de velocidad de la explosión
  • Frequency: a mayor frecuencia, mayor explosion y mas duradera. Recomendado valores sobre 500 para que se vea algo

    Ejemplo de una explosiòn en la pocisión 100,200 de la pantalla:

    ParticleCircleEmitter explosion = new ParticleCircleEmitter(particles, Color.Red, Color.Orange, 1, 2);
    explosion.X = 100; // donde explotará
    explosion.Y = 200;
    explosion.Life = 3; 
    



    Código fuente de está sección (VS2005/V2008):

    #region LICENSE
    /*
     * $RCSfile: ParticlesExample.cs,v $
     * Copyright (C) 2005 Rob Loach (http://www.robloach.net)
     *
     * This library is free software; you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation; either
     * version 2.1 of the License, or (at your option) any later version.
     * 
     * This library is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * Lesser General Public License for more details.
     * 
     * You should have received a copy of the GNU Lesser General Public
     * License along with this library; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     */
    #endregion LICENSE
    
    using System;
    using System.IO;
    using System.Drawing;
    
    using SdlDotNet.Particles;
    using SdlDotNet.Particles.Emitters;
    using SdlDotNet.Particles.Manipulators;
    using SdlDotNet.Graphics.Sprites;
    using SdlDotNet.Core;
    using SdlDotNet.Input;
    using SdlDotNet.Graphics;
    
    namespace EjemploParticulas
    {
    
    	public class Ejemplo2 : IDisposable
    	{
    		
    		ParticleSystem particles = new ParticleSystem();		
    
    		public Ejemplo2()
    		{			
    			Video.WindowIcon();
    			Video.WindowCaption = "SDL.NET - Explosion de Particulas (Haz clic en la pantalla)";
    			Video.SetVideoMode(400, 300);
    			Events.KeyboardDown += new EventHandler(this.KeyboardDown);
    			Events.MouseButtonDown += new EventHandler(this.MouseButtonDown);			
    			Events.Fps = 30;
    			Events.Tick += new EventHandler(this.Tick);
    			Events.Quit += new EventHandler(this.Quit);
    		}
    
    		public void Go()
    		{			
    			Events.Run();
    		}
    
    		[STAThread]
    		public static void Main()
    		{
    			Ejemplo2 particula = new Ejemplo2();
    			particula.Go();
    		}
    		
    		private void Tick(object sender, TickEventArgs e)
    		{			
    			particles.Update();			
    			Video.Screen.Fill(Color.Black);
    			particles.Render(Video.Screen);
    			Video.Screen.Update();			
    		}
    
    		private void KeyboardDown(object sender, KeyboardEventArgs e)
    		{
    			if (e.Key == Key.Escape)			
    				Events.QuitApplication();						
    		}
    
    		private void Quit(object sender, QuitEventArgs e)
    		{
    			Events.QuitApplication();
    		}
    		
    		private void MouseButtonDown(object sender, MouseButtonEventArgs e)
    		{
    			//se define la partícula con el color primario y secundario y el radio de cada particula
    			ParticleCircleEmitter explosion = new ParticleCircleEmitter(particles, Color.Red, Color.Orange, 1, 2);
    			explosion.X = e.X; // donde explotará
    			explosion.Y = e.Y;
    			explosion.Life = 10;
    			explosion.Frequency = 10000; 
    			explosion.LifeMin = 5;
    			explosion.LifeMax = 20;
    			explosion.LifeFullMin = 5;
    			explosion.LifeFullMax = 5;
    			explosion.SpeedMin = 8;
    			explosion.SpeedMax = 20;
    		}			
    		
    
    		#region IDisposable Members
    
    		private bool disposed;
    
    		/// 
    		/// Destroy object
    		/// 
    		public void Dispose()
    		{
    			this.Dispose(true);
    			GC.SuppressFinalize(this);
    		}
    
    		/// 
    		/// Destroy object
    		/// 
    		public void Close()
    		{
    			Dispose();
    		}
    
    		/// 
    		/// Destroy object
    		/// 
    		~Ejemplo2()
    		{
    			Dispose(false);
    		}
    		/// 
    		/// 
    		/// 
    		/// 
    		protected virtual void Dispose(bool disposing)
    		{
    			if (!this.disposed)
    			{				
    				this.disposed = true;
    			}
    		}
    
    		#endregion
    	}
    }
    

    Una vez codificado, si al compilar no arroja errores, debe aparecerte algo como esto al hacer clic en la pantalla:



    Bajar proyecto para SharpDevelop 2.2 (lo siento, esta vez no lo hice en VS.NET ;) aquí.

    Ir a Parte 1 | Ir a Parte 3


    Anterior | Índice | Siguiente
    Volver a Página Principal

    blog comments powered by Disqus
    2003 - 2018    La Web de Dark-N