使用javascript scriptcraft示例代码为金丝雀minecraft mod的问题

时间:2016-01-12 21:40:06

标签: javascript minecraft

我正在尝试按照scriptcraft example page上给出的示例,尤其是“摩天大楼”示例。我发现脚本需要一些修改才能工作,目前我的代码片段如下:

exports.mytest = function ( floors ) {
  var i ;
  if ( typeof floors == 'undefined' ) {
    floors = 10;
  }
  // bookmark the drone's position so it can return there later
  this.chkpt('myskyscraper'); 
  for ( i = 0; i < floors; i++ ) {
    echo( 'Floor ' + i);
    this
      .box(blocks.iron,20,1,20)
      .up()
      .box0(blocks.glass_pane,20,3,20)
      .up(3);
  }
  // return the drone to where it started
  this.move('myskyscraper'); 
};

但是虽然计数器计数为3(或我指定的任何数字),但'摩天大楼'只有一层!

我按如下方式拨打电话:

/js mytest(10)

scriptcraft有什么变化吗?

1 个答案:

答案 0 :(得分:1)

有点晚了,但也许你还在寻找答案...... 你的问题是this始终引用起点/无人机,因此每次迭代都会从当前位置重新启动。为了避免这种情况,你必须保存当前的无人机位置(显然它不是有状态的/你每次使用它时都会得到一个新对象)。 所以我修改了你的代码片段:

exports.mytest = function ( floors ) {
  var i ;
  if ( typeof floors == 'undefined' ) {
    floors = 10;
  }
  var drone = this;
  // bookmark the drone's position so it can return there later
  drone.chkpt('myskyscraper');
  for ( i = 0; i < floors; i++ ) {
    echo( 'Floor ' + i);
    drone = drone
      .box(blocks.iron,20,1,20)
      .up()
      .box0(blocks.glass_pane,20,3,20)
      .up(3);
  }
  // return the drone to where it started
  drone.move('myskyscraper');
};

重要的部分是:

var drone = this;

drone = drone.box(...