Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Почему не удалаяется клип в слушателе? (http://www.flasher.ru/forum/showthread.php?t=109379)

aea_2004 13.03.2008 12:29

Почему не удалаяется клип в слушателе?
 
Доброе время суток! Как удалить клип:

Код:

import mx.controls.DataGrid;
var myDataGrid:mx.controls.DataGrid;

_level0.myDataGrid.addColumn("IDFilm");        //0

//Функция Показ фото
function showBitmapData(bdlinkageId,bdX,bdY){
import flash.display.BitmapData;
var linkageId:String = bdlinkageId;
var myBitmapData:BitmapData = BitmapData.loadBitmap(linkageId);
//trace(myBitmapData instanceof BitmapData); // true
if(myBitmapData.height>myBitmapData.width){
        var scale:Number=100*99/myBitmapData.height;
        }else{
        var scale:Number=100*99/myBitmapData.width;
}
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap(myBitmapData, this.getNextHighestDepth());
mc._xscale=scale;
mc._yscale=scale;
mc._x=bdX;
mc._y=bdY;
}

showBitmapData("0002.jpg",34,139);

// Create listener object.
var dgListener:Object = new Object ();
dgListener.cellPress = function (evt_obj:Object) {
        var obj = evt_obj.target;
        mc.removeMovieClip();
        showBitmapData("0007.jpg",34,139);
};
// Add listener.
_level0.myDataGrid.addEventListener ("cellPress", dgListener);

bremove.onRelease= function () {
//trace ("onRelease called");
};

stop();

Спасибо

divinus 13.03.2008 12:36

функция trace() бывает иногда очень полезной ;)
Код:

dgListener.cellPress = function (evt_obj:Object) {
        var obj = evt_obj.target;
        //mc.removeMovieClip();
        trace(mc);
        showBitmapData("0007.jpg",34,139);
};

что мы увидим в таком случае?
читайте про область видимости переменных, а в данном конкретном случае, узнайте, доступен ли "mc" напрямую из обработчика события... ;)

aea_2004 13.03.2008 13:24

trace: _level0.mc. Написал:
Код:

_level0.mc.removeMovieClip();
Все равно не удаляет:( Что значит узнать: "доступен ли "mc" напрямую из обработчика события..."? Как узнать?

qazwsx 13.03.2008 13:36

Ну вообщето кагда он в коде написал mc.removeMovieClip(); будет выполнено _level0.mc.removeMovieClip(); Вот у него он и в трейсе виден).
Незнаю я попробовал у меня удаляется все...

divinus 13.03.2008 13:44

Код:

import mx.controls.DataGrid;
import flash.display.BitmapData;

var myDataGrid:mx.controls.DataGrid;
_level0.myDataGrid.addColumn("IDFilm");
function showBitmapData(bdlinkageId, bdX, bdY) {       
        var linkageId:String = bdlinkageId;
        var myBitmapData:BitmapData = BitmapData.loadBitmap(linkageId);
        if (myBitmapData.height>myBitmapData.width) {
                var scale:Number = 100*99/myBitmapData.height;
        } else {
                var scale:Number = 100*99/myBitmapData.width;
        }
        var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
        mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
        mc._xscale = scale;
        mc._yscale = scale;
        mc._x = bdX;
        mc._y = bdY;
}
showBitmapData("0002.jpg",34,139);
var dgListener:Object = new Object();
dgListener.cellPress = function(evt_obj:Object) {       
        _level0.mc.removeMovieClip();       
        showBitmapData("0007.jpg",34,139);
};
_level0.myDataGrid.addEventListener("cellPress",dgListener);
stop();


aea_2004 13.03.2008 17:19

Не так не удаляет... У меня просто закрывает новым поверх:( Может как-то по другому надо?

divinus 13.03.2008 17:23

а если вот так?
Код:

import mx.controls.DataGrid;
import flash.display.BitmapData;

var myDataGrid:mx.controls.DataGrid;
_level0.myDataGrid.addColumn("IDFilm");
function showBitmapData(bdlinkageId, bdX, bdY) {       
        var linkageId:String = bdlinkageId;
        var myBitmapData:BitmapData = BitmapData.loadBitmap(linkageId);
        if (myBitmapData.height>myBitmapData.width) {
                var scale:Number = 100*99/myBitmapData.height;
        } else {
                var scale:Number = 100*99/myBitmapData.width;
        }
        var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
        mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
        mc._xscale = scale;
        mc._yscale = scale;
        mc._x = bdX;
        mc._y = bdY;
}
showBitmapData("0002.jpg",34,139);
var dgListener:Object = new Object();
dgListener.cellPress = function(evt_obj:Object) {       
        _level0.mc.removeMovieClip();       
        //showBitmapData("0007.jpg",34,139);
};
_level0.myDataGrid.addEventListener("cellPress",dgListener);
stop();

;)

