Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление МС со сцены (http://www.flasher.ru/forum/showthread.php?t=213803)

anda30 20.01.2017 12:01

Удаление МС со сцены
 
Вложений: 1
Всем привет
У меня есть задача:
На сцене должны появляться мувиклипы (МС), которыми я должен управлять(передвигать, менять цвет..).
Количество появляемых МС зависит от числа в "NumericStepper".
Если число 4 - появляется 4 МС, если 5 - еще один МС добавляется , если число 3 остается только 3 МС.
Я хотел сделать так: сначала все МС удаляются, а затем добавляются согласно заданного числа.
Добавление получилось, а удаление нет.
Подскажите, где прокол.
С уважением
Александр.

ZackMercury 20.01.2017 14:43

А нельзя код и скрины сюда выложить?

anda30 20.01.2017 14:53

Сейчас
Код AS3:

import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.ui.Mouse;
import fl.controls.DataGrid;
import fl.controls.Button;
 
var i,k:int;
var Kol_Dachikov=1;
var Zvz:DisplayObject;
var arr:Array = new Array();
var txt:String="125";
var DvMouse:int=0;
var NDatch:int=0;
var str1:String;
 
// Создаем датчики
function Sozd_Datcikov (){
for(i=0;i<Kol_Dachikov;i++)
 
        {
        var Zv:MovieClip = new zv;
        Zv.name="ss"+i;
        Zv.x=100+i*10;
        Zv.y=150+i*10;
        addChild(Zv);
        arr[i]=Zv.name;
        //trace(Zv);
        trace(arr[i]);
        trace(Zv.name);
        if(Zv.name==("ss"+i))
                {
                        trace ("Name="+Zv.name);
                }       
        }
}
Sozd_Datcikov();
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
stage.addEventListener(MouseEvent.MOUSE_UP, DvigStop);
stage.addEventListener(MouseEvent.MOUSE_MOVE, MoveMouse);
KolDatch.addEventListener(Event.CHANGE, Kol_Datchikov);
 
function Kol_Datchikov (e:Event):void{
 
for(i=0;i<1;i++){
//        if(Zv.name==("ss"+i))
//        if (stage.contains("ss"+0))
        {
        //        removeChildAt(Zv); //Здесь я хочу удалять МС
        }
        }
        Kol_Dachikov=KolDatch.value;
        Sozd_Datcikov();
//Kol_Dachikov=8;
}
 
function MoveMouse (e:MouseEvent){
        if (DvMouse==1)
        {       
                NDatch=int(str1);
                for(i=0;i<5;i++){
                k=0;;
                }
        }
}
 
function DvigStart(e:MouseEvent){
        DvMouse=1;
        txt=e.target.name.toString();
        str1=txt.substr(0,2);
        if((e.target.name!=null)&&(str1=="ss"))
        {        e.target.startDrag();       
                txt=e.target.name.toString();
                str1=txt.substr(2);}
}
 
function DvigStop (e:MouseEvent){
        DvMouse=0;
        txt=e.target.name.toString();
        str1=txt.substr(0,2);
        if(str1=="ss")
                {e.target.stopDrag();}
}


ZackMercury 20.01.2017 15:00

Вы создаёте Zv в этой функции
Код AS3:

function Sozd_Datcikov (){
for(i=0;i<Kol_Dachikov;i++)
 
        {
        var Zv:MovieClip = new zv;
        Zv.name="ss"+i;
        Zv.x=100+i*10;
        Zv.y=150+i*10;
        addChild(Zv);
        arr[i]=Zv.name;
        //trace(Zv);
        trace(arr[i]);
        trace(Zv.name);
        if(Zv.name==("ss"+i))
                {
                        trace ("Name="+Zv.name);
                }       
        }
}

а пытаетесь обратиться к ней в этой
Код AS3:

function Kol_Datchikov (e:Event):void{
 
for(i=0;i<1;i++){
//        if(Zv.name==("ss"+i))
//        if (stage.contains("ss"+0))
        {
        //        removeChildAt(Zv); //Здесь я хочу удалять МС
        }
        }
        Kol_Dachikov=KolDatch.value;
        Sozd_Datcikov();
//Kol_Dachikov=8;
}

http://help.adobe.com/ru_RU/ActionSc...0204-7f54.html

anda30 20.01.2017 15:04

Спасибо
С Вашего ответа я понял, что если МС создан в одной функции, то в другой я к нему обратиться не могу?
С уважением

ZackMercury 20.01.2017 15:07

Ну, технически то он создан в памяти, а не в функции, а в функции просто хранится ссылка на него(переменная). Простое решение - объявить глобально массив, в который складывать все звёзды при создании и удалять оттуда при удалении.

anda30 20.01.2017 15:13

Но когда я хочу его подвигать МС, я к нему обращаюсь по имени и двигаю его.
Так почему я не могу по имени удалить его ?

ZackMercury 20.01.2017 15:18

Код AS3:

function MoveMouse (e:MouseEvent){
        if (DvMouse==1)
        {       
                NDatch=int(str1);
                for(i=0;i<5;i++){
                k=0;;
                }
        }
}
 
function DvigStart(e:MouseEvent){
        DvMouse=1;
        txt=e.target.name.toString();
        str1=txt.substr(0,2);
        if((e.target.name!=null)&&(str1=="ss"))
        {        e.target.startDrag();       
                txt=e.target.name.toString();
                str1=txt.substr(2);}
}
 
function DvigStop (e:MouseEvent){
        DvMouse=0;
        txt=e.target.name.toString();
        str1=txt.substr(0,2);
        if(str1=="ss")
                {e.target.stopDrag();}
}

Вы здесь ни разу не обращались к Zv.

anda30 20.01.2017 15:33

Когда я МС присваиваю имя "ss+i", я ж могу по этому имени удалить его?
С уважением

ZackMercury 20.01.2017 15:59

Зачем?
Код AS3:

import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.ui.Mouse;
import fl.controls.DataGrid;
import fl.controls.Button;
 
var i,k:int;
var Kol_Dachikov=1;
var Zvz:DisplayObject;
var arr:Array = new Array();
var txt:String="125";
var DvMouse:int=0;
var NDatch:int=0;
var str1:String;
 
// Создаем датчики
function Sozd_Datcikov (){
for(i=0;i<Kol_Dachikov;i++)
 
        {
        var Zv:MovieClip = new zv;
        Zv.name="ss"+i;
        Zv.x=100+i*10;
        Zv.y=150+i*10;
        addChild(Zv);
        arr.push(Zv);
        //trace(Zv);
        trace(arr[i]);
        trace(Zv.name);
        if(Zv.name==("ss"+i))
                {
                        trace ("Name="+Zv.name);
                }       
        }
}
Sozd_Datcikov();
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
stage.addEventListener(MouseEvent.MOUSE_UP, DvigStop);
stage.addEventListener(MouseEvent.MOUSE_MOVE, MoveMouse);
KolDatch.addEventListener(Event.CHANGE, Kol_Datchikov);
 
function Kol_Datchikov (e:Event):void{
 
        while(arr.length)
        {       
                removeChild(arr[0]);
                arr.shift();
        }
 
        Kol_Dachikov=KolDatch.value;
        Sozd_Datcikov();
//Kol_Dachikov=8;
}
 
function MoveMouse (e:MouseEvent){
        if (DvMouse==1)
        {       
                NDatch=int(str1);
                for(i=0;i<5;i++){
                k=0;;
                }
        }
}
 
function DvigStart(e:MouseEvent){
        DvMouse=1;
        txt=e.target.name.toString();
        str1=txt.substr(0,2);
        if((e.target.name!=null)&&(str1=="ss"))
        {        e.target.startDrag();       
                txt=e.target.name.toString();
                str1=txt.substr(2);}
}
 
function DvigStop (e:MouseEvent){
        DvMouse=0;
        txt=e.target.name.toString();
        str1=txt.substr(0,2);
        if(str1=="ss")
                {e.target.stopDrag();}
}

P.S. Код - сплошная каша, столько лишних операций и переменных я ещё никогда не видел. Задача решается буквально в 10 строк.

anda30 20.01.2017 16:35

Извините, что каша.
Просто очень проблематично изучать самостоятельно
Спасибо


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

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