Aquecimento Global Game Jam
Flixel
Tácio Dias Palhão Mendes
Sumário

Configurando o FlashDevelop
Tratando Inputs.

Configurando o FlashPlayer debug
Desenhando Texto

Adicionando a Flixel (e seus plugins)
Criando Botões

Configurar Preloader
Tocar Sons e Musica

Classe Main
Efeitos Interessantes

Trocar telas
Exemplo Partículas
Criando uma sprite (estática ou
animada)
Recomendações de arquitetutra

Referencias
Configurando o FlashDevelop

1º Passo - Baixar TODAS AS COISAS:

http://www.flashdevelop.org/community/viewtopic.php?f=11&t=9252

http://flixel.org/download.html

http://www.photonstorm.com/flixel-power-tools
Adicionando a Flixel

2º Passo – Criando o projeto
Adicionando a Flixel

3º Passo - Crie uma pasta, no diretório do seu
projeto chamada lib (pode ser qualquer nome
na verdade...)
Adicionando a Flixel Power Tools

Passo Opcional – Copie esta pasta para
dentro do caminho lib/org/flixel/plugin
Adicionando a Flixel

4º Passo - Cole esta pasta dentro da sua pasta
lib.
Configurando o FlashDevelop

5º Passo – Crie uma pasta, no diretório do seu
projeto chamada lib.
Configurando o FlashDevelop

6º Passo – Clique em
Configurando o FlashDevelop

7º Passo – Clique em Classpaths – Add
Classpath
Configurando o FlashDevelop


8º Passo - Escolha a pasta lib dentro do seu
projeto.
Selecione apply, depois OK.
Configurando o preloader

Crie uma nova classe e coloque este código
nela. Você também tem a opção de
sobrescrever o método create() e update() se
quiser personalizar o seu preloader
package
{
import org.flixel.system.FlxPreloader;
public class MyPreloader extends FlxPreloader
{
public function MyPreloader()
{
//Alterar o className.
//Ele deve ser o nome da classe main do projeto
className = "Main";
super();
}
}
}
Classe Main

Sua classe main deve se parecer com isto:
package
{
import org.flixel.*;
//Resolução do .swf
[SWF(width = "800", height = "600", backgroundColor = "#000000")]
//Nome do seu PreLoader aqui
[Frame(factoryClass="MyPreloader")]
/**
* Main.as
* @author Tacio
*/
public class Main extends FlxGame
{
public function Main(){
//Se quiser gráficos pixelados, divida os valores de altura e largura por 2 por exemplo
//E no último parâmetro coloque o último parâmetro (zoom) como 2
super(800, 600, GameManager, 1);
}
}
}
Trocar Telas




As suas telas de jogo, são conhecidas na
Flixel como classes do tipo FlxState.
Sempre que você precisar estender algum
tipo flixel (FlxState, FlxSprite) você sempre
terá que reescrever 2 métodos: create() e
update()
Para criar uma tela, primeiro faça com que
sua classe de tela extenda FlxState
NUNCA REESCREVA O CONSTRUTOR
DAS CLASSES!
Trocar Telas

Seu código deverá se parecer com isto:
package
{
import org.flixel.FlxState;
/**
* ...
* @author ...
*/
public class MyFlixelState extends FlxState
{
public function MyFlixelState() {
//DEIXE SEMPRE VAZIO,
//Do contrário! Você conhecerá o inferno dos problemas aleatórios de memória, etc.
}
override public function create():void {
super.create();
//Suas inicializações Aqui
}
override public function update():void {
super.update()
//Seu código aqui
}
}
}
Trocar Telas

Para trocar de telas, use:
var novoState:MeuOutroFlxState = new MeuOutroFlxState();
novoState.create();
FlxG.switchState(novoState);
Criando Sprites (animadas ou não)

No corpo de atributos da sua state, você deve colocar a imagem
como um recurso Embed, que será carregado pelo preloader:
[Embed(source = "../resources/minhaSprite.png")]
public static var spriteSheetClass:Class;
var minhaSprite:FlxSprite = new FlxSprite();
//
1
2
3
4
5
6
minhaSprite.loadGraphic(spriteSheetClass, true, false, 32, 32, false);
add(minhaSprite);//Adiciona a sprite ao State, ela será atualizada automáticamente!
Criando Sprites (animadas ou não)

