javascript - 如何正确设置这些 javascript 代理?
问题描述
我正在尝试为我正在制作的这款游戏的玩家和对手角色设置代理。基本上我希望游戏在玩家/对手的健康设置为 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 对象一样。(只是一个观察,我不知道这是否有帮助)
解决方案
推荐阅读
- postgresql - 在 Postgres 中展开行
- html - How to remove vertical space while using display: inline with same tag or division?
- azure-logic-apps - 上一个任务失败时无法在 Azure 存储中创建文件:状态代码为“200”的操作的架构定义无效
- jsp - 通过变量索引访问哈希元素
- c# - How to add a textbox row inside the datagrid wpf
- docker - 在 windows 的 jenkins 中配置“Docker Host Uri”时连接被拒绝。怎么解决?
- google-sheets - Zapier: Update google spread sheet row
- scala - 在需要时提取期权价值的优雅方式
- node.js - XMLHttpRequest 'Access-Control-Allow-Origin'... the response must not be the wildcard '*' when the request's credentials mode is 'include'
- javascript - 如何使用 ajax 向具有多对多关系的数据库添加行?