1

我想为我的 rpg 游戏制作一张小地图。

制作小地图是否像将所有对象尺寸、速度和坐标除以您想要的小地图一样简单?

例如下面......你有一个 1000x1000px 的大小,一个 500x500px 的画布(视口),玩家位于视口的中心......如果你想要一个实际世界一半大小的小地图,你会做:

  • 播放器/视口x,y速度/2
  • 播放器/视口x,y坐标/2
  • 画布、世界和所有对象的宽度和高度除以 2

ETC...

在此处输入图像描述

这样小地图在世界上的渲染和速度就可以准确地缩放?我错过了什么吗?

谢谢!


编辑:像这样的东西?

function miniMap() {
  $(".minimapHolder").show();
  $("#mini_map").text("hide minimap");
  var minicanvas = document.getElementById("miniMap");  
  ministage = new createjs.Stage("miniMap");
  minicam = new createjs.Shape();
  minicam.graphics.beginStroke("white").drawRoundRect(0, 0, 100, 40, 5);
  //blip representation of Player
  player_blip = new createjs.Shape();   
  player_blip.graphics.beginFill("yellow").drawRoundRect(0, 0, 11.2, 12, 1);

  animal_blip = new createjs.Shape();   
  animal_blip.graphics.beginFill("red").drawRoundRect(0, 0, 24.4, 21.6, 1);

  player_blip.x = players_Array[0].x/5;
  player_blip.y = players_Array[0].y/5;

  animal_blip.x = animalContainer.x/5;
  animal_blip.y = animalContainer.y/5;

  minicam.x = players_Array[0].x-110;   
  minicam.y = players_Array[0].y-110;   
  ministage.addChild(player_blip, animal_blip, minicam);
  ministage.update();

}

function updateMiniMap() {
  player_blip.x = players_Array[0].x/5;
  player_blip.y = players_Array[0].y/5;

  if (ContainerOfAnimals.children[0] != null) {
      var pt = ContainerOfAnimals.localToGlobal(ContainerOfAnimals.children[0].x, ContainerOfAnimals.children[0].y);
      console.log(pt.x);

      animal_blip.x = pt.x/5;
      animal_blip.y = pt.y/5;
  } else {
      ministage.removeChild(animal_blip);
  }
  minicam.x = player_blip.x-40;     
  minicam.y = player_blip.y-15;                     
  ministage.update();
  } 

给出:

在此处输入图像描述

4

1 回答 1

1

简短的回答:“它(很可能)会起作用。” ...但是:

您要实现的只是缩放舞台/容器,因此您也可以使用所有内容的副本并将其放入容器中并将其缩小到 0.5,但这不是小地图的目的。

小地图的对象应该只是“真实”世界中对象的表示,因此不应该有任何速度等。(尤其不应该与“真实”世界分开更新) - 虽然你的方法可能会奏效,你总是必须跟踪和更新每个属性,如果你错过了一些小东西,这会很快变得混乱甚至导致差异。

一个更“干净”(和简单)的方法是,每个小地图对象都有一个对“真实”世界中对象的引用,并且在每个刻度上,它只是读取 x/y 坐标并更新它的基于小地图比例的自己的坐标。

另一件事是图形:缩放操作可能很昂贵(性能方面),尤其是当它们在每一帧都完成时,所以如果你对小地图使用相同的图形,你至少应该使用缓存的 DisplayObject 并且不缩放图形每个框架。

于 2013-08-19T19:56:33.570 回答