Explicando melhor cada parâmetro do loadGraphic:
//
1
2
3
4
5
6
minhaSprite.loadGraphic(spriteSheetClass, true, false, 32, 32, false);
1. Seu embed com a spritesheet
2. Se a sua sprite é animada ou não (caso ela seja, deverá seguir o padrão:

3. Se o FlxSprite deve gerar automáticamente versões flipadas dos gráficos.

4.Largura do Quadro

5.Altura do Quadro

6.Se a sprite será única ou não (default: false);
Tratando Inputs
Checa se a tecla A está pressionada
if (FlxG.keys.pressed("A")) {
}
Checa se a tecla A acabou de ser pressionada
if (FlxG.keys.justPressed("A")) {
}
//Checa se a tecla A acabou de ser solta
if (FlxG.keys.justReleased("A")) {
}
//Checa se o botão Esquerdo acabou de ser pressionado
if (FlxG.mouse.justPressed()) {
}
//Checa se o botão Esquerdo acabou de ser solto
if (FlxG.mouse.justReleased()) {
}
//Checa se o botão Esquerdo está pressionado
if (FlxG.mouse.pressed()) {}
Desenhando Texto

var texto:FlxText = new FlxText(x, y, largura, "seuTexto");

texto.height = 16;

add(texto);

texto.text = "novoTexto";
Quando você configura a altura, a largura é calculada
automáticamente!
Para mudar o valor do seu texto sem precisar reinstanciar um
FlxText, é só mudar a propriedade text do seu texto
Criando Botões


var botao:FlxButton = new FlxButton(x, y, "labelBotao",
tratarEventoDeBotao);
add(botao);
TratarEventoDeBotao, no caso é uma função de callback que será
chamada quando seu botão for clicado, como no exemplo:
private function tratarEventoDeBotao():void {
//Destruir o Michel Teló.
}
Criando Botões


var botao:FlxButton = new FlxButton(x, y, "labelBotao",
tratarEventoDeBotao);
add(botao);
TratarEventoDeBotao, no caso é uma função de callback que será
chamada quando seu botão for clicado, como no exemplo:
private function tratarEventoDeBotao():void {
//Destruir o Michel Teló.
}
Tocar Sons e Musica


Para tocar um som (ou musica), ele precisa estar como um
embed no seu FlxState da mesma maneira como na sprite.
E para tocar um Som:
FlxG.play(som, volume, tocadoEmLoop,
destruirAutomaticamenteAposTocar);

Para tocar uma musica:
FlxG.playMusic(musica, volume);


Volume, tanto para som quanto para musica, varia de 0 a 1;
Tocado em loop e destruir automaticamente após tocar, são
variáveis booleanas.
Efeitos Interessantes


Tremer a tela:
FlxG.shake(intensidade, duracao, callbackAoCompletar, forcar,
direcao);

Dar um flash na tela

FlxG.flash(cor, duracao, callbackAoCompletar, forcar);

Dar um fade na tela

FlxG.fade(cor, duracao, callbackAoCompletar, forcar);
Exemplo Partículas
private var emissorParticulas:FlxEmitter = null;
override public function create():void {
emissorParticulas = new FlxEmitter(300, 300, 10);
emissorParticulas.setXSpeed(300, 5);
emissorParticulas.setYSpeed(0, 2);
var explodir:Boolean = true;
var tempoDeVida:Number = 500.0;
var frequenciaDeEmissaoDeParticulas:Number = 0.1;
var quantidadeEmitida:int = 30;
add(emissorParticulas);
emissorParticulas.start(explodir, tempoDeVida, frequenciaDeEmissaoDeParticulas,
quantidadeEmitida);
}
Exemplo Partículas
override public function update():void {
emissorParticulas.update();
}
Recomendações de Arquitetura




Coloque todos os seus Embed como publicos e estáticos em
uma classe que você só colocara os Embeds do seu projeto
(ResourceManager)
Crie uma classe onde estarão contidos todos as referencias
públicas e estáticas dos seus objetos de jogo, e funções
utilitárias necessárias. (GameData).
Evite instanciar objetos, use a ideia de pool de objetos. Crie
todas as instancias no create(), armazene-as num FlxGroup, e
adicione o FlxGroup no seu FlxState.
As variáveis exist e dead estão presentes em todos os tipos
Flixel, e servem para dizer se o objeto está vivo e/ou se ele
existe. Qualquer objeto que você faça dead = true, deixará de ser
desenhado e atualizado pela Flixel, mesmo que esteja
adicionado a um FlxState! (É LINDO!)
Recomendações de Arquitetura

Evite usar herança, sério, é um pé-no-saco. Se for criar algum
tipo Flixel que dependa de outros tipos Flixel, prefira composição
à herança. Quando você tiver mais de 2 tipos na sua hierarquia
de objetos por exemplo: Personagem filho de Player filho de
FlxSprite, você corre o risco de ter sérios problemas de acesso
de propriedades e/ou performance.
Referências






Flixel Power Tools, um Ótimo plugin para a Flixel criado por
Richard Davey: www.photonstorm.com/flixel-power-tools
Ótimas dicas de Flixel: www.photonstorm.com/topics/flash-gamedev-tips
API da Flixel: http://www.flixel.org/docs/
API da Flixel Power Tools: http://www.photonstorm.com/flixelpower-tools
Flash Game Dojo, Várias dicas relacionadas tanto à flixel quanto
à flashpunk: www.flashgamedojo.com
Google (bom, você saber porque né?): www.google.com.br
Contato:
Fim!
E-Mail: [email protected]
Twitter: @Foxtacy
CaraLivro: /tacio.mendes
MSN: [email protected]
Portfolio de Musicas:
www.foxtacy.newgrounds.com/audio
Dúvidas e feedbacks por favor me procurem!
Obrigathankyou Gosaimasu! :D
Download

Guia rápido do Flixel - Global Game Jam em Curitiba