Universidade Estadual de Ponta Grossa -  Engenharia de Computação – Professor: Dierone

Mateus Felipe Ribeiro – RA:17243526

Sumario

1.Backbone Game Engine...............................................................................................................

2.Estrutura de diretórios.................................................................................................................

3.index.html....................................................................................................................................

4.main.js..........................................................................................................................................

5.Funções da Engine.......................................................................................................................

-Backbone Engine..............................................................................................................

                        - Opções

                               - Métodos

                        - Eventos

-Backbone SpriteSheet................................................................................................

            - Atributos

                - Propriedades

                - Eventos

                - Métodos

                - Animações

-Backbone.Input...............................................................................................................

                        - Atributos

                        - Métodos

                        - Eventos

-Backbone.World........................................................................................................

            - Atributos

                               - Opções

                               - Métodos

                               - Eventos

-Backbone.WorldEditor......................................................................................

                        - Atributos

- Opções

- Eventos

-Como funciona

-Backbone.Hero.........................................................................................................

                        - Eventos

- Como funciona

                        - Colisões

-Backbone.Button............................................................................................

            -Uso

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.     Backbone Game Engine

Um modelo backbone trabalha com hash e métodos de javascript. Um modelo é um objeto Javascript. Portanto, o comportamento pode ser armazenado como propriedades e métodos diretamente no objeto. Por exemplo, uma folha de sprite aponta para uma imagem.

EXEMPLO EXECUTAVÉL.

Exemplo de jogo criado com a engine:

Descrição: Resultado de imagem para backbone game engine

Hash: qualquer algoritmo que mapeie dados grandes e de tamanho variável para pequenos dados de tamanho fixo; Get/Getter e Set/Setter: Eles servem para pegarmos informações  de variáveis da classe;  Sprite :Imagem utilizada na engine; Engine: biblioteca de scripts; Scripts: conjunto de instruções para que uma função seja executada;

2.     Estrutura de diretórios

Para criar um novo exemplo (ou jogo), crie um diretório vazio .Em seguida, adicione um arquivo com o nome de index.html, logo após crie um arquivo com o nome de main.js. Esta é estrutura de arquivos recomendada pelo backbone:

exemplo/
        index.html
        main.js

(index.html é o documento HTML que carrega seus recursos e define sua tela. O arquivo main.js é onde você instancia o mecanismo de jogo(engine)  e os sprites)

3.     index.html

O documento HTML (geralmente chamado index.html em sua própria pasta) declara os recursos a serem carregados e o elementos canvas. Recursos de Javascript são declarados no elemento HEAD. Imagens são carregadas via elementos IMG. Não há carregamento assíncrono.

Exemplo de arquivo HTML:       

<!DOCTYPE html>

<html>                 //Abertura do arquivo html

<head>                //Cabeça do html

                                               <title>AB</title>             //Titulo do seu exemplo

                <script src="phaser.js"></script>

                <script src="ex1.js"></script>                  //Seus scripts vão aqui

                <script src="ex2.js"></script>

                <script src="ex3.js"></script>

                <script src="game.js"></script>

                <!--script src="game.js"></script-->

</head>

<body>                               //Corpo do html

</body>

</html>

 

4.     main.js

O arquivo main.js é onde você declara e inicializa seus objetos. Recomenda-se que você envolva esse código em uma função que seja executada assim que o documento e todos os recursos forem carregados (por exemplo, evento window.onload). Você pode usar por exemplo: $(window).on("load", function() {});.

Outros arquivos usam uma função anônima simples, pois contêm principalmente declarações de classe. Os ativos são, como consequência, sempre carregados de forma síncrona.

Exemplo de arquivo main.js:

$(window).on("load", function() {
 
  //Exemplo de como declarar a biblioteca correta
 
  Backbone.Mario = Backbone.Hero.extend({
    defaults: _.extend({}, Backbone.Hero.prototype.defaults, {
      name: "mario",
      spriteSheet: "mario"
    })
  });
 
  var canvas = document.getElementById("foreground");
 
  var spriteSheets = new Backbone.SpriteSheetCollection([{
    id: "mario",
    img: "#mario",
    tileWidth: 32,
    tileHeight: 64,
    tileColumns: 21,
    tileRows: 6
  }]).attachToSpriteClasses();
 
  var debugPanel = new Backbone.DebugPanel();
 
  var input = new Backbone.Input({
    drawTouchpad: true,
    drawPause: true
  });
 
  var mario = new Backbone.Mario({
    x: 400, y: 400, floor: 500
  }, {
    input: input
  });
 
  var world = new Backbone.World({
    width: 30, height: 18,
    tileWidth: 32, tileHeight: 32,
    backgroundColor: "rgba(66, 66, 255, 1)",
    viewportBottom: 156
  });
  world.add(mario);
 
  var engine = new Backbone.Engine({}, {
    canvas: canvas,
    debugPanel: this.debugPanel,
    input: input
  });
  engine.add([
    world,
    input,
    debugPanel
  ]);
 
  // Expose things as globals - easier to debug
  _.extend(window, {
    canvas: canvas,
    engine: engine
  });
 
  // Ensure the canvas is always visible and centered
  adjustViewport(canvas, canvas.width, canvas.height);
 
});

