我的阵列导致这个问题的原因是什么?

时间:2014-04-01 15:28:12

标签: javascript jquery

我正在为我的计算机类制作一个游戏,游戏的目标是让玩家在网格中移动并收集游戏中的所有乘客,并在它们耗尽电力之前将它们运送到基地。除了当我试图检查玩家是否超过乘客时,我几乎管理了其他所有事情。我最近的小提琴:http://jsfiddle.net/nZ8vA/13/是我试图检测乘客的尝试。在小提琴中似乎它正在工作(因为它检测到p)但是如果你继续在网格中移动然后返回它将检测到其他随机方格为乘客,即使他们没有分配给他们的信件。

我的新阵列(我正在努力弄清楚如何正常工作):

var map = [
    [{ color: "g", letter: "" }, 
     { color: "g", letter: "" }, 
     { color: "w", letter: "P" }, 
     { color: "w", letter: ""  }],

    [{ color: "w", letter: "" }],

    [{ color: "w", letter: "" }],

    [{ color: "g", letter: "" }, 
     { color: "g", letter: "" }, 
     { color: "w", letter: "" }, 
     { color: "w", letter: "" }],

    [{ color: "g", letter: "" }, 
     { color: "b", letter: "" }, 
     { color: "b", letter: "" }, 
     { color: "w", letter: "" }, 
     { color: "w", letter: "" }, 
     { color: "w", letter: "" }, 
     { color: "g", letter: "" }, 
     { color: "g", letter: "" }, 
     { color: "w", letter: "" }, 
     { color: "w", letter: "" }]
];

我真的在努力让它发挥作用,如果有人知道为什么这不起作用那么那就太好了。

我的小提琴(在我开始尝试探测乘客之前)包含我的旧阵列和完整的网格布局:http://jsfiddle.net/nZ8vA/7/

2 个答案:

答案 0 :(得分:0)

您的第一个数组只有四个条目,因此当您执行

playerPos[0] = Math.min(map[0].length - 1, playerPos[0] + 1);

向右移动,playerPos [0]永远不会超过3。

然后,当你开始向左移动时,它立即开始减少,导致你的位置关闭(甚至进入负面)。

我不完全理解你的数组的结构,但希望上面的内容足以解释发生了什么。基本上,在不更改数组结构的情况下,您无法使用map[0].length - 1来获取列数。这是一个使用向右和向下移动的设定值的示例。 http://jsfiddle.net/nZ8vA/17/

由于数组与网格不完全匹配(数组中的第一行只有4个条目,而网格有10列),还会发生大量的js错误。

答案 1 :(得分:0)

嗯,你有两个问题。首先,你的地图数组是错误的。你想要两行,10列。所以,你应该有外括号,然后是2组内括号,每组有10个大括号单元格。

此外,您可以将角色移出游戏区域,因为在您将约束放在您的位置之前,您可以设置CSS。

执行约束(min或max),然后根据位置值设置CSS。

// this is for left.. do the same for right, up, down 
// use appropriate playerPos index and css 'left' or 'top'
playerPos[0] = Math.max(0, playerPos[0] - 1);
$('#player').css('left', (playerPos[0] * 50 + 15) + 'px');

这个小提琴似乎有效:http://jsfiddle.net/nZ8vA/18/