トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     外部SWFに埋め込んだ画像をロードするには
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ochibo
Åê¹ÆNo.40471
投稿日時: 2008-10-9 13:28
新米
居住地: Kyoto
投稿: 5
使用環境:
Flex Builder 3
ActionScript 3.0

Flash CS3
Windows XP SP3
外部SWFに埋め込んだ画像をロードするには
はじめまして。AS3を勉強中のochiaiです。

main.swf から大量の画像をもつ image.swf 内の画像をロードしたいのですが、
なかなか上手くいきません。
Flex Builder 3.0 (AS3)を使っています。

image.swf に埋め込み画像をもつクラス CImages をつくり、
main.swf でswfをロードしてクラス内の関数にアクセスする
ことで画像を読み込もうと思っています。

main.swf内 外部SWFをロードするクラス

package util
{
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.errors.IllegalOperationError;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;

	public class CExtObjLoader extends EventDispatcher
	{
		public function CExtObjLoader(){}
		public function Load( swfPath:String ):void
		{
			m_urlReq = new URLRequest( swfPath );
			m_loader = new Loader();

			var loaderInfo:LoaderInfo = m_loader.contentLoaderInfo;
			loaderInfo.addEventListener( Event.COMPLETE, H_EveLoadComp );
			loaderInfo.addEventListener( IOErrorEvent.IO_ERROR, H_EveIO_Error );

			var context:LoaderContext = new LoaderContext();
			context.applicationDomain = ApplicationDomain.currentDomain;
			m_loader.load( m_urlReq, context );
		}

		public function GetObj( name:String ) : Object
		{
			try {
				return m_loader.contentLoaderInfo.applicationDomain.getDefinition( name );
			}
			catch( error:Error ) {
				throw new IllegalOperationError( "[CExtObjLoader.GetObj()] " + name + " not found" );
			}
			return null;
		}

		public function H_EveLoadComp( eve:Event ):void { dispatchEvent( new Event( CExtObjLoader.EVE_LOADED ) ); }
		public function H_EveIO_Error( eve:Event ):void { dispatchEvent( new Event( CExtObjLoader.EVE_IO_ERROR ) ); }

		public static const EVE_LOADED:String = "loaded";
		public static const EVE_IO_ERROR:String = "IO_Error";
		private var m_loader:Loader;
		private var m_urlReq:URLRequest;
	}
}



main.swf内 image.swfの画像を使いたいクラスの一部

private var m_pObjLoader:CExtObjLoader;

private function Init():void {
	m_pObjLoader = new CExtObjLoader();
	m_pObjLoader.addEventListener( CExtObjLoader.EVE_LOADED, InitDataBase );
	m_pObjLoader.Load( "image.swf" );
}
private function InitDataBase(eve:Event):void {
	var extClass:Class = m_pObjLoader.GetObj( "CImages" ) as Class;
	var extClassRef:Object = new extClass();

	var imageClass:Class = extClassRef.GetFaceImage000();
	m_recievedFace = new imageClass as Bitmap;
}



image.swf のmxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
	<![CDATA[
	private var m_image:CImages = new CImages();
	]]>
</mx:Script>
</mx:Application>


image.swf のCImages.as

package
{
	public class CImages
	{
		public function CImages(){}
		public function GetFaceImage000():Class
 		{ return m_faceImage_000; }
		public function GetFaceImage001():Class
 		{ return m_faceImage_001; }

		[Embed( source="face_000.gif" )]
		private var m_faceImage_000:Class;
		[Embed( source="face_001.gif" )]
		private var m_faceImage_001:Class;
	}
}


ロード完了のイベントは実行されますが、CExtObjLoader の GetObj関数でCImagesクラスの取得に失敗してしまいます。
ochibo
Åê¹ÆNo.40479
投稿日時: 2008-10-10 14:12
新米
居住地: Kyoto
投稿: 5
使用環境:
Flex Builder 3
ActionScript 3.0

