Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   FlashDevelop + FlexSDK + swfmill (http://www.flasher.ru/forum/showthread.php?t=131919)

Александр 31.10.2009 02:19

FlashDevelop + FlexSDK + swfmill
 
всем привет!
использую эту связку!
\
но он что не видит ресурсы!
\
раньше использовал haXe там просто и все работало!
пишишь аттач и все (

а тут вроде так?
Код:

var cl : * = flash.utils.getDefinitionByName(name) as Class;
var myClip:MovieClip  = new cl() ;

а он говорит что переменная name не определена ..

что я не так делаю?
может пример каойнить подкините?

Зарание спасибо

alatar 31.10.2009 04:29

А переменная name определена? Из преведеного куска кода не ясно.

wvxvw 31.10.2009 05:03

swfmill и AS3 по большому счету не совместимы, ну, по крайней мере не на столько, чтобы так просто было их вместе использовать. На сколько я понимаю, HaXe умеет сам встраивать ресурсы с небольшой помощью swfmill, но, на самом деле swfmill не умеет компилировать многие виды ресурсов, да и вообще, вы умаетесь сами ее к AS3 подключать. Просто пользуйтесь [Embed] тэгами, это не создает очень много дополнительного хлама в SWF, всего каких-то пару классов, и те практически невесомые...

Что касается вашего кода, то он... не совсем нормально выглядит :)
Код AS3:

var cl : * = flash.utils.getDefinitionByName(name) as Class;
var myClip:MovieClip  = new cl() ;

должно быть:
Код AS3:

import flash.utils.getDefinitionByName;
var cl:Class = getDefinitionByName(name) as Class;
var myClip:MovieClip = new cl() as MovieClip;


Александр 31.10.2009 17:59

не (
видимо, я криво объяснил)
мой действия!
1) Создаю хмл-ку, в ней описываю ресурсы
Код:

<?xml version="1.0" encoding="iso-8859-1" ?>
<movie width="320" height="240" framerate="12">
  <background color="#ffffff"/>
  <!-- first frame -->
  <frame>
    <!-- add some assets to the library -->
    <library>
      <clip id="swfLoadingBar"        import="swf\LoadingBar.swf"/>
      <clip id="swfDoor"                import="swf\Door.swf"/>         
      <clip id="swfSky"                    import="swf\Sky.swf"/>
      <clip id="swfGround"        import="swf\Ground.swf"/>         
  </library>                       
  </frame>
</movie>

2) с помощью утилиты создаю файл swf с медией
Код:

swfmill.exe simple media.xml ..\lib\media.swf
3) в флеш девелопе цепляю этот файл (на правыю кнопку с проектом)
и там что то типо Ассет Либерти

4) в хаксе я писал так
Код AS3:

var mc:MovieClip = Lib.attach("swfSky") //тут имя ресурса, который лежит в этой медии.свф

и он появлялся! и все было хорошо)

= ХОЧу сделать также во флеше на АктионСкрипт3
вот мой действия

5)
Код AS3:

var cl:Class = getDefinitionByName("swfSky") as Class;
var myClip:MovieClip = new cl() as MovieClip;

а он горит, что swfSky нету! ,
так вот КАК ЕЕ ДОБАИТЬ ?


ПС, как ник сменить? буковку забыл (

murz 31.10.2009 18:51

кажется не надо использовать getDefinitionByName.
я не работал с SwfMill, но если он билдит ресусы и ассоциирует их с классами давая им меня как в атрибуте id.
то тогда
должно получиться так:
Код AS3:

new swfSky();


wvxvw 31.10.2009 18:58

После того, как вы скомпилировали SWF из swfmill - во FlashDevelop, правый клик на SWF > Insert Into Document, он вам уже ембед и сгенерит.

Александр 31.10.2009 19:32

угу генерит)
и че сним делать?
он делает чтото вроде
Код:

[Embed(source='../lib/media.swf', symbol='swfSky')]
куда его запихнуть?
(извините за тупость, но ни как не втыкаю как использовать)

Добавлено через 17 минут
Вот делаю так
Код AS3:

сlass Main ...
{
[Embed(source = '../lib/media.swf', symbol = 'swfSky')]                       
public const swfSky:Class;
 
public static function main()
{
 var mc:MovieClip = new swfSky() as MovieClip;
}
}

ошибок нет! , но мс = 0 всеровно...

Alex Lexcuk 31.10.2009 21:18

попробуйте как тут
http://www.flasher.ru/forum/showthre...845#post860845

Александр 31.10.2009 21:41

Спасибо!
попробую!
кстати следует отметить, что если цеплять не как библиотеку,
а по отдельно ресурсы то все работает
Код AS1/AS2:

[Embed(source='../Sky.swf')]


alatar 31.10.2009 22:33

Код AS3:

сlass Main ...
{
[Embed(source = '../lib/media.swf', symbol = 'swfSky')]                       
public var swfSky:Class;
 
public function main()
{
 var mc:MovieClip = new swfSky() as MovieClip;
}
}

если класс swfSky не является наследником MovieClip, mc будет равен null.
можно попробовать
[as3]var mc:MovieClip = MovieClip(new swfSky());[as3]
в таком случае если newSky не является наследником MovieClip на выходе будет ошибка.

Александр 01.11.2009 00:06

Угу я таки понял) что если ноль значит не наследник)
просто не ясно почему..
мой способ(грузить по отдельности) = работает хорошо,
и как товарищ Алекс предложил тоже пашит)

ПС еще вопрос (тему не хочу создавать)
вообщем это загрженный мувик - работает и играется (плей...)
Но почемуто mc.totalFrame - возращает ноль,
как узнать сколь ко кадров в мувике?

wvxvw 01.11.2009 02:04

Цитата:

Сообщение от alatar (Сообщение 862493)
[as3]var mc:MovieClip = MovieClip(new swfSky());[as3]
в таком случае если newSky не является наследником MovieClip на выходе будет ошибка.

Ваш код сгенерит рантайм ошибку, и ничем не лучше первого варианта, а даже, скорее хуже, т.как if-else всяко дешевле чем try-catch.

swfmill генерит вообще-то клипы AS2, так что это будет не MovieClip, a AVM1Movie. К сожалению у последнего нету методов play() / stop() и т.п. Можно достучатьсй только по LocalConnection или используя ExternalInterface (если доступен), но это гемморой...
describeType() вам в помощь, если у вас кастовать не получается что-то к чему-то.


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

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