Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.10.2009, 22:36
peresmeshnik вне форума Посмотреть профиль Отправить личное сообщение для peresmeshnik Найти все сообщения от peresmeshnik
  № 11  
Ответить с цитированием
peresmeshnik
 
Аватар для peresmeshnik

Регистрация: Oct 2003
Адрес: СПб
Сообщений: 200
Отправить сообщение для peresmeshnik с помощью ICQ
Я тоже об этом подумал, хотел сделать свой stagelistener для каждого i-го элемента. Т.е. что-то вроде:
Код AS1/AS2:
_root["stagelistener" + i].onResize=function(){
   for (i=1; i<=2; i++){
      _root[sh" + i]=Stage.height;
      _root["box" + i]._y = _root[sh" + i];
   }
}
Stage.addListener(_root["stagelistener" + i]);
но эта система не работает и без этого...

Старый 26.10.2009, 22:54
spooner вне форума Посмотреть профиль Отправить личное сообщение для spooner Найти все сообщения от spooner
  № 12  
Ответить с цитированием
spooner
 
Аватар для spooner

Регистрация: Mar 2009
Сообщений: 207
так, давайте сначала. Выложите исходник и скажите на каком шаге у вас проблемы возникают, а то мы тут воду в ступе толчём.

Старый 26.10.2009, 23:19
peresmeshnik вне форума Посмотреть профиль Отправить личное сообщение для peresmeshnik Найти все сообщения от peresmeshnik
  № 13  
Ответить с цитированием
peresmeshnik
 
Аватар для peresmeshnik

Регистрация: Oct 2003
Адрес: СПб
Сообщений: 200
Отправить сообщение для peresmeshnik с помощью ICQ
Вот весь исходник (математическое округление я использовал для точности позиционирования бокса, иначе расчеты сбивались на миллионные доли и программа переставала работать):
Код AS1/AS2:
Stage.align="TL"
Stage.scaleMode="noScale"
stagelistener = new Object();
 
speed1 = 1;
speed_angle1 = speed1 / 2;
round_val = 0.01;
i = 1;
 
this.onEnterFrame=function(){	
 
	sw=Stage.width;
	sh=Stage.height;
 
	txt_x.text = _root["box" + i]._x;
	txt_y.text = _root["box" + i]._y;
	txt_angle.text = _root["box" + i]._rotation;
 
//низ
	if  ( _root["box" + i]._x > 0 && _root["box" + i]._y == sh && _root["box" + i]._rotation == 0){
		stagelistener.onResize=function(){
			sw=Stage.width;
			sh=Stage.height;
			_root["box" + i]._y = sh;
			if (_root["box" + i]._x > sw){
				_root["box" + i]._x = sw;
			}
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._x = Math.round((_root["box" + i]._x - speed1)/round_val)*round_val;
	}
 
//лево_низ
	else if( _root["box" + i]._x == 0 && _root["box" + i]._y == sh && _root["box" + i]._rotation < 90){
		stagelistener.onResize=function(){
			sh=Stage.height;
			_root["box" + i]._y = sh;
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._rotation = Math.round((_root["box" + i]._rotation + speed_angle1)/round_val)*round_val;
	}
 
//лево
	else if( _root["box" + i]._x == 0 && _root["box" + i]._y > 0 && _root["box" + i]._rotation == 90 ){
		stagelistener.onResize=function(){
			sh=Stage.height;
			if ( _root["box" + i]._y > sh ){
				_root["box" + i]._y = sh;
			}
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._y = Math.round((_root["box" + i]._y - speed1)/round_val)*round_val;
	}
 
//лево_верх
	else if( _root["box" + i]._x == 0 && _root["box" + i]._y == 0 && _root["box" + i]._rotation < 180 ){
		_root["box" + i]._rotation = Math.round((_root["box" + i]._rotation + speed_angle1)/round_val)*round_val;
	}
 
//верх
	else if( _root["box" + i]._x < sw && _root["box" + i]._y == 0 && _root["box" + i]._rotation == 180 ){
		stagelistener.onResize=function(){
			sw=Stage.width;
			if ( _root["box" + i]._x > sw ){
				_root["box" + i]._x = sw;
			}
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._x = Math.round((_root["box" + i]._x + speed1)/round_val)*round_val;
	}
 
//верх_право
	else if( _root["box" + i]._x == sw && _root["box" + i]._y == 0 && _root["box" + i]._rotation < -90 || _root["box" + i]._rotation == 180){
		stagelistener.onResize=function(){
			sw=Stage.width;
			_root["box" + i]._x = sw;
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._rotation = Math.round((_root["box" + i]._rotation + speed_angle1)/round_val)*round_val;
	}
 
//право
	else if( _root["box" + i]._x == sw && _root["box" + i]._y < sh && _root["box" + i]._rotation == -90 ){
		stagelistener.onResize=function(){
			sw=Stage.width;
			sh=Stage.height;
			_root["box" + i]._x = sw;
			if ( _root["box" + i]._y > sh ){
				_root["box" + i]._y = sh;
			}
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._y = Math.round((_root["box" + i]._y + speed1)/round_val)*round_val;
	}
 
//право_низ
	else if ( _root["box" + i]._x == sw && _root["box" + i]._y == sh && _root["box" + i]._rotation < 0){
		stagelistener.onResize=function(){
			sw=Stage.width;
			sh=Stage.height;
			_root["box" + i]._x = sw;
			_root["box" + i]._y = sh;
		}
		Stage.addListener(stagelistener);
 
		_root["box" + i]._rotation = Math.round((_root["box" + i]._rotation + speed_angle1)/round_val)*round_val;
	}
}
А проблема в том, что когда я добавляю цикл for - не работает привязка к границам окна. Может я вообще изначально в неверном направлении шёл, и эта задача в принципе решается иначе?
Вложения
Тип файла: zip engine_fla.zip (14.1 Кб, 30 просмотров)


Последний раз редактировалось peresmeshnik; 26.10.2009 в 23:27.
Старый 27.10.2009, 18:24
spooner вне форума Посмотреть профиль Отправить личное сообщение для spooner Найти все сообщения от spooner
  № 14  
Ответить с цитированием
spooner
 
Аватар для spooner

Регистрация: Mar 2009
Сообщений: 207
посмотрите, я вам там подправил чуть
Вложения
Тип файла: rar engine_fla.rar (9.1 Кб, 26 просмотров)

Старый 27.10.2009, 19:40
peresmeshnik вне форума Посмотреть профиль Отправить личное сообщение для peresmeshnik Найти все сообщения от peresmeshnik
  № 15  
Ответить с цитированием
peresmeshnik
 
Аватар для peresmeshnik

Регистрация: Oct 2003
Адрес: СПб
Сообщений: 200
Отправить сообщение для peresmeshnik с помощью ICQ
Спасибо огромнейшее!!!
Ваш код выглядит значительно симпатичнее, чем тот, что получился у меня). Но я все же думаю, что округление значений необходимо хотя бы по тому, что при низких значениях параметра "speed" (0.1-0.3) - накапливается погрешность, из-за чего анимация зацикливается на каком-то шаге и не идет дальше.
Мне очень приятно, что Вам не безразлична проблема, и что Вы готовы помочь. Спасибо еще раз!)))

Старый 27.10.2009, 19:43
spooner вне форума Посмотреть профиль Отправить личное сообщение для spooner Найти все сообщения от spooner
  № 16  
Ответить с цитированием
spooner
 
Аватар для spooner

Регистрация: Mar 2009
Сообщений: 207
Цитата:
при низких значениях параметра "speed" (0.1-0.3) - накапливается погрешность, из-за чего анимация зацикливается на каком-то шаге и не идет дальше
Вы неправы, ниче там не накапливается, юзайте без страха.

Старый 27.10.2009, 19:54
peresmeshnik вне форума Посмотреть профиль Отправить личное сообщение для peresmeshnik Найти все сообщения от peresmeshnik
  № 17  
Ответить с цитированием
peresmeshnik
 
Аватар для peresmeshnik

Регистрация: Oct 2003
Адрес: СПб
Сообщений: 200
Отправить сообщение для peresmeshnik с помощью ICQ
Спасибо!))

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.