PDA

Volledige versie bekijken : Flash 8 on Fire


kH_
%Europe/Berlin %765 %2005, 19:22
Zoals beloofd, ik zou een realtime vuurtje maken in Flash 8. ******, Flash is nu eindelijk zover dat we ook snelle grafische effecten kunnen fabriceren ;)

Na installatie ff in een half uurtje een vuurtje in elkaar geflanst, ok....ziet er niet super uit, maar het was ff een snel probeerseltje dat ik jullie niet wil onthouden. Zie hier het resultaat:

http://n.domaindlx.com/kaHu/vuurtje.swf

Pimm
%Europe/Berlin %798 %2005, 20:09
Het ziet er inderdaad wel OK uit... Het uhm... gaat zeg maar wel.

latino
%Europe/Berlin %806 %2005, 20:20
als je hem super verkleind ziet het er wel mooi uit

kH_
%Europe/Berlin %815 %2005, 20:34
Ten eerste, het ziet er butt uit...het is immers alleen rood. Het enige wat ik hiermee wilde aantonen is dat de snelle oldskool demo effecten nu ook mogelijk zijn in Flash :)

Als ik zin heb ga ik ook nog wel wat shadebobs, 3D blur en bumpmapping effectjes maken, als dit iemand bekend in de oren klinkt :)

Kortom: spelen met filters is leuk.

Voor de mensen die hun eigen vuur effectje willen maken, het is kinderlijk eenvoudig:

In een loopje het volgende doen met een offscreen buffer
(een BitmapData object in Flash Acht):

- Teken een balk van willekeurige kleuren pixels helemaal onderaan de buffer (dus het onderste lijntje in de buffer vullen met random pixels)
- Gooi een blur filter (BlurFilter in Flash Acht) over de offscreen buffer
- Teken de offscreen buffer via een MovieClip, zodat het vuur zichtbaar wordt
- Scroll de offscreen buffer 1 pixel omhoog (of meer om het vuur sneller te laten bewegen)
Let op, dat is dus DE sleutel voor het vuur effect, doe je dit niet...dan beweegt er ook niets

KLAAR!

Zie hieronder de volledige code van het sullige vuurtje:

//AS promised -> exploring the possibilities of Flash Professional 8
//LIGHT MY FIRE ;)
//By _kH
import flash.filters.*;
import flash.display.*;
import flash.geom.*;

var INTENSITY:Number=40;
var SCREENWIDTH:Number=550;
var SCREENHEIGHT:Number=400;
var curtext:Number=0;
var vuurJpg:BitmapData=BitmapData.loadBitmap("fire");
var byJpg:BitmapData=BitmapData.loadBitmap("by");
var khJpg:BitmapData=BitmapData.loadBitmap("kh");
vuurJpg.transparent=true;
var openhaard:BitmapData=new BitmapData(100,100,false,0);
var smoother:BlurFilter=new BlurFilter(2,2,1);
var smoothRect:Rectangle=openhaard.rectangle;
smoothRect.left++;
smoothRect.right--;
smoothRect.top++;
smoothRect.bottom--;
createEmptyMovieClip("scherm",getNextHighestDepth());
scherm._xscale=SCREENWIDTH;
scherm._yscale=SCREENHEIGHT;
scherm._x=Stage.width/2-SCREENWIDTH/2;
scherm._y=Stage.height/2-SCREENHEIGHT/2;
onEnterFrame=function()
{
beginVuur(openhaard);
tekenTekst(openhaard);
maakVurig(openhaard);
teken(openhaard,scherm);
beweegVuur(openhaard);
}

teken=function(buffer:BitmapData,scherm:MovieClip)
{
scherm.clear();
scherm.beginBitmapFill(buffer);
scherm.moveTo(0,0);
scherm.lineTo(buffer.width,0);
scherm.lineTo(buffer.width,buffer.height-1);
scherm.lineTo(0,buffer.height-1);
scherm.endFill();
}

beginVuur=function(buffer:BitmapData)
{
for(var x=0;x<buffer.width;x++)
{
buffer.setPixel(x,buffer.height-1,0);
}
for(var x=0;x<INTENSITY;x++)
{
buffer.setPixel(10+Math.random()*(buffer.width-20),buffer.height-1,0xff0000);
}
}

tekenTekst=function(buffer:BitmapData)
{
if(Math.round((Math.random()*20))==0)
{
var bitm:BitmapData=null;
switch(curtext)
{
case 0:
bitm=vuurJpg;
break;
case 1:
bitm=byJpg;
break;
case 2:
bitm=khJpg;
break;
}
buffer.copyPixels(bitm,bitm.rectangle,new Point(buffer.width/2-bitm.width/2,buffer.height/2));
curtext++;
curtext%=3;
}
}
maakVurig=function(buffer:BitmapData)
{
buffer.applyFilter(buffer,smoothRect,new Point(1,1),smoother);
}

beweegVuur=function(buffer:BitmapData)
{
buffer.scroll(0,-1);
}

SaphuA
%Europe/Berlin %830 %2005, 20:55
Yup erg netjes gedaan :)
Als je nog meer van deze dingetjes hebt kun je ze in de Flash 8 Testjes Dump zetten, krijgen we een leuke verzameling ;)

Voetsjoeba
%Europe/Berlin %884 %2005, 22:14
Ik zie niets ? :/

Roenes
%Europe/Berlin %930 %2005, 23:20
Ik zie niets ? :/Misschien erg overbodig: maar heb je wel flashplayer 8? :)

mateo)
%Europe/Berlin %955 %2005, 23:56
@kH_'s code: ik weet niet of jullie wel eens wat met .net doen. maar daar begint het steeds meer op te lijken.

Voetsjoeba
%Europe/Berlin %269 %2005, 07:28
Roenes - uiteraard - blijkbaar werkt deze swf niet in IE, en wel in Mozilla.

kH_
%Europe/Berlin %315 %2005, 08:34
Werkt zowel in Firefox als IE. Maakt nl. geen ruk uit onder welke browser je hem opstart, net zoals een Java class is een SWF opgebouwd uit generieke platform onafhankelijke code.

Maareh, het is beter om de SWF gewoon direct in een Flash player te laden, dan loopt de SWF namelijk het snelste.

.NET -> Ja, daar werk ik wel eens mee. Maareh, je bedoelt waarschijnlijk dat Flash ActionScript op C# begint te lijken. .NET is namelijk een platform om eventjes bijdehand te doen :P

Zo zul je ook zien dat Java veel lijkt op Flash ActionScript 2.0. En waarom is dat? Omdat Flash AS 2.0 al een aardige OO taal is geworden en Java is ook een OO taal EN aangezien AS veel overeenkomsten heeft met JavaScript (niet vreemd, aangezien het ook een scripttaaltje is dat gebruikt wordt voor de ontwikkeling van Internet toepassingen) is het plaatje compleet :)