2009-08-26 13 views
2

OK、私はこれを聞いている気がしますが、私は午後全体を成功することなく試してみました。AS3に埋め込まれた画像をロードする

AS3では、イメージをライブラリに追加して(image.pngと呼ぶ)、コードを使用してインスタンス化します。

私は外部の画像をこのよう

var pLoad:Loader = new Loader(); 
pLoad.load(new URLRequest("image.png")); 
addChild(pLoad); 

をインスタンス化することに成功しました。しかし、私が試した何に関係なく、私は図書館から同じロードに画像を行うことはできません。それはどうですか?

脇に:私は[埋め込み]構文を見たことがありますが、理想的にはハードコードされたイメージ名を避けたい、つまりイメージを選択してプログラムでイメージ名を生成したいと思っています。

+0

どのようにライブラリをロードしていますか? –

+0

あなたは何を意味するのかよく分かりません。私は、Flash IDEのライブラリタブのように "ライブラリ"を意味します。私はこれらがSWF自体の一部としてロードされると思います - それは間違っていますか? – ggambett

+0

いいえ、IDで参照する必要があります。あなたのライブラリーにそのイメージのIDを指定しましたか? –

答えて

0

この作品のように見える:

var pDef:Class = getDefinitionByName("image.png") as Class; 
var _image:BitmapData = new pDef(10, 10); 

m_pSprite = new Sprite();   
m_pSprite.graphics.beginBitmapFill(_image); 
m_pSprite.graphics.drawRect(0, 0, _image.width, _image.height); 
m_pSprite.graphics.endFill(); 
addChild(m_pSprite) 

はしかし、醜いとunnecesarily複雑に見えます。その他の方法で?

+0

Bitmapオブジェクトを作成し、BitmapDataで埋めてから、BitmapをSpriteの子として追加することもできます。 –

1

私が見つけたことによると、これは以前のバージョンと同じようにAS3で行うのが簡単ではありません。 1つの方法は、画像を保持するMovieClipを作成し、そのMovieClipのインスタンスを作成してステージに追加することでした。もう1つの方法は、追加する各画像のクラスを作成し、インスタンス化してそのクラスをステージに追加することです(ステップが配置されているステップはhere)。

これを行うには、 。

5

まず、ライブラリのプロパティウィンドウを開いて、 "Export to Actionscript"チェックボックスをチェックしてください。この後、クラスのテキストフィールドにオブジェクトへの参照を入れてください。この例では、今ここに素敵な作品、のはそれだコード。

var ImageClass:Class = getDefinitionByName("MyImage") as Class; 
var image:Bitmap = new Bitmap(new ImageClass(575,430)); 
addChild(image); 

を取得してみましょう。[OK]を、MYIMAGEそれを呼び出すでしょう。

+0

これは最も簡単な方法です。それは "古い方法"よりも唯一の行ですので、私はそうするでしょう。 –

+0

問題は、スプライトや、私が変換を適用できるもの、特にスケーリングとローテーションが必要なことです。私が読んだものから、ビットマップはそれをしません。下に掲載された私自身の答えは、ビットマップデータを読み込んでスプライトに描画するのと同じ基本的なアイデアを使用していますが、まだ良い方法があることを願っています。 – ggambett

+0

ビットマップオブジェクトをいつでもスプライトに追加し、必要な変更を実行することができます。 – ruyadorno

3

Flashライブラリは非常に神秘的なbeeingているが、同様に用い、それはあなたのFlashワークフローの設定に非常に良い方法することができた場合...私はこのすべて明らかにしてみましょう:と

ライブラリシンボルを「ActionScriptの書き出し」オプションは実際にクラスとしてコンパイルされます。同じクラス名を持つクラスファイルがない場合、Flashはコンパイル時に "クラス"フィールドで宣言したのと同じ名前のファイルを作成します。つまり、あなたの場合、クラスの名前が "image.png"であれば、BitmapDataを拡張した "image"パッケージに実際に "png"クラスが作成されます(もちろん、別のクラス名を与えることは賢明です。これは、あなたが他のクラスと同じようにそれをインスタンス化し、getDefinitionByNameを必要としないことを意味します...)proyect.library.MyImageを言う:

import image.png; 
var bmd:BitmapData = new png(0,0); //the dimensions are irrelevant but necessary 

その後、あなたはそれを追加できるようにBitmapインスタンスを必要としますDISPLAYLIST:

var bitmap:Bitmap = new Bitmap(bmd,"auto", true); //see the docs for the las two args 
addChild(bitmap); 
//Bitmap is a DisplayObject, so you can apply transformations to it as with any Sprite or MovieClip. 

このすべてが(グラフィック除く)任意のライブラリシンボルに適用されるには...のはproject.library」と「ASのための輸出」音記号をあなたに言わせて。MySound」、そしてあなただけのこの操作を行うことができます:あなたはあなたのライブラリーのシンボルと同じ名前のクラスファイルを持っている場合は

import proyect.library.MySound; 
var sound:Sound = new MySound(); 
sound.start(); 

は、フラッシュは(それがデフォルトのベースクラスを継承している場合)、それを使用しようと を。これらのシンボルはすべて、編集可能なBase Classフィールドを持っていることに気がつくでしょう。デフォルトクラスを継承していれば、そこにカスタムクラスを設定することもできます...ビットマップではflash.display.BitmapDataです。 media.Sound、fontはflash.text.Font、movieclipsはflash.display.MovieClipなどです。 MovieClipsの場合、フレームがない限り、スプライトからサブクラス化することもできます。

すべてのそれはちょっと神秘的だと思うかもしれませんが、うまく適用されると、Flashを使って作業するデザイナーと開発者の両方に快適なワークフローがもたらされます。たとえば、UI定義全体を使って素敵なパッケージをセットアップし、デザイナーがこれらの基本クラスを使ってグラフィックスやアニメーションを組み立てることができます。すでにクラス名が何であるかを知っていれば

+0

グラフィックを表示リストに追加するにはどうすればよいですか? – NappingRabbit

2

ruyadornoの方法の改善、わずかです:

var image:Bitmap = new Bitmap(new MyImage(0, 0)); 
addChild(image); 

ビットマップは簡単に十分なスプライトに入れることができます。

var image:Bitmap = new Bitmap(new MyImage(0, 0)); 
var sprite:Sprite = new Sprite; 
sprite.addChild(image); 
addChild(sprite); 

次にあなたが変換することができますスプライトは通常通り。

n.b. MyImageのパラメータは幅と高さですが、サブクラスにはダミーです。何かを渡すことができます。

+0

ああ、指摘クリス、ありがとう! – ruyadorno

関連する問題