Вход

Просмотр полной версии : for(... in ....)???


sector_222
01.03.2009, 10:03
как очистить от мувиков контейнер заполненный вот таким образом

_root.createEmptyMovieClip("container_mcZ",_root.getNextHighestDepth());
container_mcZ._x = _root.goriz_x;
container_mcZ._y = _root.goriz_y;

for (var i = 0; i<heading_material_array.length-1; i++)
//for (var i = 0; i< 10; i++)
{
//выводим кнопки по горизонтали
var ttitle:MovieClip = _root.container_mcZ.attachMovie("ttitle","ttitle"+i,i);

//выставляем координаты токо что созданной кнопки
ttitle._x = startXg;
ttitle._y = startYg;
//выщитываем новую координату для следующей картинки
startXg += ttitle._width+_global.imageShift;
}


наверное грамотно будет циклом

for(... in ....)??? не пойму как его правильно организовать - подскажите пожалуйста

scarbo
01.03.2009, 10:41
Вот так
for(var key in container_mcZ){
if(typeof(container_mcZ[key]=='movieclip'){
delete container_mcZ[key];
}
}
И избавьтесь от привычки везде _root писать,потом одни только проблемы будут

sector_222
01.03.2009, 11:04
в общем задумка простая - создать два списка из мувиков - горизонтальный - спискок тем и вертикальный- список заголовков по этой конкретной теме - взял для примера исходник где вместо мувиков загружались фотки - этот пример оптимизировал под свои нужды - т.е. добавил прокрутку в этих списках в зависимости от координтаы мышки при условиях что прокрутка списков начинаеться только если указатель мыши находится в области отдельной маски для каждого списка. плюс к этому добавил в горизонтальныйсписок эффект зеркального отображения - всё отлично работает - см. исходник.
Стал вариант с мувиками вместо клипа - тут и посыпались проблемы

во первых функции создания маски и скроля - норамально работают только если их вызывать из цикла в котором аттачу мувики для списков да и их работау назвать нормальной нельзы поскольку горизонтальная маска не совпадает с координатами горизронтального списка на 350 пикселей :boredom:

а при запуске функции скроля вообще списки смещаются - горизонтальный в право - ветикальный - вниз

sector_222
01.03.2009, 11:17
вот в таком виде работает - но там поправка на горизонтальную маску - и почемуто список всё равное не очищается - где ошибка?


import mx.transitions.Tween;
import mx.video.*;
import mx.transitions.easing.*;
import flash.display.*;
import flash.geom.*;
import flash.filters.*;



//Делаем флешку не масштабируемой и ставим максимально хорошее качество
Stage.scaleMode = "noScale";
Stage.align = "B";
_root._quality = "BEST";

var main:MovieClip = _root.attachMovie("main","main",_root.getNextHighestDepth());
main._x = 0;
main._y = 0;


// координаты компонентов
vert_x = 0; //координаты вертикальной панели
vert_y = 0;

goriz_x = 0; //координаты горизонтальной панели
goriz_y = 340;

vert_width = 80;//размеры вертикальной панели
vert_height = 560;//640

goriz_width = 160;//размеры горизонтальная панели 960
goriz_height = 160;

thumb_height = 80; //размеры мелких фото
thumb_width = 80;

full_x = 200; //коордиты больших фото
full_y = 200;

_global.imageShift = 2;//дистанция между картинками
_global.sdvigV = 0; // погрешность равная количеству мувиков умноженное на imageShift
_global.sdvigZ = 0;

// создаём пустой клип с нужными координатами для панели прокрутки с мелкими фотками

_root.createEmptyMovieClip("container_mcV",_root.getNextHighestDepth());
container_mcV._x = _root.vert_x;
container_mcV._y = _root.vert_y;

_root.createEmptyMovieClip("container_mcZ",_root.getNextHighestDepth());
container_mcZ._x = goriz_x;
container_mcZ._y = goriz_y;


Vertical();


createMaskVert();
createMaskGoriz();
scrolling();

//*****функция выводит вертикальное меню с горизонтальным по первой теме***************
function Vertical() {

/******id темы - для обращения к базе и вывода горизонтального списка************/
/****************************************************************/
//обработчик для передачи параметров
formData = new LoadVars();
//при загрузке флешки в пустое поле выводить сообщение
formData.onLoad = function(success:Boolean) {
if (success) {

//стартовая позиция картинок по X
var startXv:Number = _root.vert_x;
//стартовая позиция картинок по Y
var startYv:Number = _root.vert_y;
//текущая координата картинки
//var currImageXv:Number = 0;



//вносим список имён тем в массив

var my_str1:Array= formData.name_tema
var nameTemes_array = new Array();
nameTemes_array = my_str1.split("$$");

//вносим ID тем
var my_str2:Array= formData.id_tema;
var idTemes_array = new Array();
idTemes_array = my_str2.split("$$");

_global.sdvigV = _global.imageShift * (nameTemes_array.length-1);
//пока не кончится все фотки загружаем их в контейнер


for (var i = 0; i<nameTemes_array.length-1; i++)
//for (var i = 0; i<3; i++)
{
//добовляем картинку из библиотеки
var tema:MovieClip = _root.container_mcV.attachMovie("tema","tema"+i,i);
//оптимизируем скрипт создавая переменную tema передавая ей ссылку на нашу картинку


tema._x = startXv;
tema._y = startYv;
//выщитываем новую координату для следующей картинки
startYv += tema._height+_global.imageShift;



tema.temaText.text = nameTemes_array[i];
//массивы для передачи ID темы и имя темы чтобы передать функции отображения
//горизонтального списка
tema.IdKey_array = idTemes_array[i];
tema.IdName_array = nameTemes_array[i];



//принажатии на изображение вызываем горизонтальную панель
tema.onRelease = function() {
var id:Number = this.getDepth();
Gorizontal(idTemes_array[id], nameTemes_array[id]);
};
//при наведении на изображение - прозрачность на 50%
tema.onRollOver = function() {
this._alpha = 50;
};
// и наоборот
tema.onRollOut = function() {
this._alpha = 100;
};

if (i == 0)//если первый запрос то загружаем сразу первую temu
{
Gorizontal(idTemes_array[i],nameTemes_array[i]);
}

//createMaskVert();



}


} else{
//tema.temaText.text = "Error loading/parsing LoadVars.";
}


};
//обмен данными с MySQL значения объекта formData методом POST
formData.sendAndLoad('phpinitializ.php',formData,'POST');



}
//**********************************************горизонтальное меню***************************************
function Gorizontal(idkey:String,tema:String)
{

formData2 = new LoadVars();

//при загрузке флешки в пустое поле выводить сообщение
formData2.onLoad = function(success:Boolean)
{
if (success)
{

//стартовая позиция картинок по X
var startXg:Number = _root.goriz_x;
//стартовая позиция картинок по Y
var startYg:Number = _root.goriz_y;



/*вносим список id materiala*/
var my_str3:Array = formData2.id_material;
var id_material_array = new Array();
id_material_array = my_str3.split("$$");
/*вносим заголовки тем*/
var my_str4:Array = formData2.heading_material;
var heading_material_array = new Array();
heading_material_array = my_str4.split("$$");
/**********************************вопросы к теме*************************************************/
/*вносим id вопросов*/
var my_st:Array = formData2.id_kus;
var id_kus_array = new Array();
id_kus_array = my_st.split("$$");
/* вносим сами вопросы*/
var my_st1:Array = formData2.kusimus;
var kusimus_array = new Array();
kusimus_array = my_st1.split("$$");

_global.sdvigV = _global.imageShift * (heading_material_array.length-1);

// очищаем контейнер
for(var key in container_mcZ)
{
if(typeof(container_mcZ[key]=='movieclip'))
{
delete container_mcZ[key];
}
}

for (var i = 0; i<heading_material_array.length-1; i++)
//for (var i = 0; i< 10; i++)
{
//выводим кнопки по горизонтали
var ttitle:MovieClip = _root.container_mcZ.attachMovie("ttitle","ttitle"+i,i);

//выставляем координаты токо что созданной кнопки
ttitle._x = startXg;
ttitle._y = startYg;
//выщитываем новую координату для следующей картинки
startXg += ttitle._width+_global.imageShift;

ttitle.titleText.text = heading_material_array[i];

/*для передачи в функцию Window*/
ttitle.IdKey2_array = id_material_array[i];
ttitle.head_array = heading_material_array[i];

ttitle.temaForWindow = tema;


//принажатии на изображение вызываем горизонтальную панель
ttitle.onRelease = function() {
//_root.MainWindow(temaForWindow,head_array,IdKey2_array);
};
//при наведении на изображение - прозрачность на 50%
ttitle.onRollOver = function() {
this._alpha = 50;
};
// и наоборот
ttitle.onRollOut = function() {
this._alpha = 100;
};

if (i == 0)/*если первый запрос */
{


//MainWindow(tema,heading_material_array[i],id_material_array[i]);
}



}


}else{
//ttitle.titleText.text = "Error loading/parsing LoadVars.";
}
};
/*ОТПРАВЛЯЕМ В PHP ID темы */
formData2.keys = idkey;
formData2.send_user = "slava";
formData2.keys = idkey;
//отсылаешь в файл myform.php значения объекта formData методом POST
formData2.sendAndLoad('phpgorizontal.php', formData2, 'POST');

}
//**************************************************************************************

function createMaskVert() {
//создаём пустой клип для маски с известными координатами для скроль панели
_root.createEmptyMovieClip("mask_mcV",_root.getNextHighestDepth());

mask_mcV._x = vert_x;
mask_mcV._y = vert_y;
//отчерчивает маску с размерами панели
mask_mcV.beginFill(0x000000,100);
mask_mcV.lineTo(vert_width,vert_x);
mask_mcV.lineTo(vert_width,vert_height);
mask_mcV.lineTo(vert_y,vert_height);
mask_mcV.lineTo(vert_x,vert_y);
// устанавливаем маску для скроль панели
container_mcV.setMask(mask_mcV);

}

function createMaskGoriz() {
//создаём пустой клип для маски с известными координатами для скроль панели
_root.createEmptyMovieClip("mask_mcZ",_root.getNextHighestDepth());

mask_mcZ._x = goriz_x+80; // чтобы выровнять маску поотношению к списку
mask_mcZ._y = goriz_y+335;
//отчерчивает маску с размерами панели
mask_mcZ.beginFill(0x000000,100);
mask_mcZ.lineTo(goriz_width,0);
mask_mcZ.lineTo(goriz_width,goriz_height);
mask_mcZ.lineTo(0,goriz_height);
mask_mcZ.lineTo(0,0);
// устанавливаем маску для скроль панели
container_mcZ.setMask(mask_mcZ);
}

///Change movement of the gallery depending on mouse placement
function scrolling() {
_root.onEnterFrame = function() {
//движемся по оси у увеличивая на шаг

if((mask_mcV._xmouse > 0)&&(mask_mcV._xmouse < vert_width)&&(mask_mcV._ymouse > 0)&&(mask_mcV._ymouse < vert_height))
{
container_mcV._y += Math.cos(((mask_mcV._ymouse)/mask_mcV._height)*Math.PI)*5; //5 - скорость промотки
}

if (container_mcV._y>mask_mcV._y) {
container_mcV._y = mask_mcV._y;
}

if (container_mcV._y<(mask_mcV._y-(container_mcV._height-mask_mcV._height))) {
container_mcV._y = mask_mcV._y-(container_mcV._height-mask_mcV._height);
}


if((mask_mcZ._xmouse > 0)&&(mask_mcZ._xmouse < goriz_width)&&(mask_mcZ._ymouse > 0)&&(mask_mcZ._ymouse < goriz_height))
{
container_mcZ._x += Math.cos(((mask_mcZ._xmouse)/mask_mcZ._width)*Math.PI)*5 ; //5 - скорость промотки
}

if (container_mcZ._x>mask_mcZ._x) {
container_mcZ._x = mask_mcZ._x;
}

if (container_mcZ._x<(mask_mcZ._x-(container_mcZ._width-mask_mcZ._width))) {
container_mcZ._x = mask_mcZ._x-(container_mcZ._width-mask_mcZ._width);
}


};
}

Wolsh
01.03.2009, 12:41
Вообщето мувиклипы никогда еще делитом не удалялись, это же дисплейный объект.
Про условие я просто помолчу. Вот код.
// очищаем контейнер
for(var key in container_mcZ)
{
if (typeof(container_mcZ[key]) == 'movieclip')
{
container_mcZ[key].removeMovieClip();
}
}

sector_222
01.03.2009, 12:41
с удаление разобрался - помогло //стираем прежний список
for(var key in container_mcZ)
{
if(typeof(container_mcZ[key]=='movieclip'))
{
//delete container_mcZ[key];
unloadMovie(container_mcZ[key]);
}
}
в начале функции Gorizontal()

Добавлено через 43 секунды
ну я так и подумал =)

