‘AS3’ タグのついている投稿

AS3:指定フォントで特定の文字を埋め込むときの謎

2010年10月11日 月曜日

スクリプト上で定義したテキストフィールドに、
指定のフォントで特定の文字だけ使いたい。
 
調べたらいくつか方法があるみたいなんだけど、
数字は出るが、記号やアルファベットがでない、という謎に直面。
 
 
結局、静止テキストでその文字を入力したムービークリップを用意して、
リンケージさせておくことで表示された。
 
解決方法も謎。ちなみに環境は MacOS 10.5.8 FlashCS4 10.0.2
 
 
 

AS3:Tween系ライブラリとグラデーションマスク

2010年9月25日 土曜日

チップアップ on グラーでションマスクアイコン

グラデーションマスクつきアイコン


結構贅沢というか雑な使い方なのか、他のサイトで見つけられなくて苦労したのでメモ。
グラデーションマスク上にTween付き吹出しを出すのが今回の目的。

レイヤー的には、

 ふきだしMovieClip
  |
 グラデーションマスクMovieClip
  |
 吹出しを付けたいアイコン等

 
という感じで、カーソルがアイコン上にある場合、ふきだしがカーソルについてまわる感じ。で、それをいっぱい並べたりする。
 
 
ここで、この吹出しをMOUSE_MOVEなどで動かすわけですが、
下のグラデーションマスクが吹出しと被ると
なぜかただのマスク(2値マスク)になってしまう。
描画がリフレッシュされない感じ。
なんだかよくわからないけど、ビットマップキャッシュ辺りが絡んでそうな模様。
 
 
とりあえず、ROLL_OVERMOUSE_MOVEROLL_OUTのそれぞれで

icon_mc.mask = gradMask_mc;

と毎回マスクをかけ直すことで対処しようと。
ここで問題になるのが、
マウスオーバーでこの吹出しをふわっと浮かび上がらせたい。
となると、Tween系のライブラリを使いますよね。
 
 
 
最初、軽くて必要十分だったKTweenというライブラリを使っていたのですが、
updateのイベントがないために、
残念ながら今回のケースではTween中にマスクが切れたりする。
すると下のアイコンがチラつきます。あー
 
そこで、KTween作者の方がおすすめしていた、
BetweenAS3というライブラリに変更し、
Tween中にupdateイベントで上記のマスクかけ直し続けることでなんとか成功。
 
 
 
どこで引っ掛てるのかマスクの階層や場所を変えたり
ビットマップキャッシュONOFFしたりと、
いろいろ試してかなりのロス…。
 
あ、あとビットマップキャッシュにするとなんか位置変わってたり。
いや、見た目はOKなんだけど、マウスイベントがかからなかったり。
 
 
なんだかなー
 

AS3:Twitterの画像を読み込むときの注意点

2010年9月11日 土曜日

 
# 外部ドメインからロードした画像に対しては、
# ピクセルデータにアクセスできない
 
 
これはトリッキーだ!と思った。
 
FlashPlayerでのプレビュー時にはこの問題は起きない、
ブラウザで見たときに初めて発動する。
 
 
発動条件:
 # 読み込んだ画像をBitmapDataとして使いたい
 
 
今回は、Loaderで読み込んだ画像を使いまわしたい、という
ミッションのためにその読み込んだ画像をBitmapDataで
保持する必要があった。
# そもそもLoaderやMovieClipはコピー出来ないからこんなことに…
 
loaderをそのままMovieClip等にaddChildすれば問題ない。
問題は、loader.content を読み出す時だ。
 
 
今回の参考サイト:テック煮ブログ
AS で別ドメインの画像を読み込むときの注意点CommentsAdd Star
# こちらのサイトの “セキュリティサンドボックス侵害への対応”
 
詳しくは上記サイトを参考にしてもらうとして、
 
とりあえずTwitterのプロフィール画像を読み込むのであれば、
LoaderContext の checkPolicyFile を true にすることで解決。

function loadStart():void
{
	// LoaderContextを準備
	var context:LoaderContext = new LoaderContext(true);

	var loader:Loader = new Loader();
	var req:URLRequest
	= new URLRequest("http://www.example.com/sample.png");

	loader.load(req, context); // 第2引数に context を渡す

	loader.contentLoaderInfo
			.addEventListener(Event.COMPLETE,onLoaded);
}

function onLoaded(e:Event):void
{
	var bmp:Bitmap = Bitmap(e.target.content);
}

 
ご参考までに。