What's new
Loading the release notes…
The release notes are written in Portuguese.
-
Brasa 0.6.0
LatestDownload 0.6.0Brasa 0.6.0
O jogo roda dentro do editor, as listas da interface rolam, o jogo salva dados, toca música em OGG e MP3, e o editor e o instalador ganharam inglês.
O que há de novo
-
Painel Jogo. O Play roda o jogo numa aba ao lado do Editor, sem abrir outra janela. Clique no jogo para ele receber o teclado. No topo do painel dá para escolher Neste painel ou Numa janela.
-
Listas que rolam. No Inspetor de um Painel, Rolar esconde o que passa da borda e a roda do mouse rola a lista. O código tem
setScrollescroll, emouseWheel()devolve a roda do mouse para o jogo usar. -
Mouse entrou e saiu. Além do clique, os elementos da interface avisam quando o mouse entra e sai:
linha.onMouseEnter(this, [linha] { linha.setColor(Color{58, 68, 102, 220}); }); linha.onMouseLeave(this, [linha] { linha.setColor(Color{30, 34, 54, 220}); });
-
Salvar dados do jogo.
brasa::Saveguarda números, textos e sim/não entre uma execução e outra (o recorde, o que foi comprado, as opções):Save::set("recorde", pontos); int recorde = Save::getInt("recorde");
O arquivo fica em
%APPDATA%\Brasa\Jogos\<nome do jogo>\save.json. -
Música e sons comprimidos. O projeto aceita
.ogge.mp3além do.wav.Audio::playMusic("tema")toca a música de fundo lendo o arquivo aos poucos (não ocupa a memória toda), comstopMusic,setMusicVolumeemusicPlaying. Os efeitos curtos continuam comAudio::play. -
Editor e instalador em inglês. O instalador pergunta o idioma na primeira tela (começa no do Windows) e o editor abre nele. Para trocar depois: Projeto › Preferências › Idioma; vale na hora.
-
Excluir projeto pelo hub. No menu do projeto, Excluir projeto... manda a pasta inteira para a Lixeira do Windows (dá para recuperar de lá). Remover da lista continua só tirando da lista.
-
Modelo Zumbis atualizado. A loja rola, as linhas acendem com o mouse, o recorde fica salvo e o jogo tem música de fundo.
Também nesta versão
- A câmera com zoom anda suave na diagonal (sem tremer de pixel em pixel).
- Sem frestas entre os tiles quando a tela do jogo é ampliada por um número quebrado (no painel Jogo, ou numa janela com "Manter proporção" ou "Esticar").
- Ao perder o foco (Alt+Tab, clique fora), o jogo solta as teclas que estavam apertadas.
Para quem atualiza
Nenhum projeto muda: o formato continua o da 0.3. O arranjo dos painéis do editor é mantido, e o painel Jogo aparece como uma aba ao lado do Editor.
Limites desta versão
- As mensagens da engine e do
brasa_cli(o que aparece na Saída vindo do jogo) continuam em português. - Os nomes que fazem parte do projeto (camadas, ações de entrada) não mudam com o idioma do editor.
- No painel Jogo, a imagem passa por um filtro suave quando o painel não tem um tamanho múltiplo da resolução do jogo; em janela ou tela cheia ela continua "seca".
- A lógica do jogo roda a 60 passos por segundo; num monitor de 120 Hz ou mais o movimento não usa a taxa toda.
- Só uma música toca por vez.
- Sem caixa de digitar texto, slider nem caixa de marcar na interface.
-
-
Brasa 0.5.0
Download 0.5.0Brasa 0.5.0
A interface do jogo (menus, HUD, telas, lojas) agora é montada no editor, com o mouse, e comandada pelo código.
O que há de novo
-
Recurso Interface. Em Recursos, + › Nova interface... cria um arquivo
nome.ui.jsone abre a aba dele: a tela do jogo, onde você põe e arrasta Painéis, Textos, Imagens, Botões e Barras. O que aparece na aba é desenhado pelo mesmo código do jogo. -
Aparência no Inspetor. Âncora (o elemento acompanha a tela em qualquer resolução), posição, tamanho, cores com transparência, borda, sprite de fundo em 9 fatias (os cantos não deformam), texto, alinhamento, quebra de linha e as cores do botão com o mouse em cima e apertado.
-
A lógica é do código. O editor cuida da aparência; o que cada botão faz e o que cada texto mostra você decide no código, com um endereço para a interface e os elementos dela:
Ui::Element loja = Ui::get("Loja"); loja["Moedas"].setText("Moedas: 12"); loja["Fechar"].onClick(this, [] { Ui::hide("Loja"); }); loja.show();
Dá para mudar texto, valor da barra, sprite, cores, fonte, posição, tamanho, esconder e desativar um botão.
-
Listas. Um Painel pode organizar os filhos em coluna, linha ou grade. O código copia um item montado no editor com
clone(um por item da loja, do inventário, da seleção de fase) e tira comremove. -
Fontes. + › Importar fonte (TTF)... traz uma fonte para o projeto. Textos e botões escolhem a Fonte e o Tamanho em pixels. O texto com fonte é desenhado na resolução da janela: fica nítido mesmo num jogo de pixel art ampliado.
-
Texto com acentos. A fonte embutida agora escreve
ação,coraçãoeaño, e tem tamanhos (8, 16, 24...).drawTextganhou as formas com tamanho e com fonte. -
Pausar o jogo.
setPaused(true)para as instâncias (temporizadores,onUpdate, movimento e colisões); o desenho e a interface continuam. Enquanto pausado, as instâncias recebemonPausedUpdate(). Trocar de room tira a pausa. -
Zoom da câmera. No Inspetor da room, Zoom amplia o mundo sem ampliar a interface: dá para fazer um jogo de pixel art (sprites de 16 pixels) em 1920×1080, com menus e textos em alta resolução. O mouse (
mouseX,mouseY) já vem em coordenadas do mundo. -
Cada room abre as interfaces dela. No Inspetor da room, a seção Interfaces marca quais aparecem junto (o HUD nas fases, o menu na room do menu).
-
O clique na interface não vaza para o jogo. Com o mouse em cima de um botão ou painel,
mousePressede companhia devolvemfalsepara o jogo.Ui::mouseOver()diz se o mouse está na interface. -
Edição confortável. A tela do jogo se ajusta à aba (roda do mouse: zoom; botão do meio: arrastar). Mover e redimensionar pelas alças, setas para mover de 1 em 1 pixel (Shift: 8), guias que grudam nas bordas e no meio do pai e dos irmãos (Alt desliga), copiar, recortar, colar, duplicar, desfazer e refazer.
-
Modelo novo: Zumbis. Um jogo de tiro visto de cima em 1920×1080: ondas de zumbis, dinheiro, loja com armas e munição, HUD, pausa, fim de jogo e sons. Mostra o zoom da câmera, a interface com listas e a pausa pelo código. A arte e os sons são próprios da Brasa.
-
Modelo Plataforma atualizado. O placar, a tela de pausa (Esc) e a de fim de fase são interfaces, ligadas pelo código da
Fase.
Também nesta versão
- As imagens de pixel art ampliadas no editor (a folha do sprite, os tiles, a paleta da camada) deixaram de sair borradas.
Para quem atualiza
Nenhum projeto muda: o formato continua o da 0.3, e a interface é um recurso a mais. Os jogos que desenham o placar com
drawTextcontinuam funcionando.Limites desta versão
- Sem rolagem: uma lista maior que o painel passa da borda.
- O único evento é o clique do botão; ainda não há "mouse entrou" e "mouse saiu".
- Sem caixa de digitar texto, slider nem caixa de marcar.
- As posições e os tamanhos são em pixels do jogo, sem tamanho relativo à tela (as âncoras cobrem o caso comum).
- A fonte embutida só tem múltiplos de 8 pixels; para outros tamanhos, importe um
.ttf. - As fontes cobrem o inglês, o português e o espanhol (Latin-1).
- Ainda não há como salvar dados do jogo (o que foi comprado, o recorde) entre uma execução e outra.
-
-
Brasa 0.4.0
Download 0.4.0Brasa 0.4.0
Agora dá para exportar o jogo e mandar para outra pessoa.
O que há de novo
- Exportar jogo. Em Projeto › Exportar jogo..., escolha uma pasta. A Brasa compila o jogo e monta uma pasta com o nome do projeto, com o executável e uma pasta
data(as rooms, os objetos, os sprites, os tilesets e os sons). Quem recebe só precisa abrir o.exe: não precisa da Brasa, do Visual Studio nem de nenhum arquivo a mais. - Zip pronto para enviar. A opção Gerar também o .zip cria um arquivo só, com a pasta do jogo dentro.
- O código-fonte não vai junto. Só o que o jogo lê é copiado. Os
.cpp, os.hpp, a lixeira e os arquivos de trabalho ficam de fora. - Pela linha de comando:
brasa_cli export <pasta do projeto> <pasta de saída>faz o mesmo (--no-zippula o zip).
Por dentro
- O código do editor foi reorganizado em arquivos menores, por assunto (configurações, diálogos, Play, Inspetor, Recursos...). Nada muda no uso: é para a Brasa continuar fácil de manter e de receber recursos novos.
Para quem atualiza
Nenhum projeto muda. O formato continua o da 0.3.
Limites desta versão
- Só exporta para Windows.
- O jogo exportado usa o ícone da Brasa; ícone próprio vem depois.
- Os dados ficam numa pasta ao lado do executável, em arquivos comuns: não são empacotados nem protegidos.
- Não há instalador para o jogo: o que se envia é a pasta ou o zip.
- Exportar jogo. Em Projeto › Exportar jogo..., escolha uma pasta. A Brasa compila o jogo e monta uma pasta com o nome do projeto, com o executável e uma pasta
-
Brasa 0.3.0
Download 0.3.0Brasa 0.3.0
A room ganhou camadas, como no GameMaker, e com elas veio o tilemap: dá para pintar o cenário com tiles, com colisão, sem criar um objeto para cada bloco.
O que há de novo
- Camadas na room. Um painel novo, Camadas (à esquerda, embaixo de Recursos; pode ser arrastado para outro lugar), lista as camadas da room: a de cima fica na frente. Dá para criar, renomear, reordenar, esconder e travar. A camada clicada é a ativa, e é nela que o mouse mexe. São quatro tipos:
- Instâncias: os objetos, como antes.
- Fundo: uma cor ou uma imagem (um sprite), que pode repetir, esticar e andar sozinha.
- Sprites: sprites soltos, só de enfeite, sem objeto e sem código.
- Tiles: uma grade de tiles de um tileset.
- O depth é da camada. Objeto e instância não têm mais Depth: quem está numa camada é desenhado na ordem dela. No Inspetor da instância, a linha Camada troca a instância de camada.
- Tileset. Em Recursos, + › Novo tileset... cria um tileset. Ele aponta para um sprite: cada frame do sprite é um tile (importe a imagem como sprite e fatie no tamanho do tile). Na aba do tileset, clique nos tiles para marcar os sólidos.
- Pintar tiles. Com uma camada de Tiles ativa, o Inspetor mostra a paleta. Clique num tile (ou arraste para pegar um bloco) e pinte na room. Ferramentas: Pincel (B), Borracha (E; o botão direito sempre apaga), Balde (G) e conta-gotas (Alt + clique). Cada traço é um passo do desfazer.
- Colisão pelos tiles. Tile sólido barra o movimento como um objeto sólido: vale em
placeFree,moveAndStop,onGround,hitFloor,hitWallehitCeiling. Uma camada de enfeite desliga isso em Colide. - Colisão na forma do tile. Na aba do tileset, cada tile pode ser Nada, Célula (barra na célula inteira) ou Forma (barra só onde o tile tem desenho: uma plataforma fina fica com a colisão fina). A caixa de cada tile pode ser ajustada à mão, arrastando no tile ampliado.
- Pincel de terreno. No tileset, marque um terreno: um bloco de 3×3 tiles (cantos, bordas e miolo). Na room, com o terreno escolhido, você pinta "tem chão aqui" e o editor escolhe o tile certo pelos vizinhos.
- No código:
spawn<Tiro>(x, y, "Tiros"): quem nasce pelo código diz em qual camada entra;setLayer("Frente")elayerName(): mudar e ler a camada de uma instância;setLayerVisible("Chao", false)elayerVisible("Chao");setLayerPosition("Montanhas", x, y),layerXelayerY: mover uma camada de fundo (é assim que se faz parallax);tileAt("Chao", x, y): o tile naquele ponto (ou-1), esolidAt(x, y): tem algo sólido ali?
- Tela cheia e ampliação. Em Configurações do projeto, Abrir em tela cheia e Ampliar para a tela: Inteira (como antes: pixels perfeitos, com borda no que sobra), Manter proporção (o maior tamanho que cabe sem distorcer) ou Esticar. Durante o jogo, Alt+Enter ou F11 alternam entre a janela e a tela cheia. No código,
Window::setFullscreen(true),Window::fullscreen(),Window::setScale(WindowScale::Fit)eWindow::scale()mudam isso com o jogo rodando, para um menu de opções de vídeo.Window::setSize(1280, 720)muda o tamanho da janela, eWindow::width(),height(),screenWidth()escreenHeight()dizem o tamanho dela e do monitor. - Câmera sem tremor. O personagem seguido pela câmera não treme mais 1 pixel ao andar: a câmera passa a virar de pixel junto com ele, com qualquer suavização. O movimento também ficou mais regular em monitores de 60 Hz.
- Modelo "Plataforma". Em Novo projeto, um jogo pequeno de plataforma que usa tudo isso: fase pintada com tiles, enfeites, moedas, câmera seguindo e montanhas com parallax.
Para quem atualiza
- O projeto é convertido ao abrir. O formato passou para a versão 3. O editor avisa e, com o seu OK, converte os arquivos: as instâncias de cada room são separadas por depth, cada depth vira uma camada de Instâncias (
Instancias,Instancias_2...), e a cor de fundo vira a camada Fundo. O desenho das rooms fica igual. Obrasa_cli migratefaz o mesmo pela linha de comando. Vale guardar uma cópia do projeto antes (ou usar o git). spawnagora pede a camada.spawn<T>(x, y)dentro de um objeto não compila mais: passe o nome da camada,spawn<T>(x, y, "Camada"). O erro de compilação mostra o que fazer. Para criar num depth sem camada, usespawnAtDepth<T>(x, y, depth).- O depth do objeto saiu do
.obj.json. Código que lê ou escrevedepthcontinua compilando; para mudar a ordem de desenho pelo código, prefirasetLayer. - Um editor 0.2 não abre projetos da 0.3. Depois de salvar na 0.3, o projeto só abre na 0.3 em diante.
Correções
- A aba do tileset e a do sprite não travam mais com centenas de tiles ou frames (um tileset de 575 tiles rodava a 17 quadros por segundo).
Limites desta versão
- Os tiles não mudam com o jogo rodando, e não há tiles animados, espelhados nem girados.
- Plataforma que se atravessa por baixo não é um tipo de tile: faz-se com um objeto e código.
- O pincel de terreno usa 9 tiles (sem os cantos internos).
- Camadas na room. Um painel novo, Camadas (à esquerda, embaixo de Recursos; pode ser arrastado para outro lugar), lista as camadas da room: a de cima fica na frente. Dá para criar, renomear, reordenar, esconder e travar. A camada clicada é a ativa, e é nela que o mouse mexe. São quatro tipos:
-
Brasa 0.2.1
Download 0.2.1Brasa 0.2.1
Uma versão de arrumação do editor: as mesmas funções, em telas mais compactas e mais fáceis de ler.
O que mudou
- Inspetor em grade. As propriedades agora ficam em linhas finas e alinhadas, com o nome à esquerda e o valor à direita, sem espaço sobrando. Um objeto que antes precisava de rolagem cabe inteiro na tela, e nenhum nome fica mais cortado: passe o mouse sobre o nome para ver a explicação.
- Valores que andam juntos ficam na mesma linha. Posição e escala mostram X e Y lado a lado; tamanhos mostram largura × altura.
- Números de arrastar. Os campos com as setinhas ◂▸ na borda são de arrastar: clique e arraste para mudar; dê dois cliques para digitar.
- Variáveis em uma linha. Cada variável do objeto ocupa uma linha só: o nome (clique para renomear), o valor padrão e o botão ⋮, com Tipo, Subir, Descer e Excluir. O + Variável já pergunta o tipo.
- Valores próprios da instância. O Depth e as variáveis de uma instância ficam juntos em Valores próprios: marque a caixinha para a instância ter um valor só dela; desmarcada, vale o do objeto.
- Editor de sprite. O painel da esquerda usa a mesma grade. Fatiar (por colunas ou por tamanho) e o tipo da caixa de colisão (Auto, Inteira, Manual) viraram seletores lado a lado.
- Configurações do projeto. As ações de entrada ficam em uma tabela alinhada: o nome, as teclas e os botões (um clique remove) e o + para adicionar, com a opção de apertar a tecla. Salvar e Cancelar ficam sempre à vista.
- Diálogos. Em todas as janelas o botão principal é o amarelo, à direita.
Para quem atualiza
Nenhum projeto muda: é só a aparência do editor. Uma diferença para notar: na instância, a caixinha ao lado do Depth agora significa "valor próprio" (antes ela significava "usar o do objeto").
-
Brasa 0.2.0
Download 0.2.0Brasa 0.2.0
A 0.2 nasceu de um jogo de plataforma feito na 0.1: tudo o que deu trabalho nele virou recurso. Agora você ajusta valores no editor sem recompilar, configura teclas e controle num lugar só, guarda vidas e moedas em objetos que passam de uma fase para a outra, e cria caixas, espinhos e decoração sem escrever nenhuma linha de código.
O que há de novo
- Variáveis de objeto e de instância no editor, como as Variable Definitions do GameMaker. Você cria a variável no Inspetor do objeto e muda o valor de cada instância na room.
- Objetos com
.hppe.cpp. O Novo objeto cria os dois arquivos. Todo objeto enxerga todos os outros sem#include. - Objetos sem código. O Novo objeto (sem código) cria só o
.obj.json. O objeto aparece na room com o sprite, o depth, osolide o resto dos dados, e os outros objetos o acham pelo nome:touching("obj_spike"). - Física no Inspetor. Gravidade, direção da gravidade, atrito e queda máxima ficam no objeto, na seção Física. Não precisa mais copiar
gravity = ...noonSpawn. instance<T>()acha o controlador do jogo de qualquer objeto:instance<obj_controle>()->moedas++;.- Ações de entrada e controle. Dê nome a uma ação ("pular") e escolha as teclas e os botões do controle dela. No código, use
pressed("pular")ouaxis("esquerda", "direita"). Um projeto novo já vem comesquerda,direita,cima,baixo,pulareacao. - Máscara de colisão e espelho. A caixa de colisão pode vir de um sprite fixo (a máscara), e não do sprite da animação atual. O
flipXespelha o desenho e a caixa sem mexer na escala. - Ajudas de plataforma:
onGround(),maxFallSpeed,hitFloor(),hitCeiling(),hitWall(),hitWallLeft(),hitWallRight(),onTouchStart<T>eonTouchEnd<T>. - Objetos persistentes e globais. Uma instância persistente sobrevive à troca de room e ao
restart(). Objetos globais (um HUD, um controlador de vidas) são criados uma vez, na primeira room, e ficam vivos até o jogo fechar. - Renomear um objeto troca o nome no código, se você quiser. O editor mostra quantos lugares mudam no
.hppe no.cppe pergunta antes. Só o.hppe o.cppdo próprio objeto são reescritos, comentários e textos entre aspas inclusive. Quem cita o objeto em outros arquivos (outros objetos,src/) você corrige à mão. - Renomear uma variável também oferece trocar o nome no código. Depois de renomear no Inspetor, o editor conta quantos lugares do
.hppe do.cppdo objeto usam o nome antigo (palavra inteira) e pergunta se troca. Excluir uma variável avisa que o código que a usa deixará de compilar. - O modelo "Primeiro jogo" foi refeito com
.hpp+.cpp, ações (atirar,confirmaresair, além das de direção) e variáveis.
Variáveis
- Abra o objeto e, no Inspetor, procure a seção Variáveis. Clique em +.
- Dê um nome (por exemplo
velocidade), escolha o tipo e o valor padrão. Os tipos são:- número com vírgula (
number), inteiro (int), sim/não (bool), texto (string) e cor (color); room,object,spriteesound: uma lista com os recursos do projeto.
- número com vírgula (
- Na classe do objeto, no
.hpp, a linhaBRASA_VARS(obj_player)logo depois depublic:cria os campos. No código, a variável é um campo comum:hspeed = axis("esquerda", "direita") * velocidade;
- Para dar um valor diferente a uma instância, selecione-a na room. Na seção Variáveis do Inspetor da instância, marque a caixa ao lado do nome da variável (valor próprio) e mude o valor. Isso entra no desfazer da room.
Os valores chegam antes do
onSpawn. Mudar um valor no editor não recompila nada: é só apertar Play. Já criar, renomear ou mudar o tipo de uma variável recompila o jogo.Renomear ou excluir uma variável atualiza as instâncias de todas as rooms (o código do objeto só muda se você aceitar a troca; outros objetos que usam a variável ficam por sua conta). Renomear uma room, um objeto, um sprite ou um som atualiza as variáveis que apontam para ele.
Exemplo: uma bandeira com a variável
destinodo tiporoom. Cada bandeira escolhe a própria fase, e o código fica assim:onTouchStart<obj_player>([this](obj_player&) { goTo(destino); });
Ações e controle
Em Projeto > Configurações do projeto, a tabela de Ações tem:
- + Ação para criar uma ação;
- + tecla e + botão para escolher da lista;
- Capturar para apertar a tecla direto (Esc cancela).
Um projeto novo (modelo Vazio) já vem com seis ações:
ação teclado controle esquerda←, A cruz ←, analógico ← direita→, D cruz →, analógico → cima↑, W cruz ↑, analógico ↑ baixo↓, S cruz ↓, analógico ↓ pularEspaço A acaoX, Enter X O modelo Primeiro jogo traz
esquerda,direita,cimaebaixoe mais três ações:atirar,confirmaresair.Os botões do controle são
Pad:A,Pad:B,Pad:X,Pad:Y,Pad:Start,Pad:Back,Pad:LB,Pad:RBe as setas (Pad:Up,Pad:Down,Pad:Left,Pad:Right). Os eixos do analógico esquerdo sãoPad:LeftX-,Pad:LeftX+,Pad:LeftY-ePad:LeftY+.No código:
held("pular")vale enquanto a ação está segurada;pressed("pular")vale no step em que ela foi apertada;released("pular")vale no step em que ela foi solta;axis("esquerda", "direita")vai de -1 a 1 (o analógico tem zona morta de 0,25).
Vale o primeiro controle conectado, e dá para ligar e desligar com o jogo rodando. Uma ação com nome errado aparece uma vez como erro na Saída.
As funções com tecla (
held(Key::Space)) continuam funcionando.Máscara, espelho e plataforma
- Máscara: no Inspetor do objeto, escolha um sprite em Máscara. A colisão passa a usar o bbox desse sprite, qualquer que seja a animação. Trocar
spr_player_idleporspr_player_runnão mexe mais na caixa. - Espelhado (
flipX): marque a caixa ao lado do nome Espelhado no Inspetor para o objeto começar virado, ou useflipX = hspeed < 0;no código. - Plataforma:
onGround()diz se há chão 1 pixel abaixo;- na seção Física do Inspetor do objeto, Gravidade (por exemplo 0,25) puxa para baixo a cada step e Queda máxima (por exemplo 4,5) limita a queda. Também há Direção da gravidade e Atrito. Os valores chegam antes do
onSpawn, e no código continuam sendogravity,gravityDirection,frictionemaxFallSpeed; - depois de
moveAndStop(),hitWall()diz se bateu numa parede (bom para o inimigo virar) ehitFloor()diz se acabou de pousar.
onTouchStart<T>: roda uma vez quando o contato começa. Serve para a bandeira e para a moeda, sem a variável "já usei". OonCollidecontinua rodando a cada step.
Objetos persistentes e globais
- Persistente: marque a caixa ao lado do nome Persistente no Inspetor do objeto. A instância passa para a próxima room com tudo o que tinha (vidas, moedas, temporizadores), e o
restart()não a recria. - Globais: em Configurações do projeto > Objetos globais, adicione, por exemplo,
obj_hudeobj_controle. Eles nascem uma vez, na primeira room, e existem em todas as rooms, sem precisar colocar uma instância em cada fase.
Cuidados com objetos persistentes:
- eles guardam os valores também no
restart(): se o jogo recomeça no game over, zere você mesmo as vidas e as moedas; - guardam também o
xe oy: a instância não volta para o lugar em que a room a colocou; - guarde referências a outros objetos como
Handle<obj_x>(você o obtém comhandle<obj_x>()na própria instância e usa.get(), que devolvenullptrse ela sumiu), nunca como ponteiro simples: o ponteiro fica solto quando a instância some na troca de room.
Para achar o controlador de qualquer objeto, use
instance<obj_controle>(). Ele devolve a primeira instância viva (ounullptr, se não houver nenhuma):instance<obj_controle>()->moedas += valor;
Objetos sem código
Em Recursos, clique com o botão direito numa pasta e escolha Novo objeto (sem código).... Só o
.obj.jsoné criado. O objeto vira uma instância comum, com sprite, depth,solid, máscara, física e o resto do que estiver no Inspetor. Caixas, chão, espinhos e decoração não precisam mais de uma classe vazia.Um objeto sem classe não tem eventos nem variáveis no código. Para outro objeto reagir a ele, use o nome do objeto entre aspas:
touching("obj_spike"),collidesAt("obj_spike", x, y + 1)efindAt("obj_spike", x, y);onTouchStart("obj_spike", [this](Entity& espinho) { ... }),onTouchEnd(...)eonCollide(...);count("obj_spike"),any("obj_spike"),each("obj_ground", [](Entity& pedaco) { ... })edestroyAll("obj_spike").
Essas formas com nome também valem para objetos com classe.
Meu projeto da 0.1 continua funcionando?
Sim. Você não precisa mudar nada para abrir e rodar um projeto da 0.1:
- objetos com a classe dentro do
.cppcontinuam compilando; held(Key::...)e os seus próprios headers emsrc/continuam valendo, inclusive funções suas como ajogo()do modelo antigo, que devolve o estado do jogo guardado numa variávelstatic;- objetos sem classe que já estavam colocados nas rooms agora são criados e desenhados (na 0.1 eram ignorados com um erro na Saída). Se o seu jogo tinha um desses, ele passa a aparecer;
- o primeiro Play na 0.2 recompila o projeto do zero, porque a engine mudou. Isso é normal.
Para usar variáveis num objeto antigo:
- Crie o
obj_x.hppao lado do.cppe mova a classe para ele (no.cpp, troque a classe por#include "obj_x.hpp"). - Escreva
BRASA_VARS(obj_x)logo depois depublic:. Se preferir, crie as variáveis no Inspetor e clique em Inserir BRASA_VARS no .hpp: o editor insere a linha para você.
Enquanto a classe não tiver
BRASA_VARS, o editor mostra um aviso amarelo. As variáveis ficam guardadas no projeto e não quebram a compilação, mas os valores não chegam ao objeto.Com o
.hpp, você também pode apagar os#includeentre objetos e headers comosrc/objetos.hpp: todo objeto já enxerga todos os outros.Mais uma coisa: as classes dos objetos precisam ficar fora de
namespacepara as variáveis funcionarem. O modelo antigo "Primeiro jogo" usavanamespace jogo. Um projeto criado com ele continua compilando, mas para usar variáveis nele, tire a classe do namespace. -
Brasa 0.1.1
Download 0.1.1Brasa 0.1.1
Uma versão pequena, com uma correção importante para quem joga em monitor de alta taxa de atualização e um jeito mais fácil de controlar a velocidade das animações.
O que mudou
- Câmera sem tremor em monitores de 120, 144 Hz ou mais. Com a suavização ligada, a câmera podia tremer porque se movia uma vez por quadro desenhado, enquanto o jogo anda 60 vezes por segundo. Agora a câmera se move no mesmo ritmo do jogo (60 vezes por segundo, qualquer que seja o monitor) e é desenhada sempre em pixels inteiros, então personagem e cenário trocam de pixel juntos. Você não precisa mudar nada no seu projeto: a suavização que você escolheu continua valendo, e fica bem melhor.
- Velocidade da animação no sprite. No editor de sprite, a linha do tempo agora tem o campo fps (de 1 a 60; se ainda não houver valor, a prévia usa 10). O valor é salvo no arquivo
.sprite.json(como"fps") e dá para desfazer. Pronto: o sprite já anda na velocidade certa em qualquer objeto que o use. animSpeedvirou um multiplicador. Em um sprite que tem fps,animSpeed = 1toca na velocidade do sprite,2toca no dobro e0.5na metade. Sprites sem fps continuam como sempre:animSpeedé quantos frames avançam por step. Nenhum projeto antigo quebra.- Trocar de sprite volta ao primeiro frame. Quando você muda
spritede um objeto, a animação nova começa no frame 0, sem precisar escreverframe = 0na mão. Se você também mudar oframeno mesmo step, o valor que você escolheu é respeitado.
Como usar o fps no editor
- Abra o sprite e vá até a linha do tempo, embaixo.
- Ajuste o campo fps. A prévia toca na velocidade escolhida.
- Salve. No jogo, o sprite anima nessa velocidade; use
animSpeedsó se quiser acelerar ou frear um objeto específico.
-
Brasa 0.1.0
Download 0.1.0Brasa 0.1.0
A primeira versão da Brasa: uma engine de jogos 2D em C++ para quem está começando. Você cria o jogo num editor visual, escreve a lógica em C++ com uma API pensada para ser fácil, aperta Play e joga.
O que tem nesta versão
- Hub. A tela inicial mostra seus projetos recentes com miniatura, os modelos de novo projeto e os links de documentação.
- Projetos em pastas. Cada jogo é uma pasta. Dentro dela você organiza objetos, rooms e assets em subpastas como quiser. A Brasa migra projetos do formato antigo.
- Editor. Recursos, room, inspetor e saída lado a lado, com abas para rooms e sprites, desfazer e refazer, e o Play, que compila e abre o jogo sem janela de console. Erros do compilador são clicáveis.
- Sprites. Editor de sprites com quadros, origem e animação.
- Sons. Os sons do projeto aparecem no editor, com pré-escuta.
- Câmera. Defina a visão, o objeto seguido, o limite, a suavização e a zona morta direto no inspetor da room.
- API fácil de C++.
after,every,spawn,held,pressed,randome companhia, em ângulos em graus. O editor gera a configuração do VS Code para ter autocomplete no seu projeto. - Instalador com atualizações. Um só
.exe, sem administrador, que instala só para o seu usuário, cria atalhos, associa os arquivos.brasae confere se o compilador C++ e o CMake estão instalados. O editor avisa quando sai uma versão nova e atualiza com um clique.
Requisitos
- Windows 10 ou 11, 64 bits.
- Para o Play compilar o seu jogo: o compilador C++ e o CMake do Visual Studio. O instalador confere e oferece baixar e instalar o Build Tools da Microsoft. Esse passo é opcional: sem ele o editor abre, mas o Play só funciona depois de instalar as ferramentas.
Mudança de comportamento
- Rooms limitam a câmera ao seguir. Antes, a câmera que seguia um objeto podia mostrar o que está fora da room. Agora o limite da room vale também quando a câmera segue (opção "limitar" da câmera, ligada por padrão). Se o seu jogo dependia de ver além das bordas, desligue o limite na seção Câmera do inspetor da room.
Limitações conhecidas
- Ainda não há exportação. O jogo roda pelo Play; gerar um executável para distribuir fica para uma próxima versão.
- Sons só em WAV.
- O instalador não é assinado. O Windows SmartScreen pode mostrar "O Windows protegeu o seu computador". Clique em Mais informações e depois em Executar assim mesmo. A integridade do que o editor baixa nas atualizações é conferida por SHA-256.
- A atualização pelo hub só funciona na versão instalada pelo instalador (não numa pasta copiada à mão).
Como instalar
Baixe
Brasa-0.1.0-setup.exeabaixo, rode e siga as telas. O arquivoBrasa-0.1.0-setup.exe.sha256traz o SHA-256 para conferir o download.
All versions are also on the releases page on GitHub.
