Войти

Показать полную графическую версию : Balls, Balls and again Balls!


Greshnick
16-07-2013, 17:00
Доброго времени суток, Уважаемые форумчане! Возник вопрос по поводу реализации в коде повтора проигрыша анимации пузырков.

Код на ActionScript 3 выглядит следующим образом:


import com.greensock.*;
import flash.events.Event;
import com.greensock.TimelineMax;


var tl : TimelineMax = new TimelineMax();

var arr : Array = new Array;
var l : int = 0;

Balls();

function Balls() : void
{
for (l=0; l<500; l++)
{
arr[l] = new ball();
arr[l].x=Math.random()*stage.stageWidth;
arr[l].y=stage.stageHeight;

var inerTL : TimelineMax = new TimelineMax();

//arr[l].alpha=0;

inerTL.insert(TweenMax.to(arr[l], 1, {y:0, onComplete : onDelete, onCompleteParams : [arr[l]]}));
inerTL.insert(TweenMax.to(arr[l], 0.3, {alpha:1}));

addChild(arr[l]);

tl.append(inerTL, -(Math.random()*10));
}
}


function onDelete(e : MovieClip) : void
{
removeChild(e);
e=null;
}



tl.append(inerTL, -(Math.random()*10));
В глобальную линию анимации tl добавляются наши анимации движения шариков. Есть предположения может быть у данной функции есть какое нибудь событие onComplete в котором бы я вызывал новое исполнение функции Balls(); или можно реализовать как то по другому. Посоветуйте, как решить данную проблему. На всякий случай прикрепляю исходник. Заранее спасибо.

XPEHOMETP
17-07-2013, 11:35
Вы там, это, по осторожнее с названием темы! А то у людей, посмотревших мультик про Бивиса и Баттхеда, при слове Balls возникают несколько не те ассоцияицы!

lxa85
17-07-2013, 15:31
Greshnick, Action Script установить не удалось, т.ч. извините, здесь я не помощник.

Greshnick
18-07-2013, 20:36
lxa85 да вроде сам разобрался. Только вот не нравится, одна вещь растет память когда идет новая итерация всплытия. хотя все шарики были до этого удалены из памяти и со сцены и созданы снова. Среда программирования Adobe Flash Professional CS5

Greshnick
18-07-2013, 20:38
XPEHOMETP, да у меня у самого "ассацияицы" c одноименной игрушкой для Андройд. Может помните...

Iska
18-07-2013, 21:46
хотя все шарики были до этого удалены из памяти »
Удаление объектов ещё не приводит к освобождению памяти. Память освободится, когда движок соизволит провести «сборку мусора».

К слову сказать, Microsoft таки добавила в конце концов в WSH/JScript метод «CollectGarbage()», принудительно запускающий процесс.

Попробуйте порыться в: Adobe Flash Professional CS5 Garbage Collector - Поиск в Google (https://www.google.ru/search?q=Adobe+Flash+Professional+CS5+Garbage+Collector), может что и будет.

Greshnick
19-07-2013, 10:24
Iska, lxa85, XPEHOMETP, не хотелось бы начинать новую тему. Но просто проект связан делаю и интерфес и кодирую логику в делфи. Вопрос в следующем. Делфи изучаю ну года 4 наверное. До сегодняшнего дня все время работал на access и знать не хотел никакие xml. Но изучив логику работы с xml и ее интеграцию и простоту использования как языками web-сферы так и прикладного. Решил проект создавать на xml т.к. в дальнейшем планирую сделать сайт на основе этой базы. Да и легко использовать на хостингах. php-скриптик + xml вот тебе готовый сервер для запросов к базе данных и легкая упаковка и использование прикладными программами созданными на делфи или С++, при локальном использовании на компе пользователя. Для парсинга xml использую стандартный xmlDocument уже разобрался и с созданием и добавлением дочерних ветвей в файл. Но вот удаление не могу понять как реализовать нашел на просторах интернета на другом форуме запись об удалении дочерней ветви но постановка задачи стоит что ветвь одна, а у меня их несколько и может доходить до 100 и более. И как удалить конкретно 5 или 30 ветвь в структуре не могу найти.
xml структура файла следующая:
<?xml version="1.0" encoding="utf-8"?>
<images>
<image id="1"></image>
<image id="2"></image>
<image id="3"></image>
<image id="4"></image>
....
</images>

код для удаления одной ветви выглядит следующим образом:

var
XML: IXMLDocument;
begin
//загружаю исходный xml файл
XML := LoadXMLDocument('Example1.xml');
//вот здесь происходит удаление ветви, когда их несколько удаляется только первая, а как удалить последующие?
XML.DocumentElement.ChildNodes.Remove(XML.ChildNodes['images'].ChildNodes['image'].AttributeNodes.Nodes['1']);
//сохранение результата в измененый xml файл
XML.SaveToFile('Exmple2.xml');
end;

Iska
19-07-2013, 10:52
Greshnick, используйте XPath для получения потребного по порядку или по атрибуту элемента (пример на VBScript):
Option Explicit

Dim objXMLDocument
Dim objXMLElement

Set objXMLDocument = WScript.CreateObject("MSXML2.DOMDocument")

If objXMLDocument.load("E:\Песочница\0297\0001.xml") Then
' Элемент с указанным значением атрибута
Set objXMLElement = objXMLDocument.selectSingleNode("/images/image[@id='3']")
WScript.Echo objXMLElement.attributes.item(0).nodeValue

'Третий элемент, нумерация с нуля!
Set objXMLElement = objXMLDocument.selectSingleNode("/images/image[2]")
WScript.Echo objXMLElement.attributes.item(0).nodeValue

' Удаляем элемент
objXMLElement.parentNode.removeChild objXMLElement

Set objXMLElement = Nothing

' Смотрим результат
WScript.Echo objXMLDocument.xml
End If

Set objXMLDocument = Nothing

WScript.Quit 0


Пользование xml в качестве базы данных — весьма, весьма не лучший выбор с точки зрения производительности.

Greshnick
19-07-2013, 12:17
Iska, все оказалось достаточно тривиально)))

procedure TForm1.Button6Click(Sender: TObject);
var
XML: IXMLDocument;
begin
XML := LoadXMLDocument('Example1.xml');

//вот получение необходимой мне ветви из списка. В данном случае я удаляю 4 элемент т.к. счет идет от 0.
XML.DocumentElement.ChildNodes.Remove(XML.DocumentElement.ChildNodes.Nodes[3]);

XML.SaveToFile('Exmple2.xml');
end;

База полностью на xml не будет основана xml используется для хранения портфолио людей. Т.к. ACCESS и flash я как то не думал их связывать. Т.е. у нас есть флешка в которой ярко и красочно сделано оформление портфолио. Во флешку при помощи ExternalCall я передаю путь и имя xml файла для подключения. Флеш принимает и строит список людей и выводит из базы данные в компоненты. Основной удар будет на access т.к. там будут расчеты различных показателей.




© OSzone.net 2001-2012