![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
Может кто-нибудь знает, как можно реализовать следущее. Есть основной клип. Размерами допустим 1000 на 1000. И есть окошко (маска) размером 300 на 300. Как сделать так, чтобы после драга та часть основного клипа, которая попадает в зону вне маски выгружалась, а та которая видима подгружалась? Реально ли вообще такое реализовать?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Реально. Что именно не получается? Определить, какие объекты вышли за пределы сцены?
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
Честно говоря вообще не могу придумать алгоритм этой самой проверки. Изначально я делал вот как. Брал тот самый основной клип, резал его на 100 мелких. И хотел проверять попадает ли конкретный мелкий клип под маску, если нет, то выгружать его...
Но есть два "НО"! Первое, то что я придумал по коду(именно с проверкой попадания. нарезка получилась) почему-то не прокатывало и второе - мне кажеться, что это будет слишком напряжно для процессора проверять "попадание" каждого клипика в эту самую зону + если у них очень большая детализация... Поэтому, если не трудно дайте, пожалуйста, примерный алгоритм, как это можно сделать с "цельным" клипом З.Ы. Почему-то не могу исходник прикрепить... Последний раз редактировалось ARTur2; 07.08.2007 в 15:49. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
С каким цельным клипом? Все куски должны быть отдельно.
|
|
|||||
|
Регистрация: 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;
}
}
};
|
|
|||||
|
я, правда, так и не понял чего ты добиваешься вообще и переопределением 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;
}
|
|
|||||
|
Ветеран форума
Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
|
Если речь идёт о нарезки цельного клипа, т.е. клипу 1000 на 1000 зделать crop до 300 на 300, то это не возможно, за исключением отрисовки нужного фрагмента в BitmapData и удаления оригинального клипа.
|
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
|
|
|||||
|
Ветеран форума
Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
|
Насколько я понял речь идёт об удалении всего того что не попадает под маску, при условии что под маской один большой клип. Если это так, как я понял, то я не понял как scrollRect может этому помочь.
![]() Последний раз редактировалось screamge; 07.08.2007 в 17:14. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Литва
Сообщений: 195
|
Цитата:
2 silin: код я Ваш посмотрел. Он правильно определяет те самые "куски", которые не попадают под основную маску. Но возник сейчас ещё один вопрос. Если эти куски выгрузить, то как можно будет их загрузить назад. Не "потеряются" ли они после выгрузки? Последний раз редактировалось ARTur2; 08.08.2007 в 13:37. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|