Просмотр полной версии : Последовательность действий
Народ, помогите идеологически.
На onEnterFrame у мени висит чтение xml, при каждом шаге по флагу делается запрос xml.
Хмл содержит информацию о последовательности действий, которые нужно отрисовать друг за другом.
Например:
Пришла хмл:
-движение объекта 1
-движение объекта 2
-движение объекта 3
Объекты все разнородные, их движения описываюся разными функциями.
Нужно по порядку совершить эти действия и только потом запросить следующую хмл.
Сейчас у меня действия происходят в при разборе хмл, но сделать так,чтобы было по порядку не поучается, tween как-то странно определяет какое действие закончилось. Как сделать правильно?
То есть мне нужна задержка в цикле считывания хмл, но не на одинаковое число милисекунд, а ровно на столько, сколько длится некое действие.
Да, можно вместо цикла фор использовать конструкцию n = 10;
this.onEnterFrame = function() {
if (n--) {
trace("n="+n);
} else {
delete this.onEnterFrame;
}
};
но задержка будет одинаковая, на (1000/fps) ms
Идеальный вариант — конвеер Джона, http://potapenko.com
__etc, а можно прямой линк, а то вон что:
1. Article "The Mechanism of the conveyor"
(coming soon)
Не нашла что-то =(
Нашла в русской версии сайта, спасибо, сейчас посмотрю
__etc, да, спасибо, читаю, тут побыстрому не сделаешь. Я думала пару строк, в вижуал бэйсике например есть волшебные пять строк, которые пихаются в while и делают задержку.
А там и есть пару строк.
conv = Conv.create();
conv.put(this,'anyMethod','10',…<params>)
10 — время выполнения метода в кадрах.
__etc, вот решила попробывать, пишу вот такой простой код на символ
import com.potapenko.managers.Conv;
trace(this.Сonv=Conv.create());
var a = [80, 50, 20, 50, 80, 100];
for (var i = 0; ii<a.length; i++) {
this.Conv.put(this, "_alpha", "1", a[i]);
}
Выдется ошибка:
**Error** C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\mx\transitions\easing\Strong.as: Line 8: The name of this class, 'mx.transitions.easing.Strong', conflicts with the name of another class that was loaded, 'mx.transitions.easing.Strong'.
class mx.transitions.easing.Strong {
Почисти aso файлы. И ещё — имя переменной не может совпадать с именем класса.
__etc, удалила ASO-файлы, оставила просто строчку import com.potapenko.managers.Conv;
Теперь вот что, сорри на листинг:
**Error** C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\FP8\TextField\StyleSheet.as: Line 7: The name of this class, 'TextField.StyleSheet', conflicts with the name of another class that was loaded, 'TextField.StyleSheet'.
{
**Error** C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\mx\transitions\BroadcasterMX.as: Line 8: The name of this class, 'mx.transitions.BroadcasterMX', conflicts with the name of another class that was loaded, 'mx.transitions.BroadcasterMX'.
class mx.transitions.BroadcasterMX {
**Error** C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\mx\transitions\OnEnterFrameBeacon.as: Line 10: The name of this class, 'mx.transitions.OnEnterFrameBeacon', conflicts with the name of another class that was loaded, 'mx.transitions.OnEnterFrameBeacon'.
class mx.transitions.OnEnterFrameBeacon {
**Error** C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\mx\transitions\easing\Strong.as: Line 8: The name of this class, 'mx.transitions.easing.Strong', conflicts with the name of another class that was loaded, 'mx.transitions.easing.Strong'.
class mx.transitions.easing.Strong {
**Error** C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\mx\transitions\easing\Regular.as: Line 8: The name of this class, 'mx.transitions.easing.Regular', conflicts with the name of another class that was loaded, 'mx.transitions.easing.Regular'.
class mx.transitions.easing.Regular {
Total ActionScript Errors: 5 Reported Errors: 5
Это у вас что-то с Flash, и конвеер тут непричён.
__etc, сейчас переставлю канешна, но обычно-то не ругается... Можно будет к вам в дальнейшем за советом в аську обратиться?
Да ну, зачем усложнять...
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(ok:Boolean) {
if (ok) {
_root.isLoaded = true;
} else {
_root.isLoaded = false;
}
};
var isLoaded:Boolean = false;
my_xml.load("xmldata/description.xml");
var i = 0;
_root.onEnterFrame = function():Void {
if (isLoaded) {
my_xml.load("xmldata/description.xml");
trace(i);
}
i++;
}; Переменная i нужна для того, чтобы можно было наглядно убедиться, что ХМЛ действительно загрузился.
Чтобы переделать это под свой вариант нужно там, где выполняется условие isLoaded прописать загрузку не того же ХМЛя, а того, который тебе нужен.
wvxvw, но при таком коде не будет постепенного разбора хмл, мне нужно именно сделать определенные задержки перед чтением очередной строки хмл
Ну а какая разница? Принцип-то тот же... =\ Начало любого действия (из тех, что происходят последовательно) переводит флаг в false, окончание - в true. А онЕнтерФрейм проверяет состояние флага. Если флаг в true - переходит к выполнению следующего действия, если нет - предыдущее продолжает выполнятся.
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.parseXML("<p><a b='1' c='2' d='3'/><a b='4' c='5' d='6'/><a b='7' c='8' d='9'/><a b='10' c='11' d='12'/></p>");
var counter:Number = 0;
var counter1:Number = 0;
_root.onEnterFrame = function() {
counter++;
trace(counter);
var frames2wait:Number = waitFrames(my_xml.childNodes[0].childNodes[counter1]);
if (counter1 == my_xml.childNodes[0].childNodes.length) {
delete _root.onEnterFrame;
}
if (counter == frames2wait) {
counter1++;
counter = 0;
trace("waited "+frames2wait+" frames");
}
};
function waitFrames(_xml:XML):Number {
var n:Number = 0;
for (ii in _xml.attributes) {
n += Number(_xml.attributes[ii]);
}
return n;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.