跟踪播放器对象构造函数中的Javascript键盘事件

跟踪播放器对象构造函数中的Javascript键盘事件,javascript,Javascript,为了学习,我正在做一个简单的JS2D棋盘游戏。我很难确保由箭头键盘输入启动的玩家动作在控制台中得到正确跟踪 假设,我只想限制自己使用左箭头键跟踪任何运动: 下面是相应的构造函数,用于预先定义在棋盘上移动的玩家对象(如我所说,目前仅向左移动: 功能玩家(姓名、位置、位置、当前回合、数字移动、武器、以前的武器){ this.name=名称; this.posY=posY; this.posX=posX; this.currentTurn=currentTurn; this.numberMoves=

为了学习,我正在做一个简单的JS2D棋盘游戏。我很难确保由箭头键盘输入启动的玩家动作在控制台中得到正确跟踪

假设,我只想限制自己使用左箭头键跟踪任何运动:

下面是相应的构造函数,用于预先定义在棋盘上移动的玩家对象(如我所说,目前仅向左移动:

功能玩家(姓名、位置、位置、当前回合、数字移动、武器、以前的武器){
this.name=名称;
this.posY=posY;
this.posX=posX;
this.currentTurn=currentTurn;
this.numberMoves=numberMoves;//计算玩家的移动次数。
这个武器=武器;
this.locatePosition=函数(){
var l=0;
var m=0;
对于(l=0;l{
开关(e.which){
案例37://左-1
这个.numberMoves+=1;
console.log(“玩家的移动次数:“+this.numberMoves”);
this.posX=parseInt((this.posX)-1);
this.newPosY=this.posY;
this.newPosX=this.posX;
log(“新位置:“+this.newPosY+”,“+this.newPosX”);
打破
}
}
};

}
这个.posX
这个.posY
这个.numberMoves
这个.武器
的值从来没有给定过值。的确,它们在
Person
构造函数中被赋值,但是你没有传递参数,所以它们仍然是
未定义的

在执行以下操作时,您将获得一些信息:

var player1 = new Player("Red Sonja", 0, 0, false, 0);
//                                  ^^^^^^^^^^^^^^^^
……等等

您的代码中还有很多需要更改/修复的内容,但这些内容太多,无法一一列出。只有几件事:

  • 当您已经有了
    posX
    posY
    时,函数
    locatePosition
    似乎没有用处。如果您知道项目的坐标在哪里,那么在整个数组中查找项目是浪费时间的
  • 在基于回合的游戏中,每个玩家的移动次数不应单独存储,而只能存储一次。通常存储“层”数而不是移动次数,即单独移动的次数:0表示玩家1要移动,1表示玩家2要移动,2表示玩家1要移动,等等
  • 类似地,您不应该存储事实,无论它是否属于玩家自己的属性。这应该是一个单独的变量,并且只有一个,或者最好是从层号(
    ply%2
    )中派生出来
  • 在构造函数中,你不应该接受那么多的参数。这是不实际的,通常也不是必需的。相反,为一些属性提供默认值

如果你不能理解你的意大利面,我们该怎么办?你应该把问题缩小到问题所在的地方,试着调试所有进入这些地方的值,然后解决问题。非常感谢!我现在得到了我想要的跟踪。你在所有其他方面都是对的……我不会再打扰你了,e除此之外:你知道为什么在map数组上循环的drawMap函数没有为数组的所有元素添加div吗?在某个点上迭代停止了…你的内部
for
有一个错误。它不应该迭代到
mapArray.length
,而是迭代到
mapArray[v].length
。您还可以将
开关
减少为
if
,并重用武器对象(如果是武器对象)的
.name
属性。这使您的代码更通用(想象您将添加第五件武器).事实上,您不应该将武器存储在单独的变量中,而应仅存储在数组中…再次感谢您!您的建议非常宝贵:-)很高兴它对您有用;-)