O Backbone Game Engine define classes no namespace do Backbone. A maioria é subclassificada de Backbone.Model ou Backbone.Collection.

5.     Funções da Engine:

-Backbone Engine:

Backbone.Engine é um modelo de Backbone que contém uma coleção de modelos de sprites. Ele usa o requestAnimationFrame do HTML5 para fornecer um loop de 60 frames por segundo.

Opções

Na instanciação, essas opções podem ser passadas. Elas serão armazenadas como propriedades no Backbone.Engine.

·         canvas: A tela para desenhar. O desenho está no seu contexto 2d.

·         input: Opcional. A instância de entrada de controle do usuário. Se passado e o botão de pausa estiver habilitado, irá parar / iniciar  o motor quando pressionado.

·         debugPanel: Opcional. Backbone.DebugPanel instanciado. fps e cycleTime são de saída.

Métodos

·         add(): Adiciona um ou vários modelos.

·         remove(): Remove um ou vários modelos .

·         reset(): Limpa ou define a coleção de sprites.

·         isRunning(): Retorna true se o mecanismo estiver em execução ou false, se não estiver.

·         start(), stop(): Inicia ou pára o motor.

·         toggle(): Alternar iniciar / parar o motor.

Eventos

·         tap: Quando o usuário clica ou toca na tela. Um toque é definido quando o usuário pressiona / clica em uma posição sem se mover.

·         key: Quando o usuário digita uma chave.

·         dragstart, dragmove e dragend: Quando ocorre um gesto de arrastar.

-Backbone SpriteSheet:

Backbone.SpriteSheet é um modelo de Backbone que divide uma imagem em quadros usados ​​para animação.

Descrição: Resultado de imagem para backbone game engine

Atributos:

Descrição: Resultado de imagem para backbone game engine

Propriedades:

Eventos:

Os eventos de anexar e desanexar podem ser usados ​​para iniciar / parar de ouvir eventos.

Métodos:

·         attachToSpriteClasses(): Anexa folhas de sprite a sprites protótipos de classes. Faz isso encontrando todas as classes de sprites definidas (Backbone.*) com atributo padrão spriteSheet combinando um ID de folha de sprite na coleção. Em seguida, define a sua spriteSheet propriedade para apontar para a folha de sprite correta na coleção.

Animações

Animações de propriedade Sprite contém um hash de animações. Cada animação contém uma sequência de quadros e um atraso entre quadros para animação.

-Backbone.Input:

A classe Backbone.Input é um modelo que captura eventos de entrada do usuário e os armazena como atributos do modelo. Por exemplo, pressionando a seta para a esquerda.Exemplo: Descrição: Backbone.Input

Atributos

Este atributo pode ser passado ao criar o modelo, para configurar a entrada.

Os seguintes atributos de modelo são definidos pelo modelo. Eles não devem ser definidos externamente.

Métodos

Eventos

Você pode adicionar ou remover um modelo de Backbone.Input do mecanismo em tempo real.

-Backbone.World:

Backbone.World é um modelo que contém uma coleção de sprites que interagem entre si. Um mundo é um ambiente composto de telhas e personagens.

Descrição: Resultado de imagem para backbone game engine

Atributos

Opções

Métodos

Um Backbone.World é um modelo que envolve uma coleção armazenada em sprites de propriedade. Para impedir o acesso direto externo a essa coleção, ele fornece estes dois métodos:

Eventos

-Backbone.WorldEditor:

Backbone.WorldEditor é um modelo que exibe uma paleta de sprites e permite ao usuário editar uma instância de Backbone.World colocando e removendo sprites.Exemplo:

Descrição: Backbone.Input

Atributos

Opções

Eventos

Como funciona

-Backbone.Hero:

Eventos

O Backbone.Hero tem os mesmos eventos que o Backbone.Character.

 

Como funciona

 O estado do atributo determina a animação atual. Um estado é um par de movimento e direção. Por exemplo, idle-right, walk-left e jump-right.

