Universidade Estadual de Ponta Grossa -  Engenharia de Computação

Aluno: Alysson André de Quadros – RA: 17203926

 

 

1.           Introdução ao Stage.Js

O Stage.js é uma biblioteca JavaScript leve e de código aberto que você pode usar para o desenvolvimento de jogos HTML5 2D entre plataformas. Essa biblioteca usa um modelo semelhante ao DOM para manipular a tela e gerencia os ciclos de renderização e o desenho do seu aplicativo internamente e por si só.  Também processa e distribui eventos de mouse e de toque para nós de árvores de destino. Um aplicativo Stage.js consiste em uma árvore de nós. Cada nó é fixado (transformado) contra seu local de origem e possui zero, uma ou mais texturas de imagem.

2.           Configuração e Uso

Os aplicativos no Stage.js são criados passando a função de retorno de chamada para Stage. A biblioteca carregará todos os componentes necessários. Finalmente, ele chamará a função de retorno de chamada e processará tudo na tela. Cada aplicativo que você criar terá uma árvore e stage estará na raiz dessa árvore. Todos os outros elementos, como imagens ou strings, serão seus nós. A árvore de aplicativos é redesenhada enquanto os nós são atualizados durante cada ciclo de renderização.

Exemplo:

// Criar novo aplicativo
Stage(function(stage) {
 
  // Definir caixa de visão
  stage.viewbox(300, 200);
 
  // Criar imagem e anexá-la ao stage
  var box = Stage.image('box').appendTo(stage);
 
  // Alinhar caixa de visão ao centro
  box.pin('align', 0.5);
 
  // No clique do mouse...
  box.on('click', function(point) {
    // ...entre os valores de escala deste nó
    this.tween().ease('bounce').pin({
      scaleX : Math.random() + 0.5,
      scaleY : Math.random() + 0.5
    });
  });e
});
 
// Adicionando uma textura
Stage({
  image : 'sample.png',
  textures : {
    box : { x : 0, y : 0, width : 30, height : 30 }
  }
});

 

 

3.           Aplicações

Um aplicativo é criado passando uma função de retorno de chamada para Stage(). A biblioteca carregará, criará e inicializará todos os componentes necessários e chamará a função fornecida com o nó raiz do aplicativo e o contêiner de exibição que normalmente é um elemento Canvas.

Exemplo:

// Cria e inicia um aplicativo 
Stage ( function ( stage , display ) {
 
  // Defina a caixa de visão para o stage, fixando-o para o 
     modos válidos
       
       stage.viewbox (largura, altura, modo =  ' no teclado ' );
 
  // Redimensionamento do eventos de viewport 
 
       stage.on ( ' viewport ' , função ( viewport ) {
  
  // `viewport` atributos são` width`, `height` e` ratio`
  });
 
  // Pausa
  stage.pause ();
 
  // Retomar 
  stage.resume ();
});

 

 

3.1      Modelo de árvore

Cada aplicativo consiste em uma árvore, e a raiz da árvore é fornecida como stage.

Exemplo:

// Criar uma nova instância de nós (sem texturas)
var node = Stage.create();
 
// Anexar/prefixar filho aos pais (aceita matriz)
parent.append(child);
parent.prepend(child);
 
// Acrescentar/preceder a criança para os seus pais
child.appendTo(parent);
child.prependTo(parent);
 
// Inserir irmão antes/depois da criança (aceita matriz)
child.insertNext(sibling);
child.insertPrev(sibling);
 
// Inserir irmão antes/depois da criança
sibling.insertAfter(child);
sibling.insertBefore(child);
 
// Remove filho dos seus pais
child.remove();
 
// Remove filho dos seus pais (aceita matriz)
parent.remove(child);
 
// Remove todos os filhos dos pais
parent.empty();
 
// Obtém pais por primeiro/último (visível) dos filhos
parent.first(onlyVisible = false);
parent.last(onlyVisible = false);
 
// Obtém imediatamente os pais
child.parent();
 
// Obtém o próximo/anterior (visível) irmão
child.next(onlyVisible = false);
child.prev(onlyVisible = false);
 
// Obtém o nó de visibilidade
node.visible();
 
// Define o nó de visibilidade
node.visible(visible);
node.hide();
node.show();
 
// Iterar sobre os pais, filho não pode ser removido
for (var child = parent.first(); child; child = child.next()) {
 
// usa filho
}
 
// Iterar sobre os pais, filho não pode ser removido
var child, next = parent.first();
while (child = next) {
  next = child.next();
  // use child
}
 
