2011-01-17 7 views
1

私のイメージをAS3ですばらしいものにしようとしています。私は "動く背景"の効果を作りたいと思っています。例えば、私のイメージは200×200、私のマスクは200×40です。私がマウスを動かすと、背景を動かしてマスクを置いておきます。AS3反転マスク、MouseEvent.ROLL_OVERがマスクを移動します

AS3には反転マスクオプションがないため、私はBlendModeを使用して親レイヤにマスクを追加する必要があります。私が思うところで問題がどこに来るのですか?マスクのY位置(マスクではMouseEventsを有効にできないのでできない)を変更したい場合は、そのすべてまたはすべてを無効にします。画像全体が下に来るか(マスクを含む)、何も起こらない。

これは私のコードの一部ですが、私は本当に誰かがこのやや簡単に見える問題を修正する方法を知っていることを願っています。うん! (画像を読み込むことを担当するカスタムImageLoaderクラスがあります)

var imageLoader:ImageLoader = new ImageLoader(); 
imageLoader.url = "image.jpg"; 
imageLoader.blendMode = BlendMode.LAYER; 
imageLoader.addEventListener(ImageLoader.IMAGE_LOADED, imageLoadedHandler); 

var maskContainer:Sprite = new Sprite(); 
with (maskContainer.graphics) { 
beginFill(0x000000); 
drawRect(0, 0, 200, 40); 
endFill(); 
} 

maskContainer.blendMode = BlendMode.ERASE; 

private function imageLoadedHandler(e:Event):void { 
// Ofcourse, here is where the problem starts. 
// I HAVE to addChild the mask to the imageLoader, so everything comes down/up. 
addChild(imageLoader); 
imageLoader.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler); 
imageLoader.addChild(maskContainer); 
} 

private function rollOverHandler(e:MouseEvent):void { 
imageLoader.removeEventListener(MouseEvent.ROLL_OVER, rollOverHandler); 
imageLoader.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
} 


private function mouseMoveHandler(e:MouseEvent):void{ 
trace("move"); 
imageLoader.y = e.currentTarget.mouseY; 
} 

ありがとうございます。

+0

私はあなたがこのすべてを通過する必要がある理由は、なぜあなただ​​けのイメージ、およびマスクを作成し、マウスオーバーで画像を移動し、マスクの静止を維持することはできません理解していませんか? – Daniel

+0

それは私がダニエルをしようとしていることです。問題は、反転したマスクが必要なので(私は200x40の四角形の中だけを見たいと思っています)、ここで説明したように、マスクを画像に追加してブレンドモードを変更する必要があります。 http://franto.com/inverse-masking-disclosed – Nick

+0

あなたはそれを複雑にしているようですが、あなたが必要とするより簡単なブロック/プロトタイプに煮詰めてみてください。私が下に示した例を見てください。あなたはマスクを反転させる必要はありません。そうすることが意図されているので、このようなもののブレンドモードは必要ありません。 – Daniel

答えて

2

私はあなたが持っている問題があると思います。

問題ではなく、代わりにビットマップを移動することができスプライトを移動するので、その後imageHolder Sprite

を追加し、あなたがimageLoaderに物事を割り当てることです。 私はちょうどFlashでこれをすばやく行い、IMGをライブラリに追加しましたが、代わりにplaceholder + loaderを置き換えることができます。これは理想的ですが、物を動的に読み込んでいるので "読み込み中"というプレースホルダを持つことができます。

var imageHolder:Sprite = new Sprite(); 
addChild(imageHolder); 
var bmp:Bitmap = new Bitmap(new IMG); 
imageHolder.addChild(bmp); 
var maskContainer:Sprite = new Sprite(); 
with (maskContainer.graphics) { 
beginFill(0x000000); 
drawRect(0, 0, 200, 40); 
endFill(); 
} 

imageHolder.mask = maskContainer; 

imageHolder.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler); 

function rollOverHandler(e:MouseEvent):void { 
imageHolder.removeEventListener(MouseEvent.ROLL_OVER, rollOverHandler); 
imageHolder.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
} 

function mouseMoveHandler(e:MouseEvent):void{ 
trace("move"); 
bmp.y = -e.currentTarget.mouseY; 
} 
+0

神様のために、私はいつも事態を複雑にしています。悪い習慣について話す...なぜ私は別の親コンテナを作るという考えを思い付くことができなかったのか、それはとても明らかです。そして私は何を考えていたのですか、ブレンドモード? Danielさん、ありがとうございました!! – Nick