Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.11.2014, 18:38
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

Не работает drawImage
Всем доброго времени суток! Есть код:

<canvas id="canvas" width="800" height="634" style="position: absolute; top: 0px; left: 0px"></canvas>


<img id='Ugo' src='images/Ugo'>



<script>
VarCanvas = document.getElementById("canvas");
ctx = VarCanvas .getContext('2d');


ArrCenter = Array(100,100);


for (i=0; i<ArrCenter.length; i=i+2)
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );


</script>

Почему не работает? Пробовал всяко-разно.
Ответить с цитированием
  #2 (permalink)  
Старый 28.11.2014, 18:40
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Ну во первых код может не работать если рисовать раньше чем загрузится картинка, во вторых не вижу где вы объявили переменную "Ugo".

А что пишет консоль?

Последний раз редактировалось tsigel, 28.11.2014 в 18:42.
Ответить с цитированием
  #3 (permalink)  
Старый 28.11.2014, 18:42
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 28.11.2014, 19:06
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

Сообщение от tsigel Посмотреть сообщение
Ну во первых код может не работать если рисовать раньше чем загрузится картинка, во вторых не вижу где вы объявили переменную "Ugo".

А что пишет консоль?

.onload = function() пробовал, тоже не работает, Ugo - это id картинки, я попробовал в drawImage ставить id и все работает. Консолью не пользуюсь, алерта хватает.

в общем так работает:
ctx.drawImage(Ugo, 100, 100 );

а так нет
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );


<html>

<canvas id="canvas" width="800" height="634" style="position: absolute; top: 0px; left: 0px"></canvas>

<img id='Ugo' src='images/Ugo'>



<script>
VarCanvas = document.getElementById("canvas");
ctx = VarCanvas .getContext('2d');


ArrCenter = Array(100,100);


for (i=0; i<ArrCenter.length; i=i+2)
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );


</script>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 28.11.2014, 19:11
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от wadim Посмотреть сообщение
Консолью не пользуюсь, алерта хватает.
Алерт вам ошибок не скажет, а конслоль скажет.

Короче вот вам пример, дальше сами.

<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif">
<canvas></canvas>

<script>
window.onload = function () {

  var canvas = document.querySelector("canvas");
  var img = document.querySelector("img");
  var ctx = canvas.getContext("2d");

  ctx.drawImage(img, 0,0);

}
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 28.11.2014, 19:24
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Цитата:
ArrCenter = Array(100,100);


for (i=0; i<ArrCenter.length; i=i+2)
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );
А почему не так:

var ArrCenter = [100,100];
ctx.drawImage(Ugo, ArrCenter[0], ArrCenter[1] );
Ответить с цитированием
  #7 (permalink)  
Старый 28.11.2014, 20:19
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

Сообщение от tsigel Посмотреть сообщение
Алерт вам ошибок не скажет, а конслоль скажет.

Короче вот вам пример, дальше сами.

<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif">
<canvas></canvas>

<script>
window.onload = function () {

  var canvas = document.querySelector("canvas");
  var img = document.querySelector("img");
  var ctx = canvas.getContext("2d");

  ctx.drawImage(img, 0,0);

}
</script>

Консолью не умею пользоваться, разбираться нет времени, алерта пока хватает, я и так знаю что дело в drawImage, а именно: в попытке в качестве аргумента использовать элемент массива.

нужно именно с " i ", так как массив может быть очень большим:
ArrCenter = Array(100,100,200,200,300,300,400,400,500,500,501, 501 ...);
и в ручную не реально все прописать.

попробовал как вы пишите:
var ArrCenter = [100,100]; - не помогло

а вот при строчке:
ctx.drawImage(Ugo, ArrCenter[0], ArrCenter[1] ); - работает, я такие методы проверки раньше использовал, но эта строка еще больше убедила меня в том, что проблема в массиве.
Ответить с цитированием
  #8 (permalink)  
Старый 28.11.2014, 20:34
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от wadim
for (i=0; i<ArrCenter.length; i=i+2)
ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );
попробуй добавить {}
for (i=0; i<ArrCenter.length; i=i+2) {
   ctx.drawImage(Ugo, ArrCenter[i], ArrCenter[i+1] );
}
Ответить с цитированием
  #9 (permalink)  
Старый 28.11.2014, 20:38
Профессор
Отправить личное сообщение для wadim Посмотреть профиль Найти все сообщения от wadim
 
Регистрация: 20.01.2014
Сообщений: 150

Попробовал добавить {} не помогло.
Ответить с цитированием
  #10 (permalink)  
Старый 28.11.2014, 21:33
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Яростный Меч
попробуй добавить {}
http://es5.javascript.ru/x12.html#x12.6.3
Цитата:
IterationStatement : for ( ExpressionNoInopt; Expressionopt; Expressionopt) Statement
http://es5.javascript.ru/x12.html#x12
Цитата:
Statement :
Block
VariableStatement
EmptyStatement
ExpressionStatement
IfStatement
IterationStatement
ContinueStatement
BreakStatement
ReturnStatement
WithStatement
LabelledStatement
SwitchStatement
ThrowStatement
TryStatement
DebuggerStatement
http://es5.javascript.ru/x12.html#x12.4
Цитата:
ExpressionStatement :
[lookahead ∉ {{,function}] Expression ;
это даёт объяснение, если считать что в качестве Expression может быть CallExpression
http://es5.javascript.ru/x11.html#x11.2.3
Цитата:
CallExpression : MemberExpression Arguments
поэтому это лишь предположение, основанное на том, что это работает, явного определения/описания Expression, которое позволило бы это подтвердить, я до сих пор не могу найти (либо это баг спецификации, либо я плохо искал)
for (var i = 0; i < 2; i++) alert(i);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11