2

我正在使用 babylonjs 库并使用打字稿创建了一个“建筑”类。顺便说一句,对整个事情使用打字稿。我从我的主 game.ts“游戏”类创建了这个新的“建筑”,当尝试访问“建筑”的成员时,我得到“未定义”的变量错误。然而,这只发生在另一个类方法中,但似乎在构造函数中正常工作。我假设它与 javascript/typescript 中的“this”范围有关。我尝试通过执行以下操作来修改函数:

Create = ...(...)=> {
   ...

我尝试通过以下方式创建变量:

private rect: = () => Rectangle

但这仍然不起作用

这真的是“this”范围界定的问题吗,因为似乎没有任何效果。下面我准确地标记了这个变量在哪里起作用,在哪里不起作用。

class Building {

    private rect : Rectangle
    private buildingMesh:string[]
    private buildingId:string

    constructor(rect: Rectangle, id:string) {

      this.rect = rect
      console.log("TL in b const: " + this.rect.topLeft.x) // <--- This works here
      this.buildingId = id

    }

    Create(scene:BABYLON.Scene) {

      BABYLON.SceneLoader.ImportMesh(this.buildingId, "models/","tree.babylon", scene, function (newMeshes) {

          var idx = 0

          console.log("TL in b: " + this.rect.topLeft.x) // <--- this gives me undefined
          var wall =newMeshes[0].createInstance(this.buildingId + idx) 
          wall.position.x = this.rect.topLeft.x
          wall.position.y = this.rect.topLeft.y
          this.buildingMesh.push(this.buildingId + idx)
          idx++
      });
    }
}
4

1 回答 1

3

我猜你快到了。箭头函数( =>)语法是我们需要的,但即使在BABYLON.SceneLoader.ImportMesh调用时:

BABYLON.SceneLoader
    .ImportMesh(this.buildingId, "models/","tree.babylon", scene, 
        function (newMeshes) {
         ...
         // here we do not have this kept by TS for us
});

我们应该使用

BABYLON.SceneLoader
    .ImportMesh(this.buildingId, "models/","tree.babylon", scene, 
        (newMeshes) => {
         ...
         // here the magic would happen again
         // and compiler will keep this to be what we expect
});
于 2015-09-20T03:45:51.403 回答