Segurar um tecla permite que o personagem  se mecha conforme seja executado.

Colisões

Personagem detecta colisões de blocos ou outros caracteres para restringir seus movimentos. Ele faz isso usando o método de detecção de colisões findCollidings do Backbone.World. Toda atualização, colisões com outros sprites são detectadas no esboço do sprite:

Descrição: Hero Collisions

As colisões são tratadas apenas quando necessário. Por exemplo, quando as colisões de salto são manipuladas apenas na parte superior e direita. A decisão é baseada em olhar para velocidade e yVelocity. Para a gravidade, uma verificação é executada toda vez na parte inferior do sprite para aterrissar ou cair.

var bottomWorld = this.world.height() + tileHeight,

    floor = this.get("floor") || bottomWorld,

    bottomY = Math.min(floor, bottomWorld);

 

for (i = 0; i < this.collisionMap.bottom.sprites.length; i++) {

  sprite = this.collisionMap.bottom.sprites[i];

  bottomY = Math.min(bottomY, sprite.getTop(true));

  if (sprite.get("type") == "platform") bottomPlatform = sprite;

}

 

...

 

if (yVelocity > 0 && heroBottomY >= bottomY) {

  // Stop falling

  land(bottomY);

  for (i = 0; i < this.collisionMap.bottom.sprites.length; i++)

    this.collisionMap.bottom.sprites[i].trigger("hit", this, "top", cur.dir);

  if (this.cancelUpdate) return true;

} else if (cur.mov != "jump" && yVelocity == 0 && heroBottomY < bottomY) {

  // Start falling if no obstacle below

  attrs.nextState = state;

  attrs.state = this.buildState("jump", cur.mov2, cur.dir);

} else if (yVelocity == 0 && heroBottomY == bottomY) {

  // On a floating platform - same vertical velocity

  if (bottomPlatform)

    relativeVelocity = bottomPlatform.get("velocity");

}

Quando um obstáculo é atingido, o personagem para de se mover. Seu x está ancorado e a velocidade definida como 0.

if (velocity >= 0) {

  // Stop if obstacle to the right

  var rightX = this.world.width();

  for (i = 0; i < this.collisionMap.right.sprites.length; i++)

    if (heroTopY > 0 )

      rightX = Math.min(rightX, this.collisionMap.right.sprites[i].getLeft(true));

 

  if (heroRightX >= rightX) {

    attrs.velocity = velocity = 0;

    attrs.x = x = rightX - heroWidth - paddingLeft;

    for (i = 0; i < this.collisionMap.right.sprites.length; i++)

      this.collisionMap.right.sprites[i].trigger("hit", this, "left", cur.mov2);

    if (this.cancelUpdate) return true;

  }

}

Uma colisão com outros sprites aciona um evento de acerto naquele sprite. O mensageiro do evento receberá o sprite colidindo (herói), e sua posição relativa onde ocorreu o golpe (esquerda do sprite do enemie neste caso).

Uso Este trecho foi retirado do exemplo do Mario.

  Backbone.Mario = Backbone.Hero.extend({

    defaults: _.extend({}, Backbone.Hero.prototype.defaults, {

      name: "mario",

      spriteSheet: "mario"

    })

  });

 

  var canvas = document.getElementById("foreground");

 

  var spriteSheets = new Backbone.SpriteSheetCollection([{

    id: "mario",

    img: "#mario",

    tileWidth: 32,

    tileHeight: 64,

    tileColumns: 21,

    tileRows: 6

  }]).attachToSpriteClasses();

 

  var input = new Backbone.Input({

    drawTouchpad: true,

    drawPause: true

  });

 

  var mario = new Backbone.Mario({

    x: 400, y: 400

  }, {

    input: input

  });

 

  var world = new Backbone.World({

    width: 30, height: 18,

    tileWidth: 32, tileHeight: 32,

    backgroundColor: "rgba(66, 66, 255, 1)"

  });

  world.add(mario);

 

  var engine = new Backbone.Engine({}, {

    canvas: canvas,

    input: input

  });

  engine.add([

    world,

    input

  ]);

-Backbone.Button:

Backbone.Button é um Backbone.Element que ao tocar / clicar executa uma ação pré-definida.

Descrição: Backbone.Input

Uso

var button = new Backbone.Button({
  x: 4, y: 4, width: 52, height: 52, borderRadius: 5,
  img: "#icons", imgX: 0, imgY: 0, imgWidth: 32, imgHeight: 32, imgMargin: 10
});
button.on("tap", function() {
  console.log("button tapped!");

});