🤔 Para Refletir :
"Chamar o var é coisa do passado. Agora a gente chama o const e o let."
- Dr.XGB

Sistema simples de pulo

HermesPasser Masculino

Duque
Membro
Membro
Vícios e amores servem para preencher o vazio
Juntou-se
23 de Março de 2017
Postagens
836
Bravecoins
92
Introdução
Primeiramente fiz esse sistema para a "Gincana: Fábrica do Noel", ele basicamente pula um obstáculo a sua frente ou seja, a partir de sua direção, ele irá pular para a posição após a que está em sua frente. Se essa posição tiver um obstáculo então ele não irá pular.

Comandos

O nome do arquivo deve ser JumpSystem.js, de outra forma não funcionará.

Código:
Key Code
Tecla a ser apertada para pular, a padrão é tab.

Código:
SE Jump
Som ao pular, ele tem que ser um SE e o padrão é o Jump1; Não deve-se colocar a extensão.

Código:
SE Cannot Jump
Som quando não se pode pular, ele tem que ser um SE e o padrão é o Jump2; Não deve-se colocar a extensão.

Demonstração
[youtube]https://www.youtube.com/watch?v=YtZyBFPRnck[/youtube]​
Esqueci de gravar o audio, mas tem efeitos sonoros.​

Código
Aqui
 
O seu script ficou muito bom, pequeno e simples, mas existem algumas melhorias que eu gostaria de sugerir e que poderiam ter feito você ganhar mais pontos no evento.

Nomenclatura e definição de variáveis

Código:
var posx = $gamePlayer.x, posy = $gamePlayer.y, d = $gamePlayer.direction(),
      movex = 0, movey = 0;

O código acima está difícil de ler, pessoalmente, eu dou preferência na facilidade de leitura do código, do que poupar linhas. O computador irá ler e executar tudo na mesma linha, devemos achar uma forma melhor do cérebro humano fazer o "parse".

O código acima poderia ficar assim:

Código:
var posx  = $gamePlayer.x;
var posy  = $gamePlayer.y;
var d     = $gamePlayer.direction();
var movex = 0;
var movey = 0;

Creio que dessa forma a leitura ficaria melhor, e por falar em leitura, a variável "d" ficaria bem mais fácil de ler se tivesse o nome trocado por "direction", pois 'd' pode ser qualquer coisa para quem está lendo o script pela primeira vez.


Números mágicos

Código:
switch(d){
  case 2:
    posx += 0, posy += 2;
    movex += 0, movey += 2;
    break;
  case 4:
    posx += -2, posy += 0;
    movex += -2, movey += 0;
    break;
  case 6:
    posx += 2, posy += 0;
    movex += 2, movey += 0;
    break;
  case 8:
    posx += 0, posy -= 2;
    movex += 0, movey -= 2;
}

Seguindo a mesma linha de raciocínio de nomenclatura de variáveis, fica bastante difícil de ler o código e descobrir o que são 2, 4, 6 e 8 em cada case.

Apenas alguém que já saiba que essas são as direções do personagem irá bater o olho e entender o que está acontecendo, e fica ainda pior quando o switch é feito na variável "d".

Minha sugestão seria a criação de um mapa de direções:

Código:
var direction  = $gamePlayer.direction();
var directions = { 2: 'down', 4: 'left', 6: 'right', 8: 'up' }

switch(directions[direction]){
  case 'down':
    posx += 0, posy += 2;
    movex += 0, movey += 2;
    break;
  case 'left':
    posx += -2, posy += 0;
    movex += -2, movey += 0;
    break;
  case 'right':
    posx += 2, posy += 0;
    movex += 2, movey += 0;
    break;
  case 'up':
    posx += 0, posy -= 2;
    movex += 0, movey -= 2;
}


Duplicações duplicadas

Código:
if ($gameMap.isPassable(posx, posy, d)){
      $gamePlayer.jump(movex, movey, d);
      AudioManager.playSe({name: jumpSound, volume: 90, pitch: 100, pan: 0});
    } else
      AudioManager.playSe({name: jumpError, volume: 90, pitch: 100, pan: 0});


O problema do código acima, é que temos duas linhas quase idênticas:

Código:
AudioManager.playSe({name: jumpSound, volume: 90, pitch: 100, pan: 0});
AudioManager.playSe({name: jumpError, volume: 90, pitch: 100, pan: 0});

Vamos supor que em alguma alteração futura, o volume precisará ser reduzido para 50,
teremos que alterar em dois locais:

Código:
AudioManager.playSe({name: jumpSound, volume: 50, pitch: 100, pan: 0});
AudioManager.playSe({name: jumpError, volume: 50, pitch: 100, pan: 0});

Isso é muito ruim, nesse momento, as duas linhas estão bem perto, mas poderiam estar separadas em um arquivo de 600 linhas de código.

Duplicação de código é uma das maiores causas de bug, podemos evitar isso criando uma nova função e passando o name por parâmetro:

Código:
  function playSe(name)
  {
    AudioManager.playSe({name: name, volume: 90, pitch: 100, pan: 0});
  }


Código:
...
  if ($gameMap.isPassable(posx, posy, d)){
    $gamePlayer.jump(movex, movey, d);
    playSe(jumpSound);
  } else
    playSe(jumpError);
...

São alterações simples que podem fazer diferença no nosso dia, ficarei muito feliz caso absorva algo dessa análise.

Estarei aberto para debates sobre as sugestões apresentadas.
 
[member=770]Resque[/member] Considerando que é um plugin não pensei na legibilidade dele para os outros, estou acostumado a ler linhas grandes, erro meu. Segui algumas de suas sugestões e reenviei o anexo.
 
[member=426]Bruce Azkan[/member], é o que eu diga. Essa é minha segunda experiência mexendo com o "RGGS" e fico feliz de um dos sistemas poder ser útil para alguém.
 
Voltar
Topo Inferior