我正在尝试为正在制作的这款游戏的玩家和对手角色设置代理。基本上,我希望游戏在玩家/对手的生命值设置为0时打印游戏结束画面。
我尝试在其自己的变量中定义字符对象,但这没有用。现在,我的代理指向了我在游戏中代表角色的新实例。这类工作有效,因为程序现在可以识别出,当我调用proxy.method时,该方法是代理指向的对象的方法。但是,当我尝试运行代码时,运行状况栏完全不变。
// function to attack if the coolDown is false
function attack(character, move, other, coolDown) {
if(coolDown.getValue() === false) {
character.makeMove(move, other);
coolDown.setValue(true);
}
}
const HANDLER = {
set: function(obj, prop, value) {
console.log(`obj = ${obj} prop = ${prop} value = ${value}`);
obj.prop = value;
if(prop === 'health') {
if(obj.prop.value === 0) {
gameover(true);
}
}
return true;
}
};
var playerCoolDown = new CoolDownTime(false);
var player = new Proxy(new Character(PLAYER_HP), HANDLER);
var opponent = new Proxy(new Character(OPP_HP), HANDLER);
setInterval(() => playerCoolDown.setValue(false), 2000);
setInterval(() => opponent.makeMove('KICK', player), 2000);
player.updateHealth();
opponent.updateHealth();
// event listeners for various moves
PUNCH.addEventListener('click', () => {attack(player, 'PUNCH', opponent, playerCoolDown)});
KICK.addEventListener('click', () => {attack(player, 'KICK', opponent, playerCoolDown)});
HEAL.addEventListener('click', () => {attack(player, 'HEAL', opponent,
playerCoolDown)});
EXTERMINATE.addEventListener('click', () => {attack(player, 'EXTERMINATE', opponent, playerCoolDown)});
我希望console.log('obj = ${obj}')
打印出Character,但是它打印出[object Object]。运行console.log('${obj.prop}'}
时,我不确定。但是,当我调用console.log('prop = %{prop} value = ${value}')
时,我得到正确的值“健康”,并且某些值从100递减(应该是,健康从100开始)。但是,在再次调用它之后,它的新值减小了100,几乎就像每次重置健康值时代理实例化一个新的Character对象一样。 (只是观察,我不知道这是否有帮助)