Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.04.2011, 05:46
Новичок на форуме
Отправить личное сообщение для Sanjke Посмотреть профиль Найти все сообщения от Sanjke
 
Регистрация: 12.04.2011
Сообщений: 3

Анимация Canvas
Только начал общаться с js - пишу дипломную с использованием канвы и js. Проблема возникла вот тут:
$("#play").click(function(){
   for (var i = 0; i<kol_sost; i++){
      for (var t=1;t<c_id+1;t++){
         jc("#my_circ"+t).animate({x: mas[i][t].x, y: mas[i][t].y ,radius: mas[i][t].rad},500);                                 
      }
   }
});

mas - массив состояний. В нём хранятся значения переменных для каждого состояния.
kol_sost - количество состояний (!внезапно!)
c_id - кол-во окружностей
Использую jQuery и вот эту штуку http://jcscript.com/
Вполне возможно - это приличный говнокод, т.к. опыта общения со скриптом пока мало. Этот код переходит в одно из состояний из набора, вместо перехода через все этапы - т.е. если у нас есть 3 состояния круг переходит сразу в 3 минуя 2.
Думал что проблема в отсутствии паузы после выполнения первого цикла - колдовал, колдовал - безрезультатно.
Ответить с цитированием
  #2 (permalink)  
Старый 12.04.2011, 06:26
Аспирант
Отправить личное сообщение для ASerputko Посмотреть профиль Найти все сообщения от ASerputko
 
Регистрация: 20.10.2010
Сообщений: 73

не совсем понятно что на jc у вас в коде
Ответить с цитированием
  #3 (permalink)  
Старый 12.04.2011, 06:42
Новичок на форуме
Отправить личное сообщение для Sanjke Посмотреть профиль Найти все сообщения от Sanjke
 
Регистрация: 12.04.2011
Сообщений: 3

http://jcscript.com/documentation/functions/animate
Изменение х, у и радиуса конкретной окружности на значения взятые из массива.
Ответить с цитированием
  #4 (permalink)  
Старый 12.04.2011, 15:39
Интересующийся
Отправить личное сообщение для Micky_Holtern Посмотреть профиль Найти все сообщения от Micky_Holtern
 
Регистрация: 21.03.2010
Сообщений: 11

Sanjke,

Вы совершаете логические ошибки. Во-первых, вы назначаете анимацию на объект - и тут же назначаете другую анимацию тех же значений того же объекта. Естественно, выполняется только анимация, назначенная последней. Если вы хотите, чтобы функции анимации выполнялись последовательно, используйте коллбэк.

http://jcscript.com/documentation/fu...mate#animate_3

То есть, примерно так:

jc('#myCircle').animate({x:50,y:50,radius:50},500,function(){
          jc('#myCircle').animate({x:50,y:150,radius:100});
});


И еще - Вы совершенно зря выбираете объект по айдишнику в цикле каждый раз заново. Это весьма и весьма сказывается на производительности. Выберите один раз в массив все объекты, а потом обращайтесь уже напрямую к ним. Примерно так:

var myCircle=jc('#myCircle');
myCircle.animate({x:50,y:50,radius:50},500,function(){
          myCircle.animate({x:50,y:150,radius:100});
});

Последний раз редактировалось Micky_Holtern, 12.04.2011 в 17:48. Причина: опечатки
Ответить с цитированием
  #5 (permalink)  
Старый 16.04.2011, 19:02
Новичок на форуме
Отправить личное сообщение для Sanjke Посмотреть профиль Найти все сообщения от Sanjke
 
Регистрация: 12.04.2011
Сообщений: 3

Всё-равно не помогает. Запускаю рекурсивно функцию рисовки, он у меня переходит в следующее состояние и всё, тушите свет.
По пониманию надо что-то типа
<script type="text/javascript">
	$(document).ready(function(){	
		$("#but").click(function(){
			function step(t){
                                $("#bb").append(t);
				jc("#circ").animate({radius: t});
			}	
			for (i=1; i<100;i++){
				setTimeout(function(){step(i)},1000);
			}
		});	
		jc.start("canv",50);
		jc.circle(50,50,10).id("circ");
	});
	</script>
	<input type="button" id="but" value="OK" />
	<canvas id="canv" width=100 height=200></canvas>
	<div id="bb"></div>

Тоже не работает. Проходит некоторый промежуток времени, затем блок наполняется 100 сотнями. Хотя по идее должно происходить плавное заполнение и плавное увеличение окружности

Последний раз редактировалось Sanjke, 16.04.2011 в 19:06.
Ответить с цитированием
  #6 (permalink)  
Старый 17.04.2011, 10:53
Интересующийся
Отправить личное сообщение для Micky_Holtern Посмотреть профиль Найти все сообщения от Micky_Holtern
 
Регистрация: 21.03.2010
Сообщений: 11

Как вы программу написали, так она и работает. Почитайте статьи про JavaScript, что ли. Чтобы хотя бы не писать

for (i=1; i<100;i++){
      setTimeout(function(){step(i)},1000);
}


Либо setTimeOut пропишите в саму функцию step, без всякого цикла, либо используйте setInterval().
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка изображения из canvas на сервер m-mikle Общие вопросы Javascript 1 06.01.2011 20:45
анимация с использованием Canvas, работает неверно, нужна помощь cutscutie SVG/VML, Canvas, эффекты 1 27.09.2010 10:57
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Цикличность анимация? SashaBorandi jQuery 1 25.12.2008 09:20