SpotLights to RTS games and pseudo inverse masks

Well… Today a friend of mine asked me to help him with a night render for his RTS game. He needed an inverse mask to his MovieClip (which was his entire game). I thought a little and I decided to help him. I started writing an inverse mask, but I realized that this would exhaust the cpu. So I thought that what really matters to him is to create a layer of fog on his game, so I wrote (in a few minutes) 2 classes that manage theses “Spots Lights”.

The result as you can see is here (drag the red circles):

This movie requires Flash Player 10

As I’m writing codes that are not related to my engine (the one I’m writing for my final project), I decided to create a Google Code Repository for my extra experiments. This way the classes will be always there. This first experiment can be improved a lot. If you have some comments or know a better way of doing it, please let me know ;)

This example’s class is here:

package {
    import com.filipesilvestrim.game.render.light.SpotLight;
    import com.filipesilvestrim.game.render.light.SpotRenderer;

    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;

    [SWF(width=350, height=468)]
    public class SpotExperiment extends Sprite
    {
    private var spotRender 		: SpotRenderer;
    private var spotSelected 	: SpotLight;

    [Embed(source="aoe.jpg")]
    private var map : Class;

    public function SpotExperiment()
    {
        stage.scaleMode = StageScaleMode.NO_SCALE;
        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        addEventListener(Event.MOUSE_LEAVE, onMouseUp);
        addEventListener(Event.ENTER_FRAME, onEnterFrame);

        //Adding the background (in some cases the game as itself)
        addChild(new map());

        //creating the render. The first param is where we'll add the representation, the second is the width and the third is the height
        spotRender = new SpotRenderer(this, 350, 468);
        //here we can change the fog color to other one and the transparency
        spotRender.changeColorMap(0x000000, 1);

        //Now we're adding 3 spots of diferent sizes and position
        //As params we have: name, pos X, pos Y, width, height
        var spot1 : SpotLight = new SpotLight("spot1", 200,200,200,200);
        //we can adjust the intensity from 0 to 1
        spot1.intensity = 1;
        //the focus can be adjusted too
        spot1.focus = .5;
        //adds the red ball for debug
        spot1.debug(this);
        //add the spot to be rendered
        spotRender.addSpot(spot1);

        var spot2 : SpotLight = new SpotLight("spot2", 250,300,100,100);
        spot2.debug(this);
        spotRender.addSpot(spot2);

        var spot3 : SpotLight = new SpotLight("spot3", 100, 100, 300, 300);
        spot3.debug(this);
        spotRender.addSpot(spot3);

        //render as first time to the scenario don't appear without no one fog
        spotRender.render();
    }

        private function onMouseDown ( event : MouseEvent ) : void
        {
            //if some spot is target
            if (spotRender.getSpot(event.target.name) != null)
            {
                //hold in the spotSelected variable the sport that represents that Sprite ball
                spotSelected = spotRender.getSpot(event.target.name);
            }
        }

        private function onMouseUp ( event : Event ) : void
        {
            //if mouse released
            spotSelected = null;
        }

        private function onEnterFrame ( event : Event ) : void
        {
            //hold the spots changes (if some spot selected)
            if(spotSelected != null)
            {
                //reposition the spot and the debug reference accourding the mouse position
                spotSelected.x = spotSelected.spriteDebug.x = mouseX;
                spotSelected.y = spotSelected.spriteDebug.y = mouseY;
                //when change the position the sportRender must be rendered again
                spotRender.render();
            }
        }
    }
}

[SWF]http://www.filipesilvestrim.com/blog/wp-content/uploads/2009/02/labs.swf, 350, 468[/SWF]
4 Comments »

Material (artigo e exemplos) do minicurso de ActionScript 3.0 para Games

Olá pessoal,

fiquei meio parado nas duas últimas semanas por causa do SBGames 2007 e de uns projetos pessoais.

O SbGames 2007 foi simplesmente ótimo e o pré-evento GDS superou as expectativas.

O AUGRS apresentou duas palestras, uma de AS2 e Advergames com Pedro Taranto e Alberto Amaral e a minha de AS3 para Games.

O meu minicurso teve como título “Conhecendo o ActionScript 3.0 para o desenvolvimento de jogos utilizando o Adobe Flash CS3″ e foram abordadas questões desde o básico do AS3 referindo-se a DisplayList e ao Sistema de Eventos até a parte de Simulações de Física com a APE e 3D com Papervision 3D.

O artigo pode ser adquirido nesse link http://www.filipesilvestrim.com/gds_2007/minicursoAS3Games.pdf e os exemplos (classes e .fla) podem ser feitos o download aqui http://www.filipesilvestrim.com/gds_2007/Fonte.zip .

Atenção: Ao fazer o download dos códigos fonte, favor ler o arquivo leia-me.html para que os exemplos rodem corretamente.

2 Comments »

Palestra – ActionScript 3.0 para o desenvolvimento de jogos

 

Estarei palestrando um mini curso de ActionScript 3.0 para o desenvolvimento de jogos no pré-evento do SBGames 2007 (Simpósio Brasileiro de Games).

Para assistir a palestra basta se inscrever no SBGames e marcar a opção de que irá assistir ao pré-evento GDS (Game Development School).

 

Detalhes da palestra:

Dia 6 de Novembro
14:00 – 17:00

Conhecendo o ActionScript 3.0 para o desenvolvimento de jogos utilizando o Adobe Flash CS3.

Filipe Ghesla Silvestrim

AUGRS – Adobe User Group do Rio Grande do Sul http://www.augrs.com

Resumo: Introduzir a linguagem de programação ActionScript 3.0 no desenvolvimento de jogos utilizando o software Adobe Flash Professional CS3 como plataforma de desenvolvimento.

Público-Alvo: Intermediário

Pré-Requisitos: Conhecimento de lógica de programação para jogos.

Mais informações sobre o SBGames no site http://www.inf.unisinos.br/~sbgames

Mais informações sobre o pré-evento no endereço http://www.inf.unisinos.br/~sbgames/GDS-port.html

7 Comments »

Filipe Silvestrim is a Brazilian Game Developer. Have in his background expertize in many technologies, but has his focus on the Flash Platform. Is the founder and currently act as Manager of the AUGRS - Adobe User Group Rio Grande do Sul.