// Consultar o nó da sub-árvore, incluindo o próprio nó
  node.visit({
  start : function(node) {
    return skipChildren;
  },
  end : function(node) {
    return stopVisit;
  },
  reverse : reverseChildrenOrder = false,
  visible : onlyVisibleNodes = false
});

 

 

3.2      Loop de Jogo

Cada ciclo de renderização consiste em marcar e redesenhar a árvore de aplicativos. O aplicativo e seus nós podem ser atualizados durante o ticking. Dependendo das atividades de aplicação, pode haver três diferentes acompanhamentos após o registro:

·        Se pelo menos um nó for tocado, toda a árvore de aplicativos será redesenhada e o loop do jogo continuará.

·        Se nenhum nó for tocado, mas pelo menos uma função ticking retornar true, o loop do jogo continuará, mas o desenho anterior será retido.

·        Se nenhum nó for tocado e nenhuma função de disparo retornar true, o aplicativo fará uma pausa até ser tocado direta ou indiretamente.

Os nós podem ser tocados diretamente chamando, node.touch()mas geralmente eles são tocados indiretamente por outras ações, como fixação ou manipulação de árvores.

Exemplo:

// Registra uma função para ser chamada de ticking
   node.tick ( função ( millisecElapsed ) {
   return continueGameLoop;
}, beforeChildren =  false ); 
 
// Toque no nó 
   node.touch();

 

 

3.3   Fixando

Fixação especifica como um nó é anexado ao seu pai. A fixação consiste em tamanho, transformação, posicionamento e transparência.

Exemplo:

// Obter um valor de fixação 
node.pin(name);
 
// Definir um valor de fixação 
node.pin(name, value);
 
// Definir um ou mais valores de fixação
node.pin({
  name : value,
  ...
});

 

Quando nameX igual nameY, a variável name não pode ser usada no lugar.

3.4   Tamanho

Para alguns nós, como imagens, strings, linhas e colunas, o tamanho é definido automaticamente.

Exemplo:

node.pin({
  height : height,
  width : width
});
 
// Atalho para definir tamanho:
node.size(width, height);
node.width(width);
node.height(height);
 
// Atalho para obter tamanho:
node.width();
node.height();

 

3.5   Transformação

Transformação consiste em escalar, inclinar e girar. A rotação é aplicada depois de dimensionar e inclinar.

Exemplo:

node.pin({
  scaleX : 1,
  scaleY : 1,
  skewX : 0,
  skewY : 0,
  rotation : 0
});
 
// Atalho para definir uma transformação:
node.scale(x, y = x);
node.scale({ x : x, y : y });
node.skew(x, y = x);
node.skew({ x : x, y : y });
node.rotate(angle);

 

 

3.6   Posicionamento

Ao posicionar, o ponto de manuseio em si é posicionado na distância de deslocamento do ponto de alinhamento no pai. Alça e alinhamento são definidos como relação de largura / altura, 0 é superior / esquerda e 1 é inferior / direita. Identificador padrão para alinhar valor quando não é especificado.

Exemplo:

node.pin({
  alignX : 0,
  alignY : 0,
  handleX : 0,
  handleY : 0,
  offsetX : 0,
  offsetY : 0
});
 
// Métodos de atalho para definir posicionamento:
node.offset(x, y);
node.offset({ x : x, y : y });

 

Por padrão, a caixa delimitadora alinhada por eixo (AABB) após a transformação é usada para posicionamento, no entanto, é possível usar a caixa não transformada definindo a localização dinâmica. A localização do pivô é definida como a razão da largura / altura não transformada e é usada como ponto central em si para escala, inclinação e rotação.

Exemplo:

node.pin({
  pivotX : 0,
  pivotY : 0
});

 

 

3.7   Transparência

A transparência pode ser aplicada a texturas de nós e a nós de sub-árvores ou apenas a texturas de nós.

Exemplo:

node.pin({
  alpha : 1,
  textureAlpha : 1
});
 
// Métodos de atalho para definir transparência:
node.alpha(alpha);
node.alpha(alpha, textureAlpha);

 

 

3.8   Escala

Escala para nova largura / altura, se o modo for definido proporcionalmente. Os modos válidos são:

·        in: escala máxima que mantém as bordas dos nós dentro de scaleWidth / Height

·        in-pad: like in, mas unifly pads nó para preencher scaleWidth / Height inteira

·        out: escala mínima que mantém as bordas do nó fora de scaleWidth / Height

·        out-crop: como out, mas corta uniformemente a scaleWidth / Height

Exemplo:

