我有一个班级角色:Character.ts
/// This is called when server responds
public setAttributeByType(type: StatsTypes, value: number): void {
switch (type) {
case StatsTypes.STRENGTH:
case StatsTypes.DEXTERITY:
case StatsTypes.VITALITY:
case StatsTypes.INTELIGENCE:
this.stats[type] = value;
break;
default: break;
}
}
....
该类实例是在我的“网络代码”中的 Vue 组件外部创建的:
public static onStartGame(data:any):void {
Player.character = new Character(data.data);
Game.displayGamePage(PagesIndex.GAME_PAGE);
requestAnimationFrame(Game.loop);
}
并在主要组件中使用:Game.vue
import { defineComponent } from 'vue'
import Player from '@/Player/player';
import SceneManager, { Scenes } from '@/Render/scene_manager';
import Scene from '@/Render/scene';
import MainScene from "@/Render/scenes/main";
import MapScene from "@/Render/scenes/map";
import Game from '@/game/game';
// Components
import VplayerBar from "@/vue/subs/playerBar.vue"
import Vcharacter from "@/vue/subs/character.vue"
export enum GamePages {
MAIN_PAGE = 1,
MAP_PAGE,
}
export default defineComponent({
name: "game",
components: {
VplayerBar,
Vcharacter,
},
data() {
return {
page: GamePages.MAIN_PAGE,
scenes: Scenes,
gamePages: GamePages,
player: Player,
character: Player.character, /* <------------ Reference to class */
pages: {
character: false,
}
}
},
})
...将其作为支柱传递给character.vue
成分
export default defineComponent({
name: "character",
props: {
character: { // <---- This prop does not change
type: Character,
required: true
},
toggleCharacter: {
type: Function,
required: true
}
},
components: {
VBackpack,
VInventory
},
data() {
return {
StatsTypes,
}
},
methods: {
toglePage() {
this.toggleCharacter()
},
getPortrait(isMobile:boolean = false) {
return Character.getCharacterPortrait(this.character.faction, this.character.gender, isMobile);
},
addPoint(attribute:StatsTypes, value: number) {
if (GKeyHandler.keys[Keys.SHIFT_LEFT])
value = 10;
CharacterHandler.addAttributePoint(Player.character, attribute, value);
//this.character.stats[StatsTypes.STRENGTH] += 1;
}
}
});
问题是,每当我更改 vue 组件之外的字符类实例中的任何内容(在我的网络代码中)时 - 例如character.setAttributeByType(attribute, value)
,Vue 没有看到变化。如果我直接在里面这样做character.vue
组件,它可以工作(请参阅中的注释代码addPoint
)
我尝试使用 Proxy & Watch,但没有帮助。