【AS3】「ActionScript3の、こんなときどうするの??」
こんにちは、橋本です。
今日は、自分が普段AS3を書いていて「こんなときどうするの??」と思ったところを中心にいくつか書いみました。
思いついたものから書いていったので、内容はバラバラですが、お役に立てる内容が一つでもあれば幸いです。
では、どうぞー。
Q. イベントリスナーに引数を渡したい。
A. 関数を返すイベントハンドラを指定することで、引数を渡すことができます。
サンプル.
Q. イベントの進行を止めたい。
A. event.stopPropagation()を使います。現在処理されている対象で、イベントの伝達をストップすることができます。
サンプル.
Q. イベントの、currentTargetとtargetの違いが、実はよくわかりません。
A. 大丈夫です。僕は最初はよくわかっていませんでしたw
currentTargetは、イベントを受け取ったオブジェクトで、targetはイベントを発生させたオブジェクトです。
以下のサンプルで、親のボックスをクリックしたときには、両方とも"parent"と表示されますが、子のボックスをクリックしたときには、targetが"child"となり、currentTargetが"parent"となります。これは、子のボックスをクリックしたことで発生したイベントを、親のボックスで受け取っているからです。
サンプル.
Q. オブジェクトのクラス名を知りたい。
A. flash.utils.getQualifiedClassNameメソッドを使うと、フルパスのクラス名を取得できます。純粋にクラス名だけを取りたいときには正規表現を使ったりしてみてくだしい。
サンプル.
Q. 配列にオブジェクトが含まれているか知りたい(PHPでいうところの、in_array)。
A. indexOfメソッドを使います。配列に含まれている場合には、インデックスを返し、無い場合には"-1"を返してくれるので、そこで判定します。
サンプル.
Q. 配列のコピーが欲しい。
A. Arrayの中身をfor文で回して…というのは嘘で、Array.concat()もしくは、Array.slice()を引数無しで呼び出すことで作成可能です。
サンプル.
Q. オブジェクトディープコピーが欲しい。
A. ByteArrayクラスのインスタンスを作成することでディープコピーが可能になるようです。(参考:http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee7.html)リンク先にもありますが、一応cloneメソッドのサンプルを載せておきます。
サンプル.
どうでしょうか。
お役に立てることがひとつでもあれば幸いです。
今日は、自分が普段AS3を書いていて「こんなときどうするの??」と思ったところを中心にいくつか書いみました。
思いついたものから書いていったので、内容はバラバラですが、お役に立てる内容が一つでもあれば幸いです。
では、どうぞー。
Q. イベントリスナーに引数を渡したい。
A. 関数を返すイベントハンドラを指定することで、引数を渡すことができます。
サンプル.
- //
イベントリスナを登録するときに、引数を渡す - addEventListener(MouseEvent.CLICK,
clickHandler("hoge")); - private
function clickHandler(str:String):Function - {
return function (event:MouseEvent):void {trace(str)}; - }
Q. イベントの進行を止めたい。
A. event.stopPropagation()を使います。現在処理されている対象で、イベントの伝達をストップすることができます。
サンプル.
- public
class test extends Sprite - {
public function test() { var obj:Object = {hoge: "hoge"}; var sprite:Sprite = new Sprite(); sprite.name = "parent"; this.addChild(sprite); sprite.graphics.beginFill(0xFFFF00); sprite.graphics.drawRect(0, 0, 100, 100); sprite.addEventListener(MouseEvent.CLICK, clickHandler1); var sprite2:Sprite = new Sprite(); sprite2.name = "child"; sprite.addChild(sprite2); sprite2.graphics.beginFill(0x00FF00); sprite2.graphics.drawRect(0, 0, 50, 50); sprite2.addEventListener(MouseEvent.CLICK, clickHandler2); } private function clickHandler1(event:MouseEvent):void { trace("parent"); } private function clickHandler2(event:MouseEvent):void { trace("child") event.stopPropagation(); } - }
Q. イベントの、currentTargetとtargetの違いが、実はよくわかりません。
A. 大丈夫です。僕は最初はよくわかっていませんでしたw
currentTargetは、イベントを受け取ったオブジェクトで、targetはイベントを発生させたオブジェクトです。
以下のサンプルで、親のボックスをクリックしたときには、両方とも"parent"と表示されますが、子のボックスをクリックしたときには、targetが"child"となり、currentTargetが"parent"となります。これは、子のボックスをクリックしたことで発生したイベントを、親のボックスで受け取っているからです。
サンプル.
- public
class test extends Sprite - {
public function test() { var obj:Object = {hoge: "hoge"}; var sprite:Sprite = new Sprite(); sprite.name = "parent"; this.addChild(sprite); sprite.graphics.beginFill(0xFFFF00); sprite.graphics.drawRect(0, 0, 100, 100); sprite.addEventListener(MouseEvent.CLICK, clickHandler1); var sprite2:Sprite = new Sprite(); sprite2.name = "child"; sprite.addChild(sprite2); sprite2.graphics.beginFill(0x00FF00); sprite2.graphics.drawRect(0, 0, 50, 50); } private function clickHandler1(event:MouseEvent):void { trace("currentTarget:" + event.currentTarget.name + ", target:" + event.target.name); } - }
Q. オブジェクトのクラス名を知りたい。
A. flash.utils.getQualifiedClassNameメソッドを使うと、フルパスのクラス名を取得できます。純粋にクラス名だけを取りたいときには正規表現を使ったりしてみてくだしい。
サンプル.
- var
sprite:Sprite = new Sprite(); - trace(getQualifiedClassName(sprite));
// flash.display::Sprite - trace(getQualifiedClassName(sprite).match(/::(.*)/)[1]);
// Sprite
Q. 配列にオブジェクトが含まれているか知りたい(PHPでいうところの、in_array)。
A. indexOfメソッドを使います。配列に含まれている場合には、インデックスを返し、無い場合には"-1"を返してくれるので、そこで判定します。
サンプル.
- public
static function inArray(item:*, arr:Array):Boolean - {
return arr.indexOf(item) != -1; - }
Q. 配列のコピーが欲しい。
A. Arrayの中身をfor文で回して…というのは嘘で、Array.concat()もしくは、Array.slice()を引数無しで呼び出すことで作成可能です。
サンプル.
- var
arr:Array = [1, 2, 3]; - var
arr2:Array = arr.concat(); - for
each (var num:Number in arr2) - {
trace(num); - }
Q. オブジェクトディープコピーが欲しい。
A. ByteArrayクラスのインスタンスを作成することでディープコピーが可能になるようです。(参考:http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee7.html)リンク先にもありますが、一応cloneメソッドのサンプルを載せておきます。
サンプル.
- import
flash.utils.ByteArray; - function
clone(source:Object):* - {
var myBA:ByteArray = new ByteArray(); myBA.writeObject(source); myBA.position = 0; return(myBA.readObject()); - }
どうでしょうか。
お役に立てることがひとつでもあれば幸いです。
Twitter-APIを使ってみました
2010/02/05
こんにちは、中川です。
今週のPHPプロのメルマガで、
「現在発売中の日経ソフトウエア2010年3月号に記事を書きました!Web APIに
ついての特集で、今はやりのTwitterと、Google ChartのAPIを活用したPHPの
アプリケーションを作成する内容になっています。ぜひ読んでみてください。
皆さまのご意見やご感想をお待ちしています! By Katsuhiro Ogawa」
こんな序文を見つけました。
ブログネタに困っていた時だったのもあり、
また、現在担当しているプロジェクトで使うかもしれないということで、
TwitterのAPIをちょっと触ってみました。
今週のPHPプロのメルマガで、
「現在発売中の日経ソフトウエア2010年3月号に記事を書きました!Web APIに
ついての特集で、今はやりのTwitterと、Google ChartのAPIを活用したPHPの
アプリケーションを作成する内容になっています。ぜひ読んでみてください。
皆さまのご意見やご感想をお待ちしています! By Katsuhiro Ogawa」
こんな序文を見つけました。
ブログネタに困っていた時だったのもあり、
また、現在担当しているプロジェクトで使うかもしれないということで、
TwitterのAPIをちょっと触ってみました。
PHPの名前空間と主要フレームワークの対応について
2010/02/04
こんにちは、小川です。
以前、「モダンPHP勉強会」でPHP 5.3から採用された名前空間について話したことがあるのですが、今日はその時の内容の中から、主要フレームワークの名前空間の対応に関するお話しについてご紹介したいと思います。
以前、「モダンPHP勉強会」でPHP 5.3から採用された名前空間について話したことがあるのですが、今日はその時の内容の中から、主要フレームワークの名前空間の対応に関するお話しについてご紹介したいと思います。
HDDのフォーマットには時間がかかるんです
2010/02/01
こんばんは岡本です。
最近、日常記事が少ないとのお声を頂いたため、
とある休日の日常のお話。
地元のワイン専門店さんに、
NASの導入をしに行った時の、ごくごくありふれた平和な休日のお話を書きつづりたいと思います。
最近、日常記事が少ないとのお声を頂いたため、
とある休日の日常のお話。
地元のワイン専門店さんに、
NASの導入をしに行った時の、ごくごくありふれた平和な休日のお話を書きつづりたいと思います。
GoogleChrome に Firebug extension をいれてみた + よさげなextensionまとめ
2010/01/26
こんにちは。松田です。
システムの開発時にはFirefox+Firebugが欠かせなくなっていますが、最近Firefoxがクラッシュしまくる現象に悩まされてます。セーフモードで起動しようがFirefox自体インストールし直そうが、ちょっと使っているとすぐにクラッシュ。
いい加減Firefoxに愛想がつきてきた・・・けどFirebug無いと開発できない。ChromeとかでFirebugっぽいこと出来ないかなぁ・・・、と検索してみたらFirebug Liteエクステンションなるものを発見。さっそく入れてみました。
システムの開発時にはFirefox+Firebugが欠かせなくなっていますが、最近Firefoxがクラッシュしまくる現象に悩まされてます。セーフモードで起動しようがFirefox自体インストールし直そうが、ちょっと使っているとすぐにクラッシュ。
いい加減Firefoxに愛想がつきてきた・・・けどFirebug無いと開発できない。ChromeとかでFirebugっぽいこと出来ないかなぁ・・・、と検索してみたらFirebug Liteエクステンションなるものを発見。さっそく入れてみました。
PHPでコマンドライン・アプリケーションを簡単に作成する
2010/01/20
こんにちは、小川です。
本日は、PHPで簡単にコマンドライン・アプリケーションを作成できるライブラリをご紹介します。
(本日ご紹介するライブラリは実際には開発途中のものでドキュメントなども存在しません。こういうものがある、程度でとらえていただければ幸いです。)
本日は、PHPで簡単にコマンドライン・アプリケーションを作成できるライブラリをご紹介します。
(本日ご紹介するライブラリは実際には開発途中のものでドキュメントなども存在しません。こういうものがある、程度でとらえていただければ幸いです。)



最近のコメント