node.pin({
  scaleMode : mode,
  scaleWidth : width,
  scaleHeight : height
});
 
// Método de atalho:
node.scaleTo(width, height, mode);

 

3.9   Eventos

Os ouvintes de eventos podem ser registrados e não registrados nos nós, os ouvintes são chamados quando um evento é publicado em um nó. Alguns eventos podem ser publicados em vários nós, mas os eventos não se propagam.

Exemplo:

// Registre um ouvinte no nó

// O evento nome pode ser uma matriz de string ou um nó de string separados e espaçados

node.on(name, listener);

 

// Cancelar um registro de um nó

node.off(name, listener);

 

// Obter ouvintes registrados no nó

// Retorna uma matriz ou um nó indefinido

node.listeners(name);

 

// Chama os ouvintes

// Retorna o número de ouvintes chamados

node.publish(name, args);

 

4.           Mouse e toque

Mouse nativo e eventos de toque são capturados, processados ​​e publicados nos nós de aplicativos. Os nós recebem os eventos do mouse na coordenada local, ou seja, a localização do mouse é especificada como a distância até o canto superior esquerdo do nó.

Exemplo:

// Adicionar ouvinte de clique ao nó

node.on('click', function(point) {

  // point.x e point.y são relativos a este nó esquerda e topo

  // point.raw é um evento original

});

 

Em vez de eventos de cliques nativos, os eventos de cliques sintáticos são criados e publicados nos nós. Além dos tipos de evento padrão, o mousecanceltipo de evento sintático também é suportado, o que é semelhante, touchcancelmas é publicado quando mousedown não é seguido por um mouseup.

Exemplo:

// Eventos com o mouse:

Stage.Mouse.CLICK = 'click';

Stage.Mouse.START = 'touchstart mousedown';

Stage.Mouse.MOVE = 'touchmove mousemove';

Stage.Mouse.END = 'touchend mouseup';

Stage.Mouse.CANCEL = 'touchcancel mousecancel';

 

5.           Textura

As texturas são objetos que podem ser desenhados e que são usados ​​pelos nós da árvore para desenhar gráficos na superfície da tela.

5.1  Textura Atlas

A textura atlas consiste em um conjunto de texturas nomeadas que são referenciadas por nome em um aplicativo.

Atlas geralmente são criados usando arquivos de imagem estática. Imagens referenciadas em atlas são automaticamente pré-carregadas.

Exemplo:

// Adicionando a textura atlas

Stage({

  name : 'mario', // opcional

  image : {

    src : 'mario.png',

    ratio : 1, // opcional, para imagens de alta resolução

  }

  textures : {

    stand : { x : 0,   y : 0, width : 40, height : 60 },

    walk : [

      { x : 40,  y : 0, width : 40, height : 60 },

      { x : 80,  y : 0, width : 40, height : 60 },

      { x : 120, y : 0, width : 40, height : 60 }

    ],

    number : {

      '0' : { x : 0,  y : 60, width : 10, height : 14 },

      '1' : { x : 10, y : 60, width : 10, height : 14 },

      '2' : { x : 20, y : 60, width : 10, height : 14 },

      '3' : { x : 30, y : 60, width : 10, height : 14 },

      '4' : { x : 40, y : 60, width : 10, height : 14 },

      '5' : { x : 50, y : 60, width : 10, height : 14 },

      '6' : { x : 60, y : 60, width : 10, height : 14 },

      '7' : { x : 70, y : 60, width : 10, height : 14 },

      '8' : { x : 80, y : 60, width : 10, height : 14 },

      '9' : { x : 90, y : 60, width : 10, height : 14 }

    }

  }

});

 

Stage.image('mario:stand');

 

Stage.anim('mario:walk').play();

 

Stage.string('mario:number').value(100);

 

 

6.           Imagem

Uma imagem, nada mais é que um nó com uma textura.

Exemplo:

// Cria uma nova instanciação de imagem

var image = Stage.image(texture);

 

// Altera a textura da imagem

image.image(texture);

 

// Encolhe/estica a imagem ao fixar a largura e/ou a altura

// Para definir bordas adicionar top, bottom, left e right a textura

image.tile();

image.stretch();

 

7.           Animação

Uma animação ou anim é um nó com uma matriz de texturas como quadros.

Exemplo:

// Cria uma nova instancia de animação

var anim = Stage.anim(textures, fps = 15);

 

// Obter ou definir frames por segundo da animação

anim.fps();

anim.fps(fps);

 

// Definir frames da animação, `texturas` pode ser em matriz ou em seletor de textura

anim.frames(textures);

 

