2012-05-09 4 views
0

Я использую холст HTML5 и JavaScript для создания базовой игры, и у меня есть массив изображений для чисел 1-10, а затем есть еще один массив для валлийского слова для чисел 1-10.html5 canvas array of images-draw image to canvas

Что я хочу сделать, это выбрать случайный элемент из массива изображений и случайный элемент из массива слов и отобразить их как на холсте. Затем пользователь щелкнет по галочке, чтобы указать, соответствует ли слово правильному номеру, или крестику, если это не так.

Проблема в том, что я не уверен, как нарисовать элемент массива на холсте. У меня есть следующий код, который я собирался использовать только для проверки, что он работает, прежде чем я думаю о том, как сделать элементы нарисованные быть выбраны случайным образом:

function drawLevelOneElements(){ 
      /*First, clear the canvas */ 
      context.clearRect(0, 0, myGameCanvas.width, myGameCanvas.height); 
      /*This line clears all of the elements that were previously drawn on the canvas. */ 
      /*Then redraw the game elements */ 
      drawGameElements(); 
      /*Now draw the elements needed for level 1 (08/05/2012) */ 
      /*First, load the images 1-10 into an array */ 
      var imageArray = new Array(); 
      imageArray[0] = "1.png"; 
      imageArray[1] = "2.png"; 
      imageArray[2] = "3.png"; 
      imageArray[3] = "4.png"; 
      imageArray[4] = "5.png"; 
      imageArray[5] = "6.png"; 
      imageArray[6] = "7.png"; 
      imageArray[7] = "8.png"; 
      imageArray[8] = "9.png"; 
      imageArray[9] = "10.png"; 

      /*Then create an array of words for numbers 1-10 */ 
      var wordsArray = new Array(); 
      wordsArray[0] = "Un"; 
      wordsArray[1] = "Dau"; 
      wordsArray[2] = "Tri"; 
      wordsArray[3] = "Pedwar"; 
      wordsArray[4] = "Pump"; 
      wordsArray[5] = "Chwech"; 
      wordsArray[6] = "Saith"; 
      wordsArray[7] = "Wyth"; 
      wordsArray[8] = "Naw"; 
      wordsArray[9] = "Deg"; 

      /*Draw an image and a word to the canvas just to test that they're being drawn */ 
      context.drawImage(imageArray[0], 100, 30); 
      context.strokeText(wordsArray[3], 500, 60); 
     } 

, но по какой-то причине, когда я просмотреть страница в браузере, в консоли Firebug, я получаю ошибку:

Could not convert JavaScript argument arg 0 [nsIDOMCanvasRenderingContext2D.drawImage] context.drawImage(imageArray[0], 100, 30);

я не уверен, если это то, как я имел в виду доступ к изображению в массиве элемента 0 ... может кто-то пожалуйста, укажите что я делаю неправильно?

* EDIT *

Я изменил код ниже для массивов:

var image1 = new Image(); 
      image1.src = imageArray[0]; 

      /*Draw an image and a word to the canvas just to test that they're being drawn */ 
      context.drawImage(image1, 100, 30); 
      context.strokeText(wordsArray[3], 500, 60); 

, но по какой-то причине, единственный элемент из wordsArray обращается к Canvas- элемент изображения из imageArray вообще не отображается.

Любые идеи?

+0

создания JSFiddle поможет нам – frosty

+0

Извините, я не Не знаете, что такое JSFiddle? Как его создать? – Someone2088

+0

Извините. Существует классный сайт под названием JSFiddle. Вы можете пойти туда и сделать простой макет вашего кода, а затем вы можете поделиться им с нами, и мы можем устранить вашу проблему легче. – frosty

ответ

1

Вы должны создать яваскрипт изображение с его ЦСИ установлен в вашего значение массива

 var img = new Image(); 
     img.src = imageArray[0]; 

     ctx.drawImage(img, 100, 30); 

Без этого вы пытаетесь спросить холст, чтобы нарисовать строку «1.png», например, который не то, что вы здесь здесь!

+0

Спасибо за ваш ответ. Я сделал то, что вы сказали, но по какой-то причине на холст нарисовано только слово - образ нет. Я обновил свое оригинальное сообщение, чтобы показать, что я сделал. – Someone2088

+0

Я думаю, что единственное, что остановило бы нарисованное изображение, - это путь. Где вы находите изображения, связанные с корнем веб-сайта? В firefox, в firebug, вы должны видеть, что запросы GET делаются на «1.png» и т. Д. Я бы ожидал, что они будут показаны как 404? – dougajmcdonald

+0

Я думал, что ошибки 404 были «страницы не найдены»? Они не 404s, изображение просто не отображается. Изображение является .png-файлом, и оно находится в том же корневом каталоге, что и веб-страница, на которую я пытаюсь ее отобразить. Это связано с тем, что я пытаюсь отобразить изображение на холсте HTML5, но я просто не могу решить, в чем проблема. – Someone2088

0

Это код drawGameElements()

/* This function draws the game elements */ 
     function drawGameElements(){ 

      /* Draw a line for the 'score bar'. */ 
      context.moveTo(0, 25); 
      context.lineTo(700, 25); 
      context.stroke(); 

      /* Draw current level/ total levels on the left, and current score on the right. */ 
      context.font = "11pt Calibri"; /* Text font & size */ 
      context.strokeStyle = "black"; /* Font colour */ 
      context.strokeText(currentLevel + "/" + totalLevels, 10, 15); 
      context.strokeText(currentScore, 650, 15); 
     } 

Буквально, все это делает рисует «оценка бара» на холсте, который просто линия в верхней, текущий уровень/общий уровень , и текущий счет пользователя. Я не думаю, что это проблемы, поскольку элементы, которые эта функция предназначена для отображения, отображаются правильно.

+0

Хорошо, как-то кажется, что теперь он начал работать. Спасибо за вашу помощь. – someone2088

+0

На самом деле это работает, по-видимому, иногда ... иногда на холсте требуется несколько кликов, прежде чем появится iamge, в других случаях это вообще не появляется ... кажется, что это абсолютно случайный как изображение появляется при первом щелчке (нажмите кнопку) - как и должно быть, или появляется ли оно при последующем щелчке на холсте, или вообще не появляется ... Я действительно смущен этим. Какие-либо предложения? – someone2088

+0

Изображение не отображается, так как оно еще не собрано сервером (это также происходит со специальными шрифтами). Каждый раз, когда вы пытаетесь загрузить изображение, которое ранее не было загружено, отправляется запрос GET. Это означает, что некоторые изображения занимают немного времени, прежде чем их можно будет использовать. Легкий способ обойти это - либо создавать setTimeout() каждый раз при загрузке изображения, либо циклически перемещать и загружать все изображения в начале, чтобы они были там, когда вы хотите их вызвать. – bluevial

0

Это старый, но причина, почему изображение не отображается, вероятно, потому, что вы должны вызвать OnLoad затем установите ЦСИ следующим образом:

var img = new Image(); 
img.onLoad = function() {ctx.drawImage(img, 100, 30);}; 
img.src = imageArray[0];