PDA

Просмотр полной версии : Попытка экспорта символов в FlashDevelop


dimaMJ
26.01.2014, 00:51
В общем у меня возникла такая проблема, создал проект в FlashDevelop и в Flash CS6, проект Flash CS6 сохранил в папке src проекта FlashDevelop.
Далее, в Свойствах в Flash, в поле класс, указал Main.
Создал символ в флеше, экспортировал его в AS.
В классе main, вывел его на экран таким образом.
package
{
import flash.display.Sprite;
import flash.display.MovieClip;

public class Main extends Sprite
{
private var circle:MovieClip = new mc_circle();

public function Main ():void
{

circle.x = 350;
circle.y = 60;

addChild(circle);

}
}
}
mc_circle - это класс символа.
Все вывело, символ появился в заданных координатах. Далее, решил создать новый класс, создал экземпляр этого класса в классе Main, и сделал точно так же, в результате символ не выводился. Сам класс видит, писал trace. Запуск приложения делаю из Flash. Как решить эту проблему? уже и пробовал, экспортировать swc и обращаться и всеравно тишина. Как я понял, второй класс не связан со сценой. Но решить эту проблему так и не удалось, в Main все работает, а в другом классе тишина. Помогите решить эту проблему.

Добавлено через 19 минут
попробовал запуск во flashdevelop, и попробовал вывести модели из swc на сцену, swc лежит в lib.
В итоге, опять же символ вывелся в главном классе, а в остальных не выводится, уже категорически не знаю в чем дело.
package
{

import flash.display.Sprite;
import flash.events.Event;


[Frame(factoryClass="Preloader")]
public class Main extends Sprite
{
public _cl:First = new First();

public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
addChild(new cub()); //беру символ из swc
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}

}

}

es2
26.01.2014, 01:36
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.events.Event;

public class DocumentRoot extends Sprite
{
// Храним сцену в статической переменной
public static var _st_:Stage;

// constructor code
public function DocumentRoot()
{
// Инициализирует переменную сцены для обращения к ней из любого места программы
if ((DocumentRoot._st_=stage)) this.InitProject();
else this.addEventListener(Event.ADDED_TO_STAGE, this.InitProject);
}

private function InitProject(e:Event = null):void
{
if (e)
{
this.removeEventListener(Event.ADDED_TO_STAGE, this.InitProject);
DocumentRoot._st_ = stage ;
}
stage.scaleMode = StageScaleMode.SHOW_ALL;
// Убирает рамку объекта, если он в фокусе
stage.stageFocusRect = false;
// ... далее код самой программы, например, new Main();
new Main();
}


}
}

class Main
{
public function Main()
{
// Обращение к сцене через статическую переменную
DocumentRoot._st_.addChild(new cub())
}
}

Akopalipsis
26.01.2014, 01:43
Этот код для FD?)

dimaMJ
26.01.2014, 02:50
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.events.Event;

public class DocumentRoot extends Sprite
{
// Храним сцену в статической переменной
public static var _st_:Stage;

// constructor code
public function DocumentRoot()
{
// Инициализирует переменную сцены для обращения к ней из любого места программы
if ((DocumentRoot._st_=stage)) this.InitProject();
else this.addEventListener(Event.ADDED_TO_STAGE, this.InitProject);
}

private function InitProject(e:Event = null):void
{
if (e)
{
this.removeEventListener(Event.ADDED_TO_STAGE, this.InitProject);
DocumentRoot._st_ = stage ;
}
stage.scaleMode = StageScaleMode.SHOW_ALL;
// Убирает рамку объекта, если он в фокусе
stage.stageFocusRect = false;
// ... далее код самой программы, например, new Main();
new Main();
}


}
}

class Main
{
public function Main()
{
// Обращение к сцене через статическую переменную
DocumentRoot._st_.addChild(new cub())
}
}


спасибо, пробовал, но в других классах опять же тишина, обьекты не добавляются на сцену. а я не хочу в одном as файле писать все )

Добавлено через 4 минуты
если что инфу про экспорт брал тут, но получилось только так же как и в уроках, в классе main, а в других нет.
http://www.regul-flash.com/pages/kompilirujte-kod-v-flash-develop-a-grafiku-v-flash-ide/
http://nub.com.ua/2011/09/display-object-and-display-list-in-as3/

es2
26.01.2014, 11:44
спасибо, пробовал, но в других классах опять же тишина, обьекты не добавляются на сцену. а я не хочу в одном as файле писать все )
...


Незамысловатая мысль, которую я пытаюсь выразить, сводится к следующему:
Обращение к сцене через статическую переменную (в данном примере это DocumentRoot._st_) в каждом классе, где требуется сцена
Либо как вариант можно каждый класс расширять самим Stage, тогда обращение к сцене будет через указатель this - но это по-моему уже "велосипед"

dimaMJ
26.01.2014, 11:59
Незамысловатая мысль, которую я пытаюсь выразить, сводится к следующему:
Обращение к сцене через статическую переменную (в данном примере это DocumentRoot._st_) в каждом классе, где требуется сцена
Либо как вариант можно каждый класс расширять самим Stage, тогда обращение к сцене будет через указатель this - но это по-моему уже "велосипед"

а как собственно обратиться в другом классе к этой статической перемене ?

es2
26.01.2014, 12:19
а как собственно обратиться в другом классе к этой статической перемене ?

Уже обсуждалось:
http://www.flasher.ru/forum/showthread.php?t=142177

ZackMercury
26.01.2014, 13:01
Offtop:Ребят, я уже день, как установил FD, но до сих пор не понял, зачем делать проект в обеих средах? В чем вообще преимущество FD, если собирать всё равно в Flash?

Akopalipsis
26.01.2014, 13:13
FD это редактор кода, настоящий, а адоби флеш, это инструмент для создания анимации.
И Вы немного ошиблись, рисуют в адоби, а собирают в FD. И за один день Вы разницы не заметите, хотя я сразу её почувствовал. Но вот теперь я его считаю самым лучшим и жить без него не смогу.

dimaMJ
26.01.2014, 16:34
вот проект, в классе DocumentRoot.as все работает, квадрат выводит на экран, в классе Mains.as тишина.

dimaMJ
26.01.2014, 16:44
у кого есть опыт, поделитесь, как правильно использовать символы из flash ide в fd, с компиляцией в fd.планирую писать игру, очень необходимо.

es2
02.02.2014, 11:23
вот проект, в классе DocumentRoot.as все работает, квадрат выводит на экран, в классе Mains.as тишина.

Вы инициализируете сцену один раз, далее этого делать уже ненужно.
Потому как, если сцена проинициализирована и находится в статической переменной, то далее вы просто обращаетесь к ней из любого места программы

Вот например ваш Mains.as должен в этом случае выглядеть так:
package
{
import flash.display.Sprite;
import DocumentRoot;

/**
* ...
* @author dimaMJ
*/


public class Mains extends Sprite
{


public function Mains()
{
DocumentRoot._st_.addChild(new cub()); //не работает
// entry point
}

}

}

КорДум
02.02.2014, 12:45
Есть экземпляр документ класса на сцене по умолчанию. В нем создаются композиционно экземпляры ваших классов, в которых композицонно, опять же таки, добавлены ассеты из swc.
Другими словами, в swc находится только скомпилированные мувиклипы из FlashIDE, а в самом проекте классы, которые используют экземпляры этих графических ассетов в себе.

Подход товарища es2 с добавлением на, я полагаю, сцену, ужасен и заведомо неверен.