ActionScriptライブラリTweenerでBlurの使い方

ActionScriptのトゥイーン制御ライブラリTweenerの使い方の補足です。

ぼかし、ブラーをTweenさせようと思ってもエラーが出る。

## [Tweener] Error: The property '_Blur_blurX' doesn't seem to be a normal object property of [object MovieClip] or a registered special property.
## [Tweener] Error: The property '_Blur_blurY' doesn't seem to be a normal object property of [object MovieClip] or a registered special property.

Tweenerライブラリを読み込む「import caurina.transitions.Tweener;」この記述の下に、ぼかしフィルターを適応させるライブラリをimportさせる記述書いて、初期化をする関数を実行させる必要があります。

//▼ぼかしフィルターのimport
import caurina.transitions.properties.FilterShortcuts;
//▼ぼかしフィルターの初期化
FilterShortcuts.init();
//▼ぼかしTween
Tweener.addTween([instance],{alpha:1,
					transition:'easeOutQuint',
					time:5,_Blur_blurX:20,
					_Blur_blurY:20})

サンプルサイトなどでコピペしてエラーが出た方は、これの記述があるか見てみてくださいー。

AS3で文字コードのShift_JISを設定するSystem.useCodePageのエラー

外部テキストファイルやCSV、XMLファイルをFlashに読み込んで表示する。そんなコンテンツはいっぱいあると思いますが、shift-jisの場合は日本語が正しく表示されないので「System.useCodepage」というおまじないを書きます。

1119: 未定義である可能性が高いプロパティ useCodepage に静的型 Class の参照を使用してアクセスしています。

ActionScript3.0でこんなエラーが出たら、「page」の「p」を大文字に変えてみてください。たったこれだけではまってしまいました。。orz

//as3
System.useCodePage = true;
//as2以下
System.useCodepage = true;

AS3で入れ子になったMovieClipからrootの関数を実行する方法

今度は久々にFlashに関して

AS2までは、入れ子になったMovieClipから一番上にあたる「_root」に対して、そこのタイムラインに書かれているScriptの関数を叩く際には、「_root.hoge();」と書けば、「function hoge(){}」関数が実行できました。

AS3になって、XもYもrootもアンダーバー「_」をつけなくなり、入れ子になったMovieClipからアンダーバーのない「root.hoge();」で関数を実行できるのかとおもったっら違うみたいでした。。。今更感がいなめないですが、、メモします。

MovieClip(root).hoge();

ActionScript3.0の場合は、このように書くとhoge関数が実行できました。rootも1つのMovieClipですよー!っていうことですね。もう忘れないw

補足

この方法でアクセスできなかったパターンがありました。

TypeError: Error #1034: 強制型変換に失敗しました。flash.display::Stage@4e9df99 を flash.display.MovieClip に変換できません。

このようなエラーが出てしまい、タイムラインに書いている関数にアクセスすることができませんでした。条件は下記のとおり。
1.リンケージでクラスを作ってmyMcにする。
2.new myMc();をstage.addChild();する。
3.作ったクラスの再生途中でMovieClip(root).hoge();関数が実行できない。

var mc:MovieClip = new myMc();
stage.addChild(mc);
//▼myMcの中にある関数でここを実行
function hoge():void{
	trace("ほげ");
}

原因は、addChildする場所に問題があるみたいです。この例ではstageに対してaddChild();していますが、メインのタイムラインに書いてある関数はrootに対してアクセスすることができるので、stageはMovieClipに変換できません。というアラーとっぽいです。rootはタイムラインを含むでっかいMovieClipなので、リンケージで設定したクラスに書かれている関数でメインのタイムラインに書いているfunctionにアクセスしようとするには、newしたクラスのMovieClipはMovie(root)にaddChildしてあげなければなりません。

var mc:MovieClip = new myMc();
MovieClip(root).addChild(mc);
//▼myMcの中にある関数でここを実行
function hoge():void{
	trace("ほげ");
}

こうかくことによって、hoge();にアクセスすることができます。もうお気づきかと思いますが、addChild();の前に何も書かなくても大丈夫です。でも、なんか気持ち悪いですよね。前面背面にアクセスしたいときに、どこにaddChild();したかわからなくなりますよね。その場合は、タイムラインはでっかいMovieClipなんで、自分自身を指す「this」と書いてあげるとわかりやすいかもしれません。

var mc:MovieClip = new myMc();
this.addChild(mc);
//▼myMcの中にある関数でここを実行
function hoge():void{
	trace("ほげ");
}

説明がながくなっちゃいましたが、ようはstageにaddChildしなければ大丈夫です。

amazonで割引されたDVDだけをつぶやくbotを作りました


激安!割引DVD
http://twitter.com/dvd_discount

amazonにはたくさんの商品があって、なかには割引価格が90%ちかい激安商品もあります。特にDVDなどたくさんあり、中古をふくめると1円から購入できるものもあります。

これらはどうやってみつけるのか。リコメンドされなければ発見すらできず、こういうのは能動的に見つけるのは難しいので、Twitterのbotをつくって受動的に発見してみようと思ってみました。

なにか面白いDVDの発見にもなりますし、ましてやめちゃ安いとなると買ってみたくなりますねー!
興味があるかたは是非フォローしてやってください!

ちなみにカテゴリーは、「外国映画」「日本映画」「アニメ」「ミュージック」「テレビドラマ」「ドキュメンタリー」「お笑い・バラエティ」がランダムで、アダルト商品は出ないようにしています。これらのカテゴリーごとにわけたほうがいいのかもしれませんんけどねー。

激安!割引DVD
http://twitter.com/dvd_discount

ActionScript2とActionScript1で正規表現が使えるライブラリ

だいぶごぶさたしてました。。。最近はJavaScriptやCSSを触ることが増えてきましたけど、久しぶりにFlashについて書こうとおもいます。ActionScript3になってから正規表現がサポートされましたが、ActionScript2、1では使うことができません。それを使えるようにするライブラリを見つけたので簡単に紹介します。

ライブラリ配布サイト:http://www.jurjans.lv/flash/RegExp.html
ここのページで、まず最初にはまってしまいましたのが、AS1とAS2で使用するライブラリの種類が違いました。
AS1用:RegExp.zip
AS2用:RegExp_JLott.zip
このzipファイル名を探してダウンロードしてください。解凍したzipファイルの中にあるasファイルをドキュメントルートに設置して、スクリプトで読み込めるようにしておいてください。

RegExサンプルコード AS2

import RegExp;
var regexp = new RegExp("([^?]*)");//←括弧のなかに正規表現パターンを入れる
result1 = regexp.exec("ここにテキストを入れる");//パターンにマッチした部分を摘出
result2 = "検索する文字列".replace(regexp,"置き換えたいテキスト");//パターンにマッチした置き換え

いろんな参考ページをみたときに、new RegExpの第2引数になんらかのStringを入れていましたが、いまいち用途もわからず、なくても正しく動きましたので今回は省きました。

RegExサンプルコード AS1

#include "RegExp.as"
var regexp = new RegExp("([^?]*)");//←括弧のなかに正規表現パターンを入れる
result1 = regexp.exec("ここにテキストを入れる");//パターンにマッチした部分を摘出
result2 = "検索する文字列".replace(regexp,"置き換えたいテキスト");//パターンにマッチした置き換え

正規表現というのはとても便利でいいんですが、僕はいまいち使いこなせていないです。。^^;

それではまたー