Flash CS3
Windows XP SP3
Re: 外部SWFに埋め込んだ画像をロードするには
試しに Flash CS3 で画像を埋め込んだswfを作ったところ、
main.swf にてロードすることができました。

image.swf 側に問題があると思うのですが、Flash CS3で作った
swfとFlex Builderで作ったswfではアクセス制限などで何か
違いがあるのでしょうか?

ローカルでチェックしているので、Flex Builderのコンパイラ引数に
-use-network=false
を追加してみましたが、結果は同じ(ロードはできてもクラスの参照でエラー)でした。
また、コンパイラオプション「アクセス可能な SWF ファイルを生成する」にチェックをいれてもダメでした。
961832p
Åê¹ÆNo.40490
投稿日時: 2008-10-11 2:03
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
 
:AS3:
- Adobe Flex SDK, Eclipse, AIR GEAR
- LB.Log AS3, Alcon2

:AS2:
- AMES(ASDT, MTASC, Eclipse, swfmill)
- Natural Entry Point Method
- LB.Log, Zeroi

Pro, Firefox, Chromium(Iron), IE

----------------
Pro,
Re: 外部SWFに埋め込んだ画像をロードするには
 
最近になってようやくActionScript3をやりだしまして、分からない事だらけなのですが、今回挑戦させていただきました。
まだあまりクラス分けしたり独自イベントを使用した事がないので、その部分は変えています。変数や関数の名前は一緒です。

コードが完全に同じではないので参考にならないかもしれませんが、埋め込まれた画像を表示させることはできました(ローカルでも大丈夫でした)。

別SWFファイルにある埋め込み画像を表示するサンプル
ログビューワ(ログ出力関数の結果表示)

また、コンパイラオプションについては、自分はFlexBuilder3やFlashCS3を使ったことがないのですが、今回コンパイル時にdump-configオプションで生成されたオプション一覧をソースコードと共に載せました。

何かの手がかりになればよいのですが…。

(main.swfのコード)

package{
    import flash.display. * ;
    import flash.events. * ;
    import flash.net. * ;
    import flash.system. * ;
    import com.luminicbox.log. * ;
    //========================================================================//
    public class Main extends Sprite{
        private var m_logger : Logger;
        private var m_loader : Loader;
        //--------------------------------------------------------------------//
        public function Main() {
            //ログ出力の準備
            m_logger = new Logger("Main");
            var cp : ConsolePublisher = new ConsolePublisher();
            m_logger.addPublisher(cp);
            //
            m_logger.info("Main");
            //
            var m_urlReq : URLRequest = new URLRequest("image.swf");
            m_loader = new Loader();
            //ロード完了時のイベント
            var loaderInfo : LoaderInfo = m_loader.contentLoaderInfo;
            loaderInfo.addEventListener( Event.COMPLETE, H_EveLoadComp);
            //
            var context : LoaderContext = new LoaderContext();
            context.applicationDomain = ApplicationDomain.currentDomain;
            //image.swfのロード
            m_loader.load( m_urlReq, context);
        }
        //--------------------------------------------------------------------//
        public function H_EveLoadComp( eve : Event) : void{
            m_logger.info("H_EveLoadComp");
            //
            var extClass : Class =
                m_loader.contentLoaderInfo.applicationDomain.getDefinition("Image") as Class;
            var extClassRef : Object = new extClass();
            var imageClass : Class = extClassRef.GetFaceImage000();
            //埋め込み画像の表示
            var m_recievedFace : Bitmap = new imageClass as Bitmap;
            addChild(m_recievedFace);
        }
    }
}

(image.swfのコード)

package{
    import com.luminicbox.log. * ;
    //========================================================================//
    public class Image{
        private var m_logger : Logger;
        //--------------------------------------------------------------------//
        public function Image() {
            //ログ出力の準備
            m_logger = new Logger("Image");
            var cp : ConsolePublisher = new ConsolePublisher();
            m_logger.addPublisher(cp);
            //
            m_logger.info("Image");
        }
        //--------------------------------------------------------------------//
        public function GetFaceImage000() : Class{
            m_logger.info("GetFaceImage000");
            //
            return m_faceImage_000;
        }
        //--------------------------------------------------------------------//
        [Embed( source = "res/mc.jpg")] private var m_faceImage_000 : Class;
    }
}