aea_2004 13.03.2008 17:53

Не знаю правильно или нет, но получилось так:

Код:

import mx.controls.DataGrid;
import flash.display.BitmapData;

var myDataGrid:mx.controls.DataGrid;
_level0.myDataGrid.addColumn("IDFilm");

function showBitmapData(bdlinkageId, bdX, bdY) {       
        var linkageId:String = bdlinkageId;
        var myBitmapData:BitmapData = BitmapData.loadBitmap(linkageId);
        if (myBitmapData.height>myBitmapData.width) {
                var scale:Number = 100*99/myBitmapData.height;
        } else {
                var scale:Number = 100*99/myBitmapData.width;
        }
        var mc:MovieClip = this.createEmptyMovieClip("mc", _level0);
        mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
        mc._xscale = scale;
        mc._yscale = scale;
        mc._x = bdX;
        mc._y = bdY;
}
showBitmapData("0002.jpg",34,139);

var dgListener:Object = new Object();
dgListener.cellPress = function(evt_obj:Object) {       
       
        _level0.mc.removeMovieClip();       
        showBitmapData("0007.jpg",34,139);
};
_level0.myDataGrid.addEventListener("cellPress",dgListener);

Всем спасибо!

Скрипун 13.03.2008 18:09

aea_2004, быстренько оформи код тэгами /// а то не надо злить __etc :)

qazwsx 13.03.2008 18:17

Ты его не удаляеш. Его удаляет система т.к на этой глубине уже есть клип

aea_2004 14.03.2008 05:19

Цитата:

Сообщение от Скрипун
aea_2004, быстренько оформи код тэгами /// а то не надо злить __etc :)

не понял? Вроде так и оформлено?

Блин, все равно не получилось, тк надо работать одновременно с двумя битмапами. Как только добавляю DataGrid в библиотеку или
Код:

import mx.controls.DataGrid;
var myDataGrid:mx.controls.DataGrid;

        _level0.myDataGrid.addColumn("IDFilm");        //0 

сразу перестают удалять предыдущие 2 битмапа:

Код:

import mx.controls.DataGrid;
var myDataGrid:mx.controls.DataGrid;

        _level0.myDataGrid.addColumn("IDFilm");        //0

//Функция Показ фото
function showBitmapData(bdlinkageId,bdX,bdY){
import flash.display.BitmapData;
var linkageId:String = bdlinkageId;
var myBitmapData:BitmapData = BitmapData.loadBitmap(linkageId);
//trace(myBitmapData instanceof BitmapData); // true
if(myBitmapData.height>myBitmapData.width){
        var scale:Number=100*99/myBitmapData.height;
        }else{
        var scale:Number=100*99/myBitmapData.width;
}
var mc:MovieClip = this.createEmptyMovieClip("mc_X"+bdX, this.getNextHighestDepth());
mc.attachBitmap(myBitmapData, 2, "auto", true);
mc._xscale=scale;
mc._yscale=scale;
mc._x=bdX;
mc._y=bdY;
}

showBitmapData("0002.jpg",34,139);
showBitmapData("0110.jpg",261,139);

bRemove.onRelease=function(){
        //trace("bRemove click");
        mc_X34.removeMovieClip();
        mc_X261.removeMovieClip();
        showBitmapData("0007.jpg",34,139);
        showBitmapData("0075.jpg",261,139);
       
}

Кто-нибудь знает в чем дело?

iNils 14.03.2008 05:40

Цитата:

не понял? Вроде так и оформлено?
Это я оформил и поставил плюс.

Код:

bRemove.onRelease = function () {
        //trace("bRemove click");
        trace (mc_X34.getDepth()) //// 1048576
        trace (mc_X261.getDepth()) //// 1048577

        mc_X34.removeMovieClip ();
        mc_X261.removeMovieClip ();
        showBitmapData ("image03.jpg", 34, 139);
        showBitmapData ("image04.jpg", 261, 139);
};

Удалять можно только с глубин 0..1048575. А станадартные компоненты располагают на глубине 1048575 служебный мувиклип, в результате чего getNextHighestDepth() начинает возвращать глубины за пределами удаления.

aea_2004 17.03.2008 10:08

Спасибо за ответ. Получается для удаления нужно принудительно указывать глубину до 1048575?

Я так понял, что неверно оформляю код. Я его вставляю, выделяю ижму на "#". Что не так?


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

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