Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.06.2012, 00:39
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Ошибка в коде при анимации в canvas-е
Помогите найти ошибку в коде... Здесь шарик каждый раз должен отскакивать от стены, а он делает это только пока не долетит до левой или верхней стены, а потом начинает дергаться...не пойму я что-то где ошибка...
<div style="width: 500; height: 500; position: absolute; left: 10; top: 10"><canvas id="can" width="500" height="500"></canvas></div>
<script>
var canvas = document.getElementById('can').getContext('2d') ;
canvas.strokeStyle = "#000";
canvas.fillStyle = "#adff2f";
var y = Math.floor(Math.random() * (10) ) + 1 ;
var x = Math.floor(Math.random() * (11) ) ;
var a = 10+x+1 ;
var b = 10+y+1 ;
var i = 0 ;
window.onload = function() {
timer = setInterval(function() {
if (a+x < 490 && a-x > 10 && b+y < 490 && b-y > 10) {
a += x ;
b += y ;
canvas.clearRect(0, 0, 500, 500) ;
canvas.beginPath() ;
canvas.arc(a, b, 10, 0, Math.PI*2, false) ;
canvas.stroke() ;
canvas.closePath() ;
canvas.beginPath() ;
canvas.arc(a, b, 9, 0, Math.PI*2, false) ;
canvas.fill() ;
canvas.closePath() ;
} else {
i += 1 ;
if (i == 0) {
if (a > 250) {
if (a+x >= 490) {a = 489} else {a += x} ;
} else {
if (a-x <= 10) {a = 11} else {a += x} ;
} ;
if (b > 250) {
if (b+y >= 490) {b = 489} else {b += y} ;
} else {
if (b-y <= 10) {b = 11} else {b += y} ;
} ;
canvas.clearRect(0, 0, 500, 500) ;
canvas.beginPath() ;
canvas.arc(a, b, 10, 0, Math.PI*2, false) ;
canvas.stroke() ;
canvas.closePath() ;
canvas.beginPath() ;
canvas.arc(a, b, 9, 0, Math.PI*2, false) ;
canvas.fill() ;
canvas.closePath() ;
} else {
if (a > 250) {
if (a+x >= 490) {x = -x} ;
} else {
if (a-x <= 10) {x = -x} ;
} ;
if (b > 250) {
if (b+y >= 490) {y = -y} ;
} else {
if (b-y <= 10) {y = -y} ;
} ;
a += x ;
b += y ;
canvas.clearRect(0, 0, 500, 500) ;
canvas.beginPath() ;
canvas.arc(a, b, 10, 0, Math.PI*2, false) ;
canvas.stroke() ;
canvas.closePath() ;
canvas.beginPath() ;
canvas.arc(a, b, 9, 0, Math.PI*2, false) ;
canvas.fill() ;
canvas.closePath() ;
i = 0 ;
} ;
} ;
canvas.beginPath() ;
canvas.moveTo(0, 1) ;
canvas.lineTo(500, 1) ;
canvas.stroke() ;
canvas.closePath() ;
canvas.beginPath() ;
canvas.moveTo(0, 499) ;
canvas.lineTo(500, 499) ;
canvas.stroke() ;
canvas.closePath() ;
canvas.beginPath() ;
canvas.moveTo(1,  0) ;
canvas.lineTo(1, 500) ;
canvas.stroke() ;
canvas.closePath() ;
canvas.beginPath() ;
canvas.moveTo(499, 0) ;
canvas.lineTo(499, 500) ;
canvas.stroke() ;
canvas.closePath() ;
}, 1) ;
} ;
</script>

Последний раз редактировалось Hekumok, 30.06.2012 в 11:08.
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2012, 01:19
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

хм...жму 'Посмотреть!', и почему-то не работает, если у кого-то тоже, то работу кода можно посмотреть >>ТУТ<<
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2012, 10:29
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

так-с, оказывается, дергаться он начинает при достижении верхней или левой стены...
Ответить с цитированием
  #4 (permalink)  
Старый 30.06.2012, 12:11
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от Hekumok Посмотреть сообщение
так-с, оказывается, дергаться он начинает при достижении верхней или левой стены...
исправте
if (a-x <= 10) {x = -x} ;if (b-y <= 10) {y = -y} ;
на
if (a+x <= 10) {x = -x} ;if (b+y <= 10) {y = -y} ;
Ответить с цитированием
  #5 (permalink)  
Старый 30.06.2012, 15:48
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

блин, спасибо, vadim5june! точно, ведь там же и так отрицательные те числа!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при обновлении страницы в IE8 JohnKM Internet Explorer 1 31.07.2012 11:18
jQuery Использование textIndent при анимации slim-v Opera, Safari и др. 26 19.12.2010 18:16
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 14:17
Сглаживание при анимации everm1nd Общие вопросы Javascript 4 24.08.2009 19:01
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07