canary minecraft mod使用javascript scriptcraft示例代码的问题

Problems using javascript scriptcraft example code for canary minecraft mod

本文关键字:代码 问题 scriptcraft minecraft mod 使用 javascript canary      更新时间:2023-09-26

我正在努力遵循scriptcraft示例页面上给出的示例,尤其是"摩天大楼"示例。我发现这个脚本需要一些修改才能工作,目前我的代码片段如下:

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)

编剧有什么变化吗?

有点晚了,但也许你还在寻找答案。。。你的问题是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(...