(コンパイル時のオプション)

<flex-config>
    <benchmark>true</benchmark>
    <compiler>
        <accessible>false</accessible>
        <actionscript-file-encoding>UTF-8</actionscript-file-encoding>
        <allow-source-path-overlap>false</allow-source-path-overlap>
        <as3>true</as3>
        <debug>false</debug>
        <es>false</es>
        <external-library-path>
            <path-element>P:\usr\work\share\flash\flex\flex_sdk_3.0.0.477_mpl\frameworks\libs\player\playerglobal.swc</path-element>
        </external-library-path>
        <fonts>
            <advanced-anti-aliasing>true</advanced-anti-aliasing>
            <languages></languages>
            <local-fonts-snapshot>P:\usr\work\share\flash\flex\flex_sdk_3.0.0.477_mpl\frameworks\winFonts.ser</local-fonts-snapshot>
            <managers>
                <manager-class>flash.fonts.JREFontManager</manager-class>
                <manager-class>flash.fonts.AFEFontManager</manager-class>
                <manager-class>flash.fonts.BatikFontManager</manager-class>
            </managers>
            <max-cached-fonts>20</max-cached-fonts>
            <max-glyphs-per-face>1000</max-glyphs-per-face>
        </fonts>
        <incremental>false</incremental>
        <keep-generated-actionscript>true</keep-generated-actionscript>
        <library-path>
            <path-element>P:\usr\work\share\flash\flex\flex_sdk_3.0.0.477_mpl\frameworks\libs</path-element>
            <path-element>P:\usr\work\share\flash\flex\flex_sdk_3.0.0.477_mpl\frameworks\libs\player</path-element>
            <path-element>P:\usr\work\share\flash\flex\flex_sdk_3.0.0.477_mpl\frameworks\locale\{locale}</path-element>
        </library-path>
        <locale>
            <locale-element>en_US</locale-element>
        </locale>
        <namespaces>
            <namespace>
                <uri>http://www.adobe.com/2006/mxml</uri>
                <manifest>P:\usr\work\share\flash\flex\flex_sdk_3.0.0.477_mpl\frameworks\mxml-manifest.xml</manifest>
            </namespace>
        </namespaces>
        <optimize>true</optimize>
        <show-actionscript-warnings>true</show-actionscript-warnings>
        <show-binding-warnings>true</show-binding-warnings>
        <show-shadowed-device-font-warnings>true</show-shadowed-device-font-warnings>
        <show-unused-type-selector-warnings>true</show-unused-type-selector-warnings>
        <source-path>
            <path-element>P:\usr\work\share\flash\package\as3</path-element>
        </source-path>
        <strict>true</strict>
        <use-resource-bundle-metadata>true</use-resource-bundle-metadata>
        <verbose-stacktraces>false</verbose-stacktraces>
        <warn-array-tostring-changes>false</warn-array-tostring-changes>
        <warn-assignment-within-conditional>true</warn-assignment-within-conditional>
        <warn-bad-array-cast>true</warn-bad-array-cast>
        <warn-bad-bool-assignment>true</warn-bad-bool-assignment>
        <warn-bad-date-cast>true</warn-bad-date-cast>
        <warn-bad-es3-type-method>true</warn-bad-es3-type-method>
        <warn-bad-es3-type-prop>true</warn-bad-es3-type-prop>
        <warn-bad-nan-comparison>true</warn-bad-nan-comparison>
        <warn-bad-null-assignment>true</warn-bad-null-assignment>
        <warn-bad-null-comparison>true</warn-bad-null-comparison>
        <warn-bad-undefined-comparison>true</warn-bad-undefined-comparison>
        <warn-boolean-constructor-with-no-args>false</warn-boolean-constructor-with-no-args>
        <warn-changes-in-resolve>false</warn-changes-in-resolve>
        <warn-class-is-sealed>true</warn-class-is-sealed>
        <warn-const-not-initialized>true</warn-const-not-initialized>
        <warn-constructor-returns-value>false</warn-constructor-returns-value>
        <warn-deprecated-event-handler-error>false</warn-deprecated-event-handler-error>
        <warn-deprecated-function-error>true</warn-deprecated-function-error>
        <warn-deprecated-property-error>true</warn-deprecated-property-error>
        <warn-duplicate-argument-names>true</warn-duplicate-argument-names>
        <warn-duplicate-variable-def>true</warn-duplicate-variable-def>
        <warn-for-var-in-changes>false</warn-for-var-in-changes>
        <warn-import-hides-class>true</warn-import-hides-class>
        <warn-instance-of-changes>true</warn-instance-of-changes>
        <warn-internal-error>true</warn-internal-error>
        <warn-level-not-supported>true</warn-level-not-supported>
        <warn-missing-namespace-decl>true</warn-missing-namespace-decl>
        <warn-negative-uint-literal>true</warn-negative-uint-literal>
        <warn-no-constructor>false</warn-no-constructor>
        <warn-no-explicit-super-call-in-constructor>false</warn-no-explicit-super-call-in-constructor>
        <warn-no-type-decl>true</warn-no-type-decl>
        <warn-number-from-string-changes>false</warn-number-from-string-changes>
        <warn-scoping-change-in-this>false</warn-scoping-change-in-this>
        <warn-slow-text-field-addition>true</warn-slow-text-field-addition>
        <warn-unlikely-function-value>true</warn-unlikely-function-value>
        <warn-xml-class-has-changed>false</warn-xml-class-has-changed>
    </compiler>
    <debug-password></debug-password>
    <default-background-color>0xDEE2E2</default-background-color>
    <default-frame-rate>15</default-frame-rate>
    <default-script-limits>
        <max-recursion-depth>65535</max-recursion-depth>
        <max-execution-time>9</max-execution-time>
    </default-script-limits>
    <default-size>
        <width>360</width>
        <height>270</height>
    </default-size>
    <link-report>link-report.xml</link-report>
    <load-config>P:\usr\work\private\test\flash\081010_as3/flex-config.xml</load-config>
    <output>P:\usr\work\private\test\flash\081010_as3/dst/main.swf</output>
    <runtime-shared-library-path>
        <path-element>libs/framework.swc</path-element>
        <rsl-url>framework_3.0.0.477.swz</rsl-url>
        <policy-file-url></policy-file-url>
        <rsl-url>framework_3.0.0.477.swf</rsl-url>
        <policy-file-url></policy-file-url>
    </runtime-shared-library-path>
    <static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
    <use-network>true</use-network>
