我正在尝试按照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有什么变化吗?
答案 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(...