我正试着用Java脚本制作我自己的世界编辑器.我正在使用一个单独的瓷砖文件夹,并将它们放在屏幕上.然后当你按下瓷砖的时候,你基本上就 Select 了它.这是有效的,但当指针从瓷砖拾取切换到瓷砖放置时,我会得到这个错误.
我已经判断了是否一切都定义好了,但我可能遗漏了一些东西
更新:我已经更改了箭头函数以使用正常的函数,但它仍然不起作用,并给出了相同的错误,现在我提供了整个文件代码
i have encountered this个 Console.log(this.map) VM10362:1未定义 未定义
These are the errors aka stack trace i think个
这是我的代码
class WorldEditor extends Phaser.Scene {
constructor() {
super("editWorld")
this.tileSize = 48
this.tileIndex = 0
this.tileFolder = 'Assets/Tiles/'
this.tilesPerRow = 37
this.totalTiles = 160
this.tilePicked = false
}
preload() {
// Load tile images from the folder
for (let i = 0; i < this.totalTiles; i++) {
this.load.image('tile (' + i + ')', this.tileFolder + 'tile (' + i + ').png')
}
}
create() {
const tileWidth = this.tileSize
const tileHeight = this.tileSize
const tilesPerRow = this.tilesPerRow
if(!this.map){
this.map = this.make.tilemap({
tileWidth: this.tileSize,
tileHeight: this.tileSize,
width: 1200,
height: 720
})
}
for (let i = 0; i < this.totalTiles; i++) {
const x = ((i % tilesPerRow) * tileWidth)/1.48
const y = (Math.floor(i / tilesPerRow) * tileHeight)/1.48
this.tile = this.add.image(x, y, 'tile (' + i + ')')
this.tile.setOrigin(0)
this.tile.setScale((tileWidth / this.tile.width)/1.48, (tileHeight / this.tile.height)/1.48)
}
// Set up pointer events
this.setupPointerEvents()
// Keyboard event to switch back to tile selection
this.input.keyboard.on('keydown-F', () => {
this.tilePicked = false
console.log('Switched back to tile selection')
this.setupPointerEvents() // Update pointer events after switching back
})
}
setupPointerEvents() {
this.input.off('pointerdown')
if (!this.tilePicked) {
const tiles = this.children.list.filter(child => child.texture && child.texture.key.startsWith('tile ('))
tiles.forEach((tile, i) => {
tile.setInteractive()
tile.on('pointerdown', function() {
this.tileIndex = i
this.tilePicked = true
tile.setTint(0xff0000)
console.log('Selected tile index:', this.tileIndex)
this.setupPointerEvents()
}, this)
})
} else {
this.input.on('pointerdown', function(pointer) {
this.tileX = Math.floor(pointer.x / this.tileSize)
this.tileY = Math.floor(pointer.y / this.tileSize)
this.placeTile(this.tileX, this.tileY)
}, this)
}
}
// Other methods...
placeTile(tileX, tileY) {
this.map.putTileAt(this.tileIndex, tileX, tileY)
}
// Implement saveMap and loadMap functions to save and load level data
}