// Vai para o n-ésimo frame

anim.gotoFrame(n);

 

// Mover n frames para frente (ou para trás se n for negativo)

anim.moveFrame(n);

 

// Obter o número de frames

anim.length();

 

// Começa a jogar (a partir de `frameName` se especificado)

anim.play(frameName = undefined);

 

// Para de jogar (e pula para `frameName` se especificado)

anim.stop(frameName = undefined);

 

// Inicia `repeat * length` frames e depois para e chama a função `callback`

anim.repeat(repeat, callback = null);

 

 

8.           String

String é uma linha de imagens que são selecionadas dinamicamente a partir do frames uso de caracteres de uma string, ou itens de uma matriz value.

Exemplo:

// Cria uma nova instancia de string com frames
var string = Stage.string(frames);
 
// Define frames, uma string que faz referência a um mapa em atlas 
string.frames("digits");
 
// Define frames, um mapa com texturas cujos valores e frame names são chaves 
string.frames({
  '0' : zeroTexture,
  '1' : oneTexture,
  ...
});
 
// Define frames, uma função que pega um char (ou item) e retorna a textura
string.frames(function(char) {
  // cria uma textura para o char
  return texture;
});
 
// Define valor, pode ser um string ou uma matriz
// Caracteres (ou itens) são usados para selecionar frames e criar uma sequência de imagens
string.value(value);
 
// Obter valor atribuído
string.value();

 

 

9.           Linha e coluna

Uma linha / coluna é um nó que organiza seus filhos como uma sequência horizontal / vertical.

Exemplo:

// Cria uma nova linha / coluna 
var row =  Stage.row (childrenAlignY =  0 );
var column =  Stage.column (childrenAlignX =  0 );
 
// Faça nó de uma linha / coluna 
node.row (childrenAlignY =  0 );
node.column (childrenAlignX =  0 );
 
// Adicionar espaçamento entre o células da linha / coluna . node.spacing (space);

 

 

 

10.   Caixa (experimental)

Uma caixa é redimensionada para envolver seus filhos. Ele pode ser aplicado a imagens lado a lado / estendidas para criar componentes de tamanho variável, como janelas e botões.

Exemplo:

// Cria uma nova caixa 
var box =  Stage.box ();
 
// Torna o nó uma caixa 
node =  node.box ();

 

 

11.   Interpolação

A interpolação é usada para aplicar transições suaves a valores de fixação.

Exemplo:

// Criar uma entrada de interpolação 
// Quando `append` for true, a nova entrada é anexada às entradas atuais, caso contrário, substitui-as 
var tween =  node.tween (duração =  400 , atraso =  0 ,acréscimo =  false );
 
// Definir valores de fixação e iniciar a interpolação 
// Fixar métodos de atalho, como `.scale ()`, também pode ser usado 
tween.pin(pinning);
 
// Definir atenuação para interpolação, pode ser uma função ou um identificador 
// definido como 'nome [-modo] [(params)]', por exemplo, 'quad' ou 'poli-in-out (3)' 
/ / Nomes: linear, quad, cúbico, quart, quint, poli (p), sin / seno, 
//         exp, círculo / circ, ressalto, elástico (a, p), verso (s) 
// Modos: in, out in-out, out-in 
tween.ease(facilitação);
 
// Define a duração em milissegundos
tween.duration (ms);
 
// Definir atraso em milissegundos 
tween.delay (ms);
 
// Retorno de chamada quando a interpolação é feita 
tween.done ( function () {
   // este === nó
});
 
// Remover este nó quando a interpolação terminar a 
tween.remove ();
 
// Ocultar este nó quando a interpolação terminar a 
tween.hide ();
 
// Criar e encadear uma nova interpolação a esta entrada 
var nextTween =  tween.tween(duração =  400 , atraso =  0 );

 

 

12.   Métodos Globais


// Criar um novo aplicativo

Stage ( function ( stage , display ) {});

 

// Criar e pré-carregar um atlas de textura

Stage ({});

 

// Uma função a ser chamada antes de iniciar qualquer aplicativo

// Pode ser usada para pré-carregar os ativos do aplicativo

Stage.preload ( function ( done ) {

   // Chamada `done` quando carregado ou quando falhar

  done(error);

});

 

// Pré-carregar e executar um arquivo JS

// As URLs que começam com `. /` São resolvidas em relação ao atual URL do script

Stage.preload (src);

 

// Pause a reprodução de todos os aplicativos

Stage.pause ();

 

// Retomar a reprodução de todos os aplicativos

Stage.resume ();