またまたCHECKMATE用にこんなの作りました。
なでなでワンコ | wonderfl build flash online
- マウスのホイールをまわしたら、ワンコをなでなで。
- ホイールクリックでワンコを押しつぶす。
- 左クリックでワンコが歌う。
これだけ。
簡単そうに見えるけど、これ作るの意外と大変だった。
ぶち当たった問題点は以下の3つ。
- AS3ではホイールクリックのイベントが取れない。(右クリックも)
- ホイールの回転量(Event.delta)は環境によって大きさが違う。
- 別ドメインのswfを読み込んで、再生制御(gotoAndStop)できない。
それでは1つずつ解決方法を説明していきます。
1. 右クリックとホイールクリック
これについては、こちらに詳しく書かれていました。
【AS3.0】右クリック、ホイールクリックの判定 | プログラマ気分
そして、僕がちょっとだけ変えて、wonderflにアップしたのがこれ。
右クリックとホイールクリックのイベントが取得できているはず!
2. ホイールの回転量が環境によって違う
この問題は簡単。
Event.deltaの絶対値は結構違うけど、符号は同じだから以下のコードでどの方向に何回回したかはわかる。
-
var cnt:int = 0;
-
stage.addEventListener(MouseEvent.MOUSE_WHEEL, function(event:MouseEvent):void {
-
if (event.delta> 0) cnt++;
-
else if (event.delta <0) cnt--;
-
});
はい、解決。
3. 別ドメインのswfを読み込んで、再生制御できない
結論からいうと、これは解決できなかった。
この問題については、こちらに書かれていますが、解決方法が書いてない!
loader.content、bmd.draw(loader) でセキュリティサンドボックス侵害 | エントリー | _level0.KAYAC
つまり、Loaderで読み込んだswfを制御するには、
Loader.contentを使わないといけないけど、これはセキュリティサンドボックス侵害になるってこと。
ApplicationDomainってやつが曲者っぽい。
ApplicationDomain クラスの使用
もう、この問題は、どーにもこーにも(allowdomainとか、ムービーをMCにしてリンケージ設定とか、いろいろ試した)
解決できなかったので、png画像をいっぱい用意して、いっぱいロードして、パラパラ漫画のように表示した。
-
import flash.display.Loader;
-
import flash.display.Sprite;
-
import flash.net.URLRequest;
-
import flash.system.LoaderContext;
-
-
class MyHand extends Sprite
-
{
-
public var images:Array = [];
-
public function MyHand():void
-
{
-
for (var i:uint = 1; i <= 6; i++){ //今回は画像が6枚だった
-
var loader:Loader = new Loader();
-
loader.load(new URLRequest("http://hoge.com/img"+i+".png"), new LoaderContext(true));
-
images.push(loader);
-
addChild(images[i - 1]);
-
}
-
show(0);
-
}
-
public function show(num:uint):void {
-
for (var i:uint = 0; i <6; i++) {
-
if(i==num) images[i].visible = true;
-
else images[i].visible = false;
-
}
-
}
-
}
試してないけど、こんな方法で解決できるかも。
- 必殺LocalConnectionで無理やり制御する。
- MCのリンケージ設定のときに「ランタイム共有用に出力」にチェックを入れて、URLを指定する。
誰か試してみてください。

