Phaser 3:从另一个 class 调用函数
Phaser 3: Call function from another class
我在文件 a.ts:
中创建了 updateCanvas() 函数
export class loadscene extends Scene {
textures1!: any
textures2!: any
textures3!: any
constructor() {
const key = 'loadscene'
super(key)
}
updateCanvas(scene){
switch (scene) {
case 'canvastextures1':
this.textures1.update()
break
case 'canvastextures2':
this.textures2.update()
break
case 'canvastextures3':
this.textures3.update()
break
}
}
}
在文件 b.ts 中,我调用此功能但无法正常工作:
import { loadscene } from './load.scene'
export class BattleScene extends Scene {
loadScene!: loadscene
...
this.loadScene = new loadscene()
this.loadScene.updateCanvas(tile.body.gameObject.texture.key)
我可以在内部文件中使用函数,但不能从另一个文件中调用。有人有什么想法吗?谢谢。
好吧,我认为问题出在这一行 this.loadScene = new loadscene()
。
当您初始化 属性 this.loadScene
时,您必须 获取 创建的场景,而不是创建新场景。
像这样:this.loadScene = this.scene.get('loadscene')
.
这应该有效 (如果编译器抛出错误,您应该将 属性 从 loadScene!: loadscene
更改为 loadScene!: any
,或者强制转换可能有效像 this.loadScene = (this.scene.get('loadscene') as loadscene )
).
P.s.: 我会更改方法的参数 updateCanvas(scene)
,scene
可能会被误解,因为参数是纹理的key.
并以大写字母开头 class 名称。所以 class LoadScene...
会更好。
更新:
codepen 中的代码显示,我将如何使用 typescript 从另一个场景调用函数 https://codepen.io/akumagamo/pen/WNMQWJe
在这个代码笔中,我正在从不同的场景更改纹理
这里是相关代码(去掉贴图部分):.
class FirstScene extends Phaser.Scene {
constructor() {
super('firstScene')
}
create(){
console.log('Create Call in First Scene!')
this.scene.start('secondScene')
}
testME(){
console.info('TEST ME')
return `called function "testME" from scene:${this.scene.key}`;
}
}
class SecondScene extends Phaser.Scene {
parentScene: any
constructor() {
super('secondScene')
}
create(){
let text = this.add.text(10,10, '"Create" in Second Scene!', {'color':'#fff'});
this.parentScene = this.scene.get('firstScene')
let newLine = this.parentScene.testME();
text.setText(text.text + '\n' + newLine);
}
}
我在文件 a.ts:
中创建了 updateCanvas() 函数export class loadscene extends Scene {
textures1!: any
textures2!: any
textures3!: any
constructor() {
const key = 'loadscene'
super(key)
}
updateCanvas(scene){
switch (scene) {
case 'canvastextures1':
this.textures1.update()
break
case 'canvastextures2':
this.textures2.update()
break
case 'canvastextures3':
this.textures3.update()
break
}
}
}
在文件 b.ts 中,我调用此功能但无法正常工作:
import { loadscene } from './load.scene'
export class BattleScene extends Scene {
loadScene!: loadscene
...
this.loadScene = new loadscene()
this.loadScene.updateCanvas(tile.body.gameObject.texture.key)
我可以在内部文件中使用函数,但不能从另一个文件中调用。有人有什么想法吗?谢谢。
好吧,我认为问题出在这一行 this.loadScene = new loadscene()
。
当您初始化 属性 this.loadScene
时,您必须 获取 创建的场景,而不是创建新场景。
像这样:this.loadScene = this.scene.get('loadscene')
.
这应该有效 (如果编译器抛出错误,您应该将 属性 从 loadScene!: loadscene
更改为 loadScene!: any
,或者强制转换可能有效像 this.loadScene = (this.scene.get('loadscene') as loadscene )
).
P.s.: 我会更改方法的参数 updateCanvas(scene)
,scene
可能会被误解,因为参数是纹理的key.
并以大写字母开头 class 名称。所以 class LoadScene...
会更好。
更新:
codepen 中的代码显示,我将如何使用 typescript 从另一个场景调用函数 https://codepen.io/akumagamo/pen/WNMQWJe
在这个代码笔中,我正在从不同的场景更改纹理
这里是相关代码(去掉贴图部分):.
class FirstScene extends Phaser.Scene {
constructor() {
super('firstScene')
}
create(){
console.log('Create Call in First Scene!')
this.scene.start('secondScene')
}
testME(){
console.info('TEST ME')
return `called function "testME" from scene:${this.scene.key}`;
}
}
class SecondScene extends Phaser.Scene {
parentScene: any
constructor() {
super('secondScene')
}
create(){
let text = this.add.text(10,10, '"Create" in Second Scene!', {'color':'#fff'});
this.parentScene = this.scene.get('firstScene')
let newLine = this.parentScene.testME();
text.setText(text.text + '\n' + newLine);
}
}