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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.10.2011, 21:31
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Формула скролла контента в замкнутом квадрате

Вопрос следующий. Есть некий контейнер в нем находится всякая графика... Поверх контейнера находится рамка ( квадрат , c дыркой в середине) (статичная рамка ). Нужно по mouseMove таскать контент так, чтобы он полностью прокручивался в поле дырки от квадрата.
Подскажите формулу, если кто знает.

Сейчас формула выглядет так ( но тут подогнанные значения, нужно избежать этого )

Код AS3:
private function onMove(e:MouseEvent):void 
		{
			var w:Number = stage.stageWidth / 8;
			var h:Number = stage.stageHeight / 8;
			var w1:int = stage.stageWidth;
			var h1:int = stage.stageHeight;
 
			if(mouseY > h && mouseY < h*7 && _imageContainer.height > h1 ) {
 
				var _y:int =  -( (mouseY - h) / ( h1 - h*2 ) ) * ( _imageContainer.height  - h1 ) ;
 
				_imageContainer.y = _y;
 
			}
 
			if(mouseX > w && mouseX < w*7 && _imageContainer.width > w1) {
 
				var _x:int =  -( (mouseX - w) / (w1  - w*2 ) ) * ( _imageContainer.width  - w1) ;
 
				_imageContainer.x = _x;
 
			}
		}
Тоесть тут не учитываются ширина и высота рамки, а подгонятеся вручную
__________________
Марк Tween

Старый 08.10.2011, 22:05
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Движение линейное - поэтому можно сделать аппроксимацию.
В чем суть: находим 2 краевые точки. Это будет полностью прокрученный контент - тогда х у контента должен быть (ширина_рамки - ширина_контена). И нулевая точка - контент должен быть на позиции х = 0.
Думаем. Рожаем:
Код:
_х = (mouseX / ширина_рамки) * (ширина_рамки - ширина_контента)

Старый 08.10.2011, 22:17
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Такс а если же контент находится не в нулевой точке? Тоесть в моем случае, вся графика начинает проявлятся от краев рамки, тоесть часть контейнера с графикой пустая. Тогда ширина контента - пустота*2 ?
__________________
Марк Tween

Старый 08.10.2011, 22:28
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 164
Размер:	15.1 Кб
ID:	27127

Я прикладываю рисунок. По нему поясню в чем дело.

Дело вот в чем, на рисунке видны 2 красных кружка, когда курсор мыши попадает на левый красный ( тоесть на начало рамки , НЕ в точку 0-0 сцены ) , то в данный момент контент находится в точке 0-0, когда на правй красный, то контент полностью прокручен. Psycho Tiger по втоей формуле он ставится в 0-0 тогда, когда и курсор в 0-0. А надо немного не так.
П.с. Контент есть контейнер, графика в котором рисуется от тольщины рамки, тоесть если толщина рамки ( от 0-0 до дырки - это толщина ) = 500 px , то пустота в контейнере = 500 px по всем краям соотв.
__________________
Марк Tween

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
как понял я, имеем:
сцена, контент, рамка.
рожаем:
Код AS3:
контент.х = рамка.х + (рамка.width - контент.width) * mouseX; // не?
Добавлено через 3 минуты
В зависимости от задачи, меняем положительные координаты мыши на отрицательные. Запретить контейнеру двигаться за пределами видимой области, проверяем место положение мыши и глушим слушателя в случае выхода за приделы рамки.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 08.10.2011, 22:51
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Ребят тут принципиальный момент - Рамка.width имееется ввиду ширина ДЫРКИ, или же ширина отступа до дырки ?

Добавлено через 1 минуту
рамка.х - не существует, она статичная 0-0
__________________
Марк Tween

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Main extends Sprite 
	{
		[Embed(source = 'picture.jpg')] private var Picture:Class;
 
		public function Main():void 
		{
			addChild(new Picture());
 
			if (stage) {
				stage.addEventListener(MouseEvent.MOUSE_MOVE, MOUSE_MOVE);
				MOUSE_MOVE();
			}
		}
 
		private function MOUSE_MOVE(e:MouseEvent = null):void 
		{
			getChildAt(0).x = (stage.stageWidth - getChildAt(0).width) / stage.stageWidth * mouseX;
			getChildAt(0).y = (stage.stageHeight - getChildAt(0).height) / stage.stageHeight * mouseY;			
		}
	}
}
накидал тут по шустрому, может пригодиться.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 08.10.2011, 22:55
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
http://devel.ria-master.com/m/75/ вот сторонний пример. если уж на то пошло
__________________
Марк Tween

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Цитата:
Сообщение от in4core Посмотреть сообщение
Ребят тут принципиальный момент - Рамка.width имееется ввиду ширина ДЫРКИ, или же ширина отступа до дырки ?

Добавлено через 1 минуту
рамка.х - не существует, она статичная 0-0
так а вчём проблема?

если знать начальную позицию видимой области а это "рамка.х + рамка.бордер.width"
и зная полную площадь "рамка.width - рамка.бордер.width * 2";

что мешает юзать контент в данных границах?

Добавлено через 2 минуты
Код AS1/AS2:
		private function MOUSE_MOVE(e:MouseEvent = null):void 
		{
			getChildAt(0).x = толщина бордюра + (stage.stageWidth /* минус толщина бордюра * 2*/ - getChildAt(0).width) / stage.stageWidth * mouseX;
			getChildAt(0).y = толщина бордюра + (stage.stageHeight/* минус толщина бордюра * 2*/  - getChildAt(0).height) / stage.stageHeight * mouseY;			
		}
Добавлено через 12 минут
стоп, сек.

Добавлено через 14 минут
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Main extends Sprite 
	{
		[Embed(source = '../bin/Book.jpg')] private var BookBackground:Class;
 
		public function Main():void 
		{
			addChild(new BookBackground());
 
			if (stage) {
				stage.addEventListener(MouseEvent.MOUSE_MOVE, MOUSE_MOVE);
				MOUSE_MOVE();
			}
		}
 
		private function MOUSE_MOVE(e:MouseEvent = null):void 
		{
			getChildAt(0).x = 100 + (stage.stageWidth - getChildAt(0).width - 200) / stage.stageWidth * mouseX;
			getChildAt(0).y = 100 + (stage.stageHeight - getChildAt(0).height - 200) / stage.stageHeight * mouseY;			
		}
	}
}
собственно так и выходит.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!


Последний раз редактировалось stweet; 08.10.2011 в 23:09.
Старый 08.10.2011, 23:52
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Проверил ваш вариант - не работает. точне работает, только не так как просилось.
Еще раз задача
Контейнер состоит из бордера + графика. Рамка состоит из бордера - оставшияся часть есть дырка. Контент надо крутить в дырке так, что положение мышки на левом краю бордера рамки соответсвует координате 0-0 для контейнера, далее контейнер не двигается, а положение мышки на правом краю ( конце дырки рамки ) соотвествует ширине контейнера, далее контейнер не двигается. В пердидущем посте я выложил наглядный пример такого взаимодействия. Возможно в том примере у контейнера нету бордера и он сразу строится из координат 0-0, собственно и с такой позицией я попробовал вашу формулу - результат отрицательный.
__________________
Марк Tween

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

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

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


 


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


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