Я создал функцию updateCanvas() в файле a.ts:
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
может быть неправильно понят, так как параметр ключ текстуры.
И начинайте имена классов с верхнего регистра. так что class LoadScene...
будет лучше.
Обновлять:
код в codepen показывает, как я буду использовать typescript для вызова функций из другой сцены https://codepen.io/akumagamo/pen/WNMQWJe
В этом коде я меняю текстуру из другой сцены.
Вот соответствующий код (без текстурной части):.
class FirstScene extends Phaser.Scene {
constructor() {
super('firstScene')
}
create(){
console.info('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);
}
}
Класс Scene
, класс Phaser.Scene
? А как загружаются сцены?
сцены начинаются с this.scene.start()
@ CSNo.1 CSNo.1 это проблема компиляции машинописного текста, самое быстрое решение - просто изменить loadScene!: loadscene
на loadScene: any
, я думаю, это должно помочь. Но я не уверен на 100%, так как я пишу фазерные приложения только на чистом Javascript, чтобы облегчить рабочий процесс без необходимости компиляции/транспиляции. вот так мини демо на codepen codepen.io/akumagamo/pen/WNMQWJe
@ CSNo.1 Я обновляю свой ответ и код, найденный в связанном CodePen, я думаю, что это должно охватывать основы, которые вы ищете.
когда я использую
this.loadScene = this.scene.get('loadscene')
. Он возвращается:Type 'Scene' is missing the following properties from type 'loadscene': textures1, textures2, textures3, land1, and 5 more.ts(2740)