Просмотр полной версии : 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 ....)??? не пойму как его правильно организовать - подскажите пожалуйста
Вот так
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);
}
};
}
Вообщето мувиклипы никогда еще делитом не удалялись, это же дисплейный объект.
Про условие я просто помолчу. Вот код.
// очищаем контейнер
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 минуты
а что не так не пойму - может кто подскажет???
if(typeof(container_mcZ[key]=='movieclip'))
Вы понимаете смысл этого условия? Что вернет typeof?
Наверно строку "boolean" (выражение равенства имеет тип Boolean)
sector_222
01.03.2009, 13:30
да в этом коде всё нормально - работает - да и ладно - я вижу что контейнеры начинают себя вести не так как хотелось бы при запуске функции function scrolling() ( см. топик №4)
Если бы с моего кресла можнобыло упасть я бы упал:). Тогда можно вообще условие не делать всеравно ведь remove Только с мувиклипом будет работать
Блин,спросонья какую-то чушь написал, да и ещё и не проверил,робят звиняйте,вот правильный вариант
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 минут ;-)
Блин,спросонья какую-то чушь написал, да и ещё и не проверил,робят звиняйте,вот правильный вариант
for(var key in container_mcZ){
if(typeof(container_mcZ[key])=='movieclip'){
var mc = container_mcZ[key];
mc.removeMovieClip();
}
}
Ну ну :D. Сначало сравним аргументы, передаем в typeof boolean в итоге условие становится обсалютно безсмысленным :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.