2012-01-11 3 views
0

Я пишу небольшую игру «pacman» в js. Я использую html5 и холст для него, и все идет хорошо. Но я хочу нарисовать карту из спецификации, запущенной на многомерном массиве. Когда я использовал обычный массив, он работает как прелесть, но как только я использую свой многомерный массив, он просто предупреждает «somthings wrong», что печально.Не определено при использовании многомерного массива в javascript

Я думаю, что это из-за этого куска:

function getMapArray() { 
// define the yvalue of the map 
// will be ytile later.. 
var items = new Array(1); 
for(var i = 0; i < 2; i++) { 
    items[i] = new Array(xtile); 
} 

items[0][0] = "0010"; 
items[0][1] = "0010"; 
items[0][2] = "0010"; 
items[0][3] = "0010"; 
items[0][4] = "0010"; 
items[0][5] = "0010"; 
items[0][6] = "0010"; 
items[0][7] = "0010"; 
items[0][8] = "0010"; 
items[0][9] = "0010"; 
items[0][10] = "0010"; 
items[0][11] = "0010"; 
items[0][12] = "0010"; 
items[0][13] = "0010"; 
items[0][14] = "0010"; 

return items; 
} 

Но я не уверен. Возможно, что-то легко, но я долго смотрел на код, и он говорит, что xtile не определен, даже если я его сменил на целое.

Ссылка на полный исходный код: http://pastie.org/3168446

JsFiddle демо: http://jsfiddle.net/928wU/

Спасибо за помощь!

+0

О, кстати, когда я предупреждаю xtile, он выводит 15, что правильно! – Ms01

+0

Где вы пытаетесь узнать? –

+1

Вы пытались использовать литерал '' '' '' вместо 'new Array (x)'? Избегайте использования 'new Array', нет необходимости инициализировать длину массива заранее. И избегайте глобалов. –

ответ

1

Ваш getMap не выдает ошибки. Он возвращает массив длиной 2. Первый элемент представляет собой массив длины max (xTile, 15), первые 15 индексов, заполненных все той же строкой. Второй элемент - это массив длины xTile, каждый индекс пуст (undefined). Я не знаю, желательно это или нет.

Но теперь, посмотрите на код, вы публикуемую here:

function drawMap(map) { 
    //draw the x 
    for(i = 0; i < map.length; i++) { 
     entry = map[i]; 
     for(j = 0; j < entry.length; j++) { 
      if(i == 0 && j == 0) 
       fillCanvas(map[x], x, x+40, 40, 40); 
      else 
       fillCanvas(map[x], x*40, i*40, (x + 1) * 40, i*40); 
     } 
    } 
} 

Это проходит через двухмерном массиве. Но затем он пытается получить свойство вашей карты на карте x. Не было x ширина вашего холста ???

+0

Спасибо, я просто решил это сам, как 1 минуту назад. Не видел вашего ответа. Так простая ошибка :/ – Ms01

+0

'функция drawMap (карта) { \t // нарисовать х \t для (вар я = 0; I Ms01

1

Попробуйте использовать var items = []; (и аналогичные для внутренних) вместо new Array.

Если вы можете получить фактическое сообщение об ошибке, это было бы полезно.

+0

Woah, я переключился на скобки, а затем исходное сообщение об ошибке исчезло, но очень похоже на эти (возможно, 4, 5): Ошибка: неперехваченное исключение: [Исключение .. . msgstr "приглашение пользователя прерывается пользователем" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" местоположение: "JS frame :: resource: ///components/nsPrompter.js :: openTabPrompt :: строка 462" data: no] – Ms01

+0

То, возможно, не имеет отношения к мой код, но это точно: Ошибка: неперехваченное исключение: [Исключение ... "Код возврата компонента: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" местоположение: "JS-кадр: : file: ///home/markus/Desktop/pacman_serious/pacman.js :: fillCanvas :: строка 56 "data: no] – Ms01

+0

erm ...Я никогда не видел ничего подобного. Какой браузер вы используете? –

0

Вы инициализируете свой массив длиной 1. Это слишком мало?

+0

Ну, он присваивает только индекс '0', так что все будет хорошо. И так или иначе, массивы будут расти автоматически. –

+0

Я так не думаю, я пробовал с более высокими значениями, но это тоже не сработало. :( – Ms01

+0

Он пеет от '0' до' 1', это '2', если я не ошибаюсь? – Halcyon

Смежные вопросы