Autor Tópico: RPG Maker MV Put Some Random Tile  (Lida 53 vezes)

Offline HermesPasser

  • programador de quintal
  • Morador
  • *
  • 6/14
  • Participante do evento Natal II.
    • Ver perfil
    • Gládio Cítrico
    • Inventário
Put Some Random Tile
Online: 09 de Dezembro de 2017, 09:25:43
Introdução
Primeiramente fiz esse sistema para a "Gincana: Fábrica do Noel", ele basicamente adiciona um tile aleatório em um lugar aleatório do mapa. Ele não tem aplicação prática mais satisfaz os requisitos "Criar um script que clone ou adicione uma tile em qualquer lugar do mapa."

Demonstração

Código
Em anexo.
« Última modificação: 09 de Dezembro de 2017, 10:09:44 por HermesPasser »
 

Offline Resque

  • Administração
  • *
  • 5/14
  • Tenha 1 ano na comunidade. Participante do evento: Lua Infectada Participante do evento: Baile das Máscaras 2017
    • Ver perfil
    • Inventário
Re:Put Some Random Tile
Resposta #1 Online: 10 de Dezembro de 2017, 15:58:55
@HermesPasser

Gostei bastante do script, achei bem legal, simples e fácil.

Notei alguns pontos que podem ser melhorados em relação ao código.

Código: [Selecionar]
Tilemap.prototype._readMapData = function(x, y, z) {
    if (this._mapData) {
      var width = this._mapWidth;
      var height = this._mapHeight;

      if (this.horizontalWrap) {
        x = x.mod(width);
      }
      if (this.verticalWrap) {
        y = y.mod(height);
      }
      if (x >= 0 && x < width && y >= 0 && y < height) {
       
        // This do the magic, baby...
        if (xToBeChanged >= 0 && xToBeChanged < width && yToBeChanged >= 0 && yToBeChanged < height)
          if (x == xToBeChanged && y == yToBeChanged)
            return tileId;
       
        return this._mapData[(z * height + y) * width + x] || 0;
      } else {
        return 0;
      }
    } else {
      return 0;
    }
  };

No código acima, você poderia retirar toda a lógica do "if (this._mapData)" deixando apenas o retorno (return 0) caso a condição seja falsa.

EX:

Código: [Selecionar]
Tilemap.prototype._readMapData = function(x, y, z) {
  if (!this._mapData)
    return 0

  var width = this._mapWidth;
  var height = this._mapHeight;
  ...

--------------------

Você também poderia usar mais funções para partes do código que sejam responsáveis por lógicas de processamento.

Código: [Selecionar]
if (x >= 0 && x < width && y >= 0 && y < height) {       
  // This do the magic, baby...
  if (xToBeChanged >= 0 && xToBeChanged < width && yToBeChanged >= 0 && yToBeChanged < height)
    if (x == xToBeChanged && y == yToBeChanged)
      return tileId;
 
  return this._mapData[(z * height + y) * width + x] || 0;
} else {
  return 0;
}

Você poderia alterar o código acima para:

Código: [Selecionar]
  Tilemap.prototype._readMapData = function(x, y, z) {
    if (this._mapData) {
      var width = this._mapWidth;
      var height = this._mapHeight;

      if (this.horizontalWrap)
        x = x.mod(width);

      if (this.verticalWrap) {
        y = y.mod(height);
     
      cloneTile(x, y, width, height, z);
    } else {
      return 0;
    }
  };

Código: [Selecionar]
function cloneTile(x, y, width, height, z){
  if (x >= 0 && x < width && y >= 0 && y < height) {
     
      // This do the magic, baby...
      if (xToBeChanged >= 0 && xToBeChanged < width && yToBeChanged >= 0 && yToBeChanged < height)
        if (x == xToBeChanged && y == yToBeChanged)
          return tileId;
     
      return this._mapData[(z * height + y) * width + x] || 0;
    } else {
      return 0;
    }
}
#TeamHero

 
   Esses usuários gostaram disto: HermesPasser

Estes usuários estão vendo este tópico:
0 Membros e 1 Visitante