![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Здравствуйте. Подскажи, пожалуйста. Есть код:
import flash.display.Shape; import flash.events.MouseEvent; import flash.events.Event; //Определяю форму для рисования: var shape:Shape; //Определяю массив для квадратов: var arrayRect:Array = []; function mouseDown(event:MouseEvent):void { //Устанавливаю "форму для рисования": shape = new Shape(); //Определяю толщину и цвет линий у квадрата: shape.graphics.lineStyle(0,0x000000); //Начинаю заливку и изменяю цвет прозрачности: shape.graphics.beginFill(0x0+Math.random() * 99999,1); //Придаю "форме для рисования" форму квадрата (задаю координаты y и x аналогичные y и x курсора мыши, с шириной и высотой равной 50): shape.graphics.drawRect(mouseX - 25,mouseY - 25,50,50); //Прекращаю заливку: shape.graphics.endFill(); //Добавляю созданный объект в массив: arrayRect.push(shape); //Добавляю созданный объект на сцену: stage.addChild(shape); } //Определяю событие обновления кадров: stage.addEventListener(Event.ENTER_FRAME, updateFrames); function updateFrames(event:Event):void { //Если массив с квадратами больше 10, то: if(arrayRect.length > 10) { //Удалаяю событие нажатия кнопки (левой) мыши со сцены: stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown); //Вызываю функцию обрабатывающую массив с квадратами: workArrayRect(); } else { //Определяю событие нажатия кнопки (левой) мыши на сцену: stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); } } //Определяю функцию с циклом, который обрабатывает массив с квадратами: function workArrayRect() { //Объявляю цикл: for(var i:Number = 0; i < arrayRect.length; i++) { //Вызываю функцию, который производит работу с объектами из массива: manipulationArrayRect(arrayRect[i],i); } } //Определяю функцию производящую работу с объектами из массива: function manipulationArrayRect(argument,i) { //Если на сцене есть объект, то: if(stage.contains(argument)) { //Удаляю его со сцены: stage.removeChild(argument); } else { //Удаляю элементы массив от нуля до числа, которое равно длине массива: arrayRect.splice(0,arrayRect.length); } } |
|
|||||
|
Удалится только первый шейп со сцены. Первый раз выполнится функция manipulationArrayRect, которая обнулит массив. И цикл который по задумке должен был обойти все элементы массива после этого завершится
__________________
if (love is true) break my.heart; |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Цитата:
У меня удаляются все объекты со сцены и очищается массив. Но я исправил. import flash.display.Shape; import flash.events.MouseEvent; import flash.events.Event; //Определяю форму для рисования: var shape:Shape; //Определяю массив для квадратов: var arrayRect:Array = []; //Переменная для хранения количества удалённых объектов: var numberRemoteObjects:int = 0; function mouseDown(event:MouseEvent):void { //Устанавливаю "форму для рисования": shape = new Shape(); //Определяю толщину и цвет линий у квадрата: shape.graphics.lineStyle(0,0x000000); //Начинаю заливку и изменяю цвет прозрачности: shape.graphics.beginFill(0x0+Math.random() * 99999,1); //Придаю "форме для рисования" форму квадрата (задаю координаты y и x аналогичные y и x курсора мыши, с шириной и высотой равной 50): shape.graphics.drawRect(mouseX - 25,mouseY - 25,50,50); //Прекращаю заливку: shape.graphics.endFill(); //Присваиваю объекту имя: shape.name = 'Shape'+String(arrayRect.length); //Добавляю созданный объект в массив: arrayRect.push(shape); //Добавляю созданный объект на сцену: stage.addChild(shape); } //Определяю событие обновления кадров: stage.addEventListener(Event.ENTER_FRAME, updateFrames); function updateFrames(event:Event):void { //Если массив с квадратами больше 9, то: if(arrayRect.length > 9) { //Удалаяю событие нажатия кнопки (левой) мыши со сцены: stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown); //Вызываю функцию обрабатывающую массив с квадратами: workArrayRect(); } else { //Определяю событие нажатия кнопки (левой) мыши на сцену: stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); } } //Определяю функцию с циклом, который обрабатывает массив с квадратами: function workArrayRect() { //Объявляю цикл: for(var i:Number = 0; i < arrayRect.length; i++) { //Вызываю функцию, который производит работу с объектами из массива: manipulationArrayRect(arrayRect[i],i); } } //Определяю функцию производящую работу с объектами из массива: function manipulationArrayRect(argument,i) { //Если на сцене есть объект, то: if(stage.contains(argument)) { //Увеличиваю значение переменной на 1: numberRemoteObjects += 1; //Удаляю его со сцены: stage.removeChild(argument); } //Если сумма удалённых объектов равна длине массива с объектами, то: else if(numberRemoteObjects == arrayRect.length) { //Удаляю элементы массив от нуля до числа, которое равно длине массива: arrayRect.splice(0,arrayRect.length); //Изменяю значение переменной, которая хранит число удалённых объектов, на 0: numberRemoteObjects = 0; } } |
|
|||||
|
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
если нужный вам элемент является экземпляром класса с заполненными полями - вызовите у него (предварительно создав) - метод самоочистки, в котором удалите все связи(листенеры/ссылки и т.д.) и занулите переменные. после этого смело зануляйте ссылку на сам элемент.
дальше останется только ждать великого GC. |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:59. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|