</flex-config>


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

ochibo
Åê¹ÆNo.40521
投稿日時: 2008-10-15 15:12
新米
居住地: Kyoto
投稿: 5
使用環境:
Flex Builder 3
ActionScript 3.0

Flash CS3
Windows XP SP3
Re: 外部SWFに埋め込んだ画像をロードするには
返信ありがとうございます。
早速いただいたコードをFlex Builderにて試してみたのですが、
main.swf側でクラスの参照に失敗してしまいました・・。
(コンパイルが通らなかったので、ログ関係はコメントアウトさせて頂きました)

コンパイル時のオプションも頂いたので、いろいろ調べてみます。
自分も先月末にFlashをはじめたばかりで、分からないことだらけですが、これからもよろしくお願いします。
ochibo
Åê¹ÆNo.40545
投稿日時: 2008-10-17 12:04
新米
居住地: Kyoto
投稿: 5
使用環境:
Flex Builder 3
ActionScript 3.0

Flash CS3
Windows XP SP3
Re: 外部SWFに埋め込んだ画像をロードするには
FlexBuilder 3にて、Flexプロジェクトではなく ActionScriptプロジェクトで作ったら読み込むことができました。

Flexプロジェクトで作成したswfのクラスの参照方法がわからない件はいまだ解決していませんが、
とりあえず自分がやりたかったことは解決しました

ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops