微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试使用另一个类的函数 - Phaser 3

如何解决尝试使用另一个类的函数 - Phaser 3

所以我正在尝试使用 Phaser 3 构建游戏,但现在面临一些问题......

问题是我无法从游戏场景中的对象调用函数...

我有这个对象类:

  • visor.js

  • cardProc.js

  • cardPeca.js

  • table.js

  • index.js

和游戏场景:

  • game.js

game.js 代码

import CardProc from '../objects/cardProc';
import CardPeca from '../objects/cardPeca';
import Table from '../objects/table';
import Visor from '../objects/visor';

//criação de uma scene,onde os objetos serão adcionados
export default class Game extends Phaser.Scene
{
    
    constructor()
    {
        super({key:'Game'})

    }

    preload()
    {
        let i = 0;
        this.load.image('cardPeca','src/assets/cardPeca.png');
        this.load.image('cardProc','src/assets/cardProc.png');
        this.load.image('card_frentePeca','src/assets/frentePeca.png');
        this.load.image('card_frenteProc','src/assets/frenteProc.png');
        this.load.image('background','src/assets/background.png');
        this.load.image('mesa','src/assets/table.png');  
        this.load.image('shortcut','src/assets/shortcutBox.png');  
        this.load.image('visor','src/assets/visor.png');  
        this.load.image('dropZone','src/assets/dropZone.png');  
        this.load.image('handCursor1','src/assets/handCursor1.png');
        this.load.image('handCursor2','src/assets/handCursor2.png');  

    }

    create()
    {
      let scene = this;
      let cardsProc = [];
      let cardsPeca = [];
      let mesa;
      this.data.set('cardPecaTable',1);
      this.data.set('cardPecaDeck',10);
      this.data.set('cursorHandFlag',false);
      const {width,height} = this.scale;


        //imagem de background
        this.add.image(0,'background').setorigin(0);

        //colocar mesa
        mesa = new Table(this);
        mesa = mesa.render(948,352,'mesa',this);


        //colocar visor
        this.visor = new Visor(this);
        this.visor = this.visor.render(945,35,'visor',this);
      
        //setBaralho de pecas
        for(var i = 0;i<10;i++)
            cardsPeca[i] = new CardPeca(this,i);
        this.shuffle(cardsPeca);
        for(var i = 0;i<10;i++)                  
            cardsPeca[i] = cardsPeca[i].render(1350,350,'cardPeca',this,'shortcut');
        
          //dealCartas processos
          for(var i = 0;i<10;i++)  
          {
            cardsProc[i] = new CardProc(this);               
            cardsProc[i] = cardsProc[i].render(500+100*i,780,'cardProc','shortcut');
          }
    }

    shuffle(array){
        var currentIndex = array.length,temporaryValue,randomIndex;
      
        // While there remain elements to shuffle...
        while (0 !== currentIndex) {
      
          // Pick a remaining element...
          randomIndex = Math.floor(Math.random() * currentIndex);
          currentIndex -= 1;
      
          // And swap it with the current element.
          temporaryValue = array[currentIndex];
          array[currentIndex] = array[randomIndex];
          array[randomIndex] = temporaryValue;
        }
      
        return array;
      }

    update() 
    {
      //ISSUE
      if(this.data.get('cursorHandFlag'))
      {
        this.visor.getTurn();
      }
    }

}

visor.js 代码

import Phaser from "phaser";

export default class Visor 
{
    
    constructor(scene)
    {       
        let turn;
        let board;
        let turnString = ['Escolha da peça','Seleção dos processos','Comparando os processos','Organização da sequência de processos','Criação (Palpite)'];
        let turnX = [53,73,88,130,53]
        var style = { font: "15px Arial",fill: "#000000",align: "center",wordWrap: true};
        var text;
        //funções existentes dentro da classe 
        this.render = (x,y,sprite,scene) =>
        { 
            turn = 0;
            board = scene.add.image(x,sprite).setInteractive().setScale(0.7,0.75);
            text = scene.add.text(board.x-turnX[turn],board.y-10,turnString[turn],style);
            return board;   
        }

        this.getTurn = ()=>
        {
            return this.turn;
        }

        this.nextTurn = () =>
        {
            text.destroy();
            turn++;
            text = scene.add.text(board.x-turnX[turn],style);
        }
            
    }
    }

当我调用 this.visor.nextTurn(); 时,我在控制台中收到此错误

game.js?f5a7:70 Uncaught TypeError: this.visor.getTurn is not a function
    at Game.create (game.js?f5a7:70)
    at SceneManager.create (phaser.js?d4ef:89720)
    at SceneManager.loadComplete (phaser.js?d4ef:89632)
    at LoaderPlugin.emit (phaser.js?d4ef:1908)
    at LoaderPlugin.loadComplete (phaser.js?d4ef:192810)
    at LoaderPlugin.fileProcessComplete (phaser.js?d4ef:192776)
    at ImageFile.onProcessComplete (phaser.js?d4ef:4787)
    at Image.data.onload (phaser.js?d4ef:17236)

但是使用 this.visor = this.visor.render(945,this); 真的很好...我已经尝试做类似 function nextTurn(){...} 的事情并且得到了同样的错误

请有知识的人帮助我...请;c

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。