Добавлено через 6 минут
что то с функцией scrolling не так - всё глюки вроде из за неё

Добавлено через 33 минуты
а что не так не пойму - может кто подскажет???

Wolsh
01.03.2009, 13:18
if(typeof(container_mcZ[key]=='movieclip'))
Вы понимаете смысл этого условия? Что вернет typeof?
Наверно строку "boolean" (выражение равенства имеет тип Boolean)

sector_222
01.03.2009, 13:30
да в этом коде всё нормально - работает - да и ладно - я вижу что контейнеры начинают себя вести не так как хотелось бы при запуске функции function scrolling() ( см. топик №4)

qazwsx
01.03.2009, 14:27
Если бы с моего кресла можнобыло упасть я бы упал:). Тогда можно вообще условие не делать всеравно ведь remove Только с мувиклипом будет работать

scarbo
01.03.2009, 17:42
Блин,спросонья какую-то чушь написал, да и ещё и не проверил,робят звиняйте,вот правильный вариант
for(var key in container_mcZ){
if(typeof(container_mcZ[key])=='movieclip'){
var mc = container_mcZ[key];
mc.removeMovieClip();
}
}

sector_222
02.03.2009, 01:54
ну ладно - извиняем - в углу постойте 5 минут ;-)

qazwsx
02.03.2009, 07:35
Блин,спросонья какую-то чушь написал, да и ещё и не проверил,робят звиняйте,вот правильный вариант
for(var key in container_mcZ){
if(typeof(container_mcZ[key])=='movieclip'){
var mc = container_mcZ[key];
mc.removeMovieClip();
}
}

Ну ну :D. Сначало сравним аргументы, передаем в typeof boolean в итоге условие становится обсалютно безсмысленным :)