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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.08.2007, 15:35
ARTur2 вне форума Посмотреть профиль Отправить личное сообщение для ARTur2 Найти все сообщения от ARTur2
  № 1  
Ответить с цитированием
ARTur2

Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
По умолчанию Подгузка/выгрузка видимы/не видимых частей клипа

Может кто-нибудь знает, как можно реализовать следущее. Есть основной клип. Размерами допустим 1000 на 1000. И есть окошко (маска) размером 300 на 300. Как сделать так, чтобы после драга та часть основного клипа, которая попадает в зону вне маски выгружалась, а та которая видима подгружалась? Реально ли вообще такое реализовать?

Старый 07.08.2007, 15:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Реально. Что именно не получается? Определить, какие объекты вышли за пределы сцены?

Старый 07.08.2007, 15:46
ARTur2 вне форума Посмотреть профиль Отправить личное сообщение для ARTur2 Найти все сообщения от ARTur2
  № 3  
Ответить с цитированием
ARTur2

Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
Честно говоря вообще не могу придумать алгоритм этой самой проверки. Изначально я делал вот как. Брал тот самый основной клип, резал его на 100 мелких. И хотел проверять попадает ли конкретный мелкий клип под маску, если нет, то выгружать его...
Но есть два "НО"!
Первое, то что я придумал по коду(именно с проверкой попадания. нарезка получилась) почему-то не прокатывало и второе - мне кажеться, что это будет слишком напряжно для процессора проверять "попадание" каждого клипика в эту самую зону + если у них очень большая детализация...
Поэтому, если не трудно дайте, пожалуйста, примерный алгоритм, как это можно сделать с "цельным" клипом
З.Ы. Почему-то не могу исходник прикрепить...


Последний раз редактировалось ARTur2; 07.08.2007 в 15:49.
Старый 07.08.2007, 15:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
С каким цельным клипом? Все куски должны быть отдельно.

Старый 07.08.2007, 15:57
ARTur2 вне форума Посмотреть профиль Отправить личное сообщение для ARTur2 Найти все сообщения от ARTur2
  № 5  
Ответить с цитированием
ARTur2

Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
Тогда я Вам покажу код "нарезки"
Код:
//Порезка основного клипа
MovieClip.prototype.divide = function(nx, ny, link_id) {
	var x = this.getBounds(this).xMin, y = this.getBounds(this).yMin;
	// положение относительно точки регистрации
	var wi = this._width/nx, hi = this._height/ny;
	// размер фрагментов
	var x0 = this._x, y0 = this._y;
	var clip = this._parent.createEmptyMovieClip(this._name, this.getDepth());
	// подменяем пустым, в котором все и создаем ..
	with (clip) {
		_x=x0, _y=y0;
	}
	this.length = nx*ny;
	for (var i = this.length; i--; ) {
		var c = container.clip.createEmptyMovieClip(i, i);
		// создаем nx*ny пустых контейнеров
		var b = c.attachMovie(link_id, 'b', this.getNextHighestDepth(), {_x:-x-(0.5+i%nx)*wi, _y:-y-(0.5+Math.floor(i/nx))*hi});
		// аттачим (со сдвигом) в каждый каритнку
		with (c) {
			_x=x+(0.5+i%nx)*wi, _y=y+(0.5+Math.floor(i/nx))*hi;
		}
		// сдвигаем сам контейнер в другую сторону
		var m = c.createEmptyMovieClip('m', 1);
		// рисуем маску
		with (m) {
			beginFill(0), lineTo(wi, 0), lineTo(wi, hi), lineTo(0, hi), lineTo(0, 0), endFill();
			_x=-wi/2, _y=-hi/2;
		}
		b.setMask(m);
	}
};
//Создание маски
var mask = this.createEmptyMovieClip("mask", this.getNextHighestDepth());
//Создаём основную маску
mask._x = 100;
mask._y = 100;
with (mask) {
	beginFill(0x00FF00), lineTo(0, 300), lineTo(300, 300), lineTo(300, 0), endFill();
}
var container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
//Создаём контейнер и туда загружаем основной клип, на который вешается основная маска
container.createEmptyMovieClip("container", this.getNextHighestDepth());
container.attachMovie("clip", "clip", this.getNextHighestDepth());
container.setMask(mask);
container.clip.divide(10, 10, 'clip');
он работает отлично!
а вот как я проверял видимость/не видимость после перетаскивания:
Код:
container.clip.onPress = startDrag;
container.clip.onRelease = container.clip.onReleaseOutside=stopDrag;
//
container.clip.startDrag = function() {
	for (var i = container.clip.length; i--; ) {
		if (mask.hitTest(container.clip[i])) {
			container.clip[i]._visible = true;
		} else {
			container.clip[i]._visible = false;
		}
	}
};
она и не срабатывает...

Старый 07.08.2007, 16:48
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
я, правда, так и не понял чего ты добиваешься вообще и переопределением startDrag в частности..
глянь такой код, может чего прояснится:
Код:
function checkMask(){
	for (var i = container.clip.length,s="out: "; i--; ) {
		var hit=mask.hitTest(container.clip[i].m);//смотрим хиттест маски куска с маской контейнера
		if(!hit)s+=i+", ";
	}
	trace(s);
}
container.clip.onPress = function(){
	this.startDrag();
	this.onEnterFrame=checkMask;
}
container.clip.onRelease = container.clip.onReleaseOutside=function(){
	stopDrag();
	this.onEnterFrame=null;
}

Старый 07.08.2007, 16:54
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 7  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Если речь идёт о нарезки цельного клипа, т.е. клипу 1000 на 1000 зделать crop до 300 на 300, то это не возможно, за исключением отрисовки нужного фрагмента в BitmapData и удаления оригинального клипа.
__________________
Free-lance | Twitter | Me

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от screamge
Если речь идёт о нарезки цельного клипа, т.е. клипу 1000 на 1000 зделать crop до 300 на 300, то это не возможно, за исключением отрисовки нужного фрагмента в BitmapData и удаления оригинального клипа.
Ну есть такое свойство, scrollRect

Старый 07.08.2007, 17:10
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 9  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Насколько я понял речь идёт об удалении всего того что не попадает под маску, при условии что под маской один большой клип. Если это так, как я понял, то я не понял как scrollRect может этому помочь.
__________________
Free-lance | Twitter | Me


Последний раз редактировалось screamge; 07.08.2007 в 17:14.
Старый 08.08.2007, 13:13
ARTur2 вне форума Посмотреть профиль Отправить личное сообщение для ARTur2 Найти все сообщения от ARTur2
  № 10  
Ответить с цитированием
ARTur2

Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
Цитата:
Сообщение от screamge
Насколько я понял речь идёт об удалении всего того что не попадает под маску, при условии что под маской один большой клип
Вы абсолютно правильно поняли. Плюс, после драга нужно загрузить то, что попало под маску опять!

2 silin: код я Ваш посмотрел. Он правильно определяет те самые "куски", которые не попадают под основную маску. Но возник сейчас ещё один вопрос. Если эти куски выгрузить, то как можно будет их загрузить назад. Не "потеряются" ли они после выгрузки?


Последний раз редактировалось ARTur2; 08.08.2007 в 13:37.
Создать новую тему Ответ Часовой пояс GMT +4, время: 21:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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