タグ

ActionScript3に関するmasakuma0812のブックマーク (45)

  • drawscri.pt

    This domain may be for sale!

  • [AS3] 矢印キーでインスタンスを移動させる

    投稿者:野中 文雄 | 投稿日:2011.08.27 | [AS 3][ActionScript][サンプル][野中ゼミ] MovieClipインスタンスを矢印キーで上下左右に動かす例のご紹介です(図001)。ただし、少しひねりを加えて、キーを押し続けたときに入力が繰返される速さではなく、フレームレートで進むようにします。 図001■MovieClipインスタンスを矢印キーで上下左右に動かす お題はFLASH-japanの「fpsに同期したmcの移動」で上がったものです。もっとも、この回答ではつくりを単純にするために、乱暴なスクリプトになっています。そこを少し整えて、簡単な説明を加えます。 01 ふたつの課題と繰返されるキー入力の扱い まず、キー入力の基的な扱いについては、gihyo.jp連載「ActionScript 3.0で始めるオブジェクト指向スクリプティング」第13回「キーボード

    [AS3] 矢印キーでインスタンスを移動させる
  • [AS3] ふたつの数値の最大値・最小値を得るにはMathクラスより条件演算子?:の方が速い

    条件演算子に書替えた方が速いのは、大きくふたつ理由があると考えられます。第1は、Math.max()やMath.min()メソッドには、いくつでも引数が渡せることです。つまり、引数の数を確かめ、すべての大小を調べることが求められます。そのため、数値はふたつと決めて、それらの大小を比べる?:演算子の処理の方が速くなるのです。 任意の数の引数から最大値を返す関数は、たとえばつぎのスクリプト001のように定められます(不定数の引数定義については、「...(rest)パラメータ定義キーワード」参照)。しかし、この関数の処理は、引数を不定にしてしまったため、Math.max()メソッドと比べて決して速くありません(後掲テスト001参照)。 スクリプト001■任意の数の引数から最大値を取出す関数 function xMax(...values):Number { var nLength:uint =

    [AS3] ふたつの数値の最大値・最小値を得るにはMathクラスより条件演算子?:の方が速い
  • [AS3] 距離はPointやVector3DクラスのメソッドよりMath.sqrt()と三平方の定理で求める方が速い

    トップ > ActionScript > [AS3] 距離はPointやVector3DクラスのメソッドよりMath.sqrt()と三平方の定理で求める方が速い PointやVector3Dクラスには、座標と座標の間の距離を求める同じ名前の静的メソッドdistance()があります。しかし、速さを稼ぐにはこれらのメソッドでなく、Math.sqrt()メソッドを用いて三平方の定理で導く方がお得です。 Point.distance()とVector3D.distance()は、ともに座標と座標の間の距離を求める静的メソッドです。引数には座標が納められたPointまたはVector3Dインスタンスをふたつ渡し、Number型の距離が返されます。 Point.distance(Pointインスタンス0, Pointインスタンス1) Vector3D.distance(Vector3Dインスタンス0

    [AS3] 距離はPointやVector3DクラスのメソッドよりMath.sqrt()と三平方の定理で求める方が速い
  • [AS3] Text Layout Framework(TLF)でハマらないために

    Flash Professional CS5から備わったText Layout Framework(TLF)は、テキストにInDesignのような細かな設定が加えられます。他方、Text Layout Frameworkのライブラリがデフォルトではランタイム共有ライブラリから読込まれるため、インスタンスは独自の生成過程を経ます。タイムラインに[TLFテキスト]を置いただけで、思わぬ結果になることもありますので注意が必要です。 稿では細かな説明は省き、フォーラムやblog記事などの紹介にとどめます。詳しくは、それらのトピックや記事をお読みください。また、Text Layout Frameworkの基礎については、つぎのgihyo.jp連載「ActionScript 3.0で始めるオブジェクト指向スクリプティング」の解説をご参照ください。 第39回「TLFTextFieldクラスを使う」 第

    [AS3] Text Layout Framework(TLF)でハマらないために
  • [AS3] ifと静的メソッドとコメント ー [自動フォーマット] vol.4

    久しぶりの[自動フォーマット]ネタです(図001)。Flash Professional CS5で確かめています。 図001■ifステートメント内の静的メソッド呼出しにコメントを加える すると、ifステートメントブロックの閉じ括弧}を、ひとつ余分に加えてくれます(図002)。 図002■ifステートメントステートメントブロックの閉じ括弧}が余分に加わる もちろん、括弧の対応が合わなくなります。もう一度[自動フォーマット]を行えば、シンタックスエラーを告げる警告が表れます(図003)。このパターンは、以前にもありました。ほとんど因縁をつけられているようなものです。 図003■警告のダイアログボックスがシンタックスエラーを告げる この記事にコメントを書く 記事に対するテクニカルな質問はご遠慮ください(利用規約)。 名前(必須): メールアドレス: URL: この情報を登録しますか? コメント:

    [AS3] ifと静的メソッドとコメント ー [自動フォーマット] vol.4
  • [AS3] 配列のインデックスを式で計算したときはuint型で渡す

    投稿者:野中 文雄 | 投稿日:2011.02.19 | [AS 3][ActionScript][Tips][野中ゼミ] 配列やVectorインスタンスのエレメントを扱うとき、インデックス番号を式で与えることがあります。その場合、配列アクセス演算子[]に式を直接書込むのでなく、uint型に変換(キャスト)するか、式の値はuint型の変数に入れたうえでその変数を渡すようにしましょう。その方が、書く手間は少し増えても、処理が速まります。 [1] 配列アクセス演算子[]にインデックスとして式を直接書込んだとき、その式の値のデータ型は決まっていません。この場合、エレメントの扱いが遅くなるようです。 var my_array:Array = [0, 1, 2]; var i:uint = 0; var element:int = my_array[i + 1]; // 配列アクセス演算子に式を直接

    [AS3] 配列のインデックスを式で計算したときはuint型で渡す
  • [AS3] Vectorインスタンスには長さを定めた方がよい

    投稿者:野中 文雄 | 投稿日:2011.02.13 | [AS 3][ActionScript][Tips][野中ゼミ] Adobeのドキュメント「VectorクラスとArrayクラス」は、Vectorインスタンスには予め長さ(Vector.lengthプロパティ)を定めた方がパフォーマンスはよいと説明します。ただ、日語の意味がわかりにくいように思われます。 Vectorのサイズが時間よりも先に指定されない場合、Vectorの容量が不足すると、サイズが増えます。Vectorのサイズが増えるたびに、メモリの新しいブロックが割り当てられます。Vectorの最新の内容がメモリの新しいブロックにコピーされます。データを余分に割り当てて複製することにより、パフォーマンスに影響があります。 英語の原文はつぎのとおりです。Vector(インスタンス)の"size"というのは、コンストラクタメソッドの

    [AS3] Vectorインスタンスには長さを定めた方がよい
  • [AS3] キーボードのキー操作をVectorオブジェクトで扱う

    投稿者:野中 文雄 | 投稿日:2011.02.14 | [AS 3][ActionScript][Tips][野中ゼミ] 「キーボードのキー操作を扱うふたつの手法」では、タイムラインに配置したMovieClipインスタンス(my_mc)を、キーボードの矢印キーで上下左右に動かしてみました(再掲図001)。この同じお題をVectorクラスで整えてみましょう。 図001■ タイムラインに配置したMovieClipインスタンスを矢印キーで上下左右に動かす(再掲) 01 キーコードをインデックスとしてVectorインスタンスに操作の情報を与える 矢印キーのキーコードは37〜40です(gihyo.jp「ActionScript 3.0で始めるオブジェクト指向スクリプティング」第13回「キーボードによる操作」p.2の表2「Keyboardクラスの矢印キーの定数」参照)。しかし、Vectorインスタン

    [AS3] キーボードのキー操作をVectorオブジェクトで扱う
  • [AS3] 条件演算子?:はいつ使うとよいか

    投稿者:野中 文雄 | 投稿日:2011.02.09 | [AS 3][ActionScript][Tips][野中ゼミ] 条件演算子?:の処理は、ifステートメントで書くこともできます。それぞれどのように使い分けたらよいでしょうか。稿では、処理の速さを比べてみます。 *なお、この記事の英語版はJActionScriptersに載せています。 The English version of this article is posted to JActionScripters. 条件演算子?:は、ふたつの式(オペランド)から条件に合った値を返します。したがって、値を選択して代入できます。ifステートメントと比べて処理の仕方が限定されている分、内部的に最適化されやすいと考えられます[*1]。 [条件演算子の例] myVariable = (condition) ? valueA : value

    [AS3] 条件演算子?:はいつ使うとよいか
  • [AS3] 配列を初期化するには

    投稿者:野中 文雄 | 投稿日:2011.01.26 | [AS 3][ActionScript][Tips][野中ゼミ] 配列つまりArrayインスタンスをつくるには、つぎのふたつの書き方があります。どちらがよいのでしょうか。 var constructed_array:Array = new Array(); var literal_array:Array = []; どちらにしたところで、大きな違いはありません。けれど、気分によって変えるのはやめましょう。統一はしないと、見にくいです。だとすると、やはりどちらがお得なのかは気にかかります。 コンストラクタとリテラル ActionScript 3.0では、new演算子に続けて呼出すクラスと同名のメソッドでインスタンスをつくるのがお決まりです。このメソッドを「コンストラクタ」と呼びます。他方で、数値や文字列は値を直接書いてしまうのが普通で

    [AS3] 配列を初期化するには
  • [AS3] 3次元回転の軸をベクトルの外積で求める

    投稿者:野中 文雄 | 投稿日:2011.01.22 | [AS 3][ActionScript][Tips][野中ゼミ] 3次元空間のオブジェクトをマウスポインタの位置に応じて回すときの考え方です(図001)。Matrix3Dクラスで座標変換する場合、水平方向と垂直方向それぞれについて回転を加える方法がひとつあります。今回はもうひとつのやり方として、水平・垂直合わせてベクトルの外積により回転軸を求めてみます。 図001■四方に置いた面を上下左右に回す 矩形の画像で四方を囲み、上下左右に回す例は、gihyo.jp連載「ActionScript 3.0で始めるオブジェクト指向スクリプティング」第38回「z座標値に応じて重ね順を変える」で解説しました。Matrix3D.appendRotation()メソッドを用いて、水平と垂直それぞれの回転を加える前者の考え方にしたがっています。このサンプル

    [AS3] 3次元回転の軸をベクトルの外積で求める
  • [AS3] 直線で閉じた図形を描く

    投稿者:野中 文雄 | 投稿日:2011.01.20 | [AS 3][ActionScript][Tips][野中ゼミ] Graphicsクラスの描画メソッドを使うと、Spriteなどのインスタンスに直線が引けます。そこで、頂点座標にしたがって多角形などの閉じた図形が描ける関数を定義してみましょう(図001)。さほど難しいスクリプトではありません。けれど、あえてややこしく書いてしまうことも少なくないようです。そうならないためのちょっとしたコツをご紹介します。 図001■閉じた図形を描く MovieClipやSpriteインスタンスに描画するためには、まずそのターゲットとなるGraphicsオブジェクトをSprite.graphicsプロパティから取出します。つぎに、参照したGraphicsオブジェクトに対して、Graphicsクラスの描画メソッドを用いて線描します。 線の始まりはGrap

    [AS3] 直線で閉じた図形を描く
  • [AS3] ふたつの配列を連結する

    投稿者:野中 文雄 | 投稿日:2011.01.12 | [AS 3][ActionScript][Tips][野中ゼミ] ふたつの配列を連結するには、Array.concat()メソッドを用います。ところが、Grant Skinner氏がtwitterで面白い手法を紹介していました。JavaScriptについて書かれたものの、ActionScript 3.0でも使えます。 それはひとつの配列(arr1)に対してFunction.apply()メソッドによりArray.push()メソッドを適用し、もうひとつの配列(arr2)は第2引数として渡してしまうというものです。すると、初めの配列に対してArray.push()メソッドが呼出され、ふたつ目の配列エレメントがその引数に渡されます。したがって、ふたつの配列が連結されるのです。 arr1.push.apply(arr1, arr2); S

    [AS3] ふたつの配列を連結する
  • [AS3] キーボードのキー操作を扱うふたつの手法

    投稿者:野中 文雄 | 投稿日:2010.12.22 | [AS 3][ActionScript][Tips][野中ゼミ] キーの押し下げ操作は、InteractiveObject.keyDownイベント(定数KeyboardEvent.KEY_DOWN)で扱います。リスナー関数が引数に受取るイベントオブジェクト(KeyboardEvent.keyCodeプロパティ)から押したキーのコードがわかりますので、その整数値に応じて処理を振分けます。 定石といえるのは、キーコードの整数値を条件判断で切り分けることです。もっとも、キーコードはすべて値がユニークですので、配列との相性がよいです。処理したいキーコードのインデックスに、必要な情報を納めると、条件判定が要らなくなります。 01 キーコードを条件判定で振分ける このたびのお題として、タイムラインに配置したMovieClipインスタンス(my_

    [AS3] キーボードのキー操作を扱うふたつの手法
  • F-site | [AS3] 全角(2バイト)と半角(1バイト)を区別したバイト数の計算

    02 ByteArrayクラスを使う Colin Moock氏は「GET NUMBER OF BYTES IN A UTF-8 STRING」と題するblog記事で、ByteArrayオブジェクトにより文字列のバイト数が得られることを紹介されました。さらに、永井勝則氏がFLASH-japanへの投稿で、そのスクリプトに手を加えられています。ByteArray.lengthプロパティでバイト数を求めるやり方です(スクリプト002)。半角カナは1バイトと数えられます。 trace(getBytesTotal_ByteArray("くぁwせdrftgyふじこlp"));   // 出力: 21 スクリプト002■ByteArrayクラスでバイト数を調べる function getBytesTotal_ByteArray(_str:String):uint { var byteArray:Byte

    F-site | [AS3] 全角(2バイト)と半角(1バイト)を区別したバイト数の計算
  • [AS3] ハッピーマンデーを求める

    投稿者:野中 文雄 | 投稿日:2010.12.14 | [AS 3][ActionScript][Tips][野中ゼミ] ハッピーマンデーのように、ある月の何番目の曜日と指定して、日付を求めてみます。おまけに、最後の何曜日と後ろから数えられるようにもしましょう。 つぎのような関数xGetNthDay()を定義します。戻り値は指定した曜日のDateオブジェクトです。月はDateクラスと異なり1月を1から始めます。他方、序数(何番目)は第1を0とし、最後は-1から負の数で指定します。 xGetNthDay(年:uint, 月:uint, 序数:int = 0, 曜日:int = 0):Date スクリプトの考え方は、つぎのとおりです。月内に該当する日付がないとき(たとえば第6月曜日)は、nullを返すことにします。 月初の曜日を調べる その月の求めたい曜日の最初(第1)の日付を知る 除数にし

    [AS3] ハッピーマンデーを求める
  • [AS3] 文字列の検索・置換は正規表現よりStringクラスのメソッドを使う方が速い

    投稿者:野中 文雄 | 投稿日:2010.12.10 | [AS 3][ActionScript][Tips][野中ゼミ] 文字列の検索・置換は、String.replace()メソッドに正規表現(RegExpクラス)を使うと簡単です(スクリプト001)。なお、正規表現による文字列の検索・置換については、「正規表現で文字列を扱う」をお読みください。 スクリプト001■String.replace()メソッドと正規表現で文字列を検索・置換 var test_str:String = "すもももももももももももいろいろ"; var result_str:String = test_str.replace(/もも/g, "みみ"); trace(result_str); // 出力: すみみみみみみみみみみもいろいろ もっとも、処理の速さは、Stringクラスのメソッドを組合わせて書いたスクリプ

    [AS3] 文字列の検索・置換は正規表現よりStringクラスのメソッドを使う方が速い
  • [AS3] データ型の変換はキャストよりas演算子が速い

    投稿者:野中 文雄 | 投稿日:2010.12.09 | [AS 3][ActionScript][Tips][野中ゼミ] オブジェクトを異なるデータ型に変換したいとき、一般には「クラス(変換するオブジェクト)」のかたちでキャストします。けれど、as演算子を使う方が処理は速いようです。 たとえば、Event.targetプロパティは、Objectで型指定されています。参照しているのが実際にはMovieClipだったとして、MovieClipクラスのプロパティやメソッドを使いたい場合にはキャストします。 var _mc:MovieClip = MovieClip(eventObject.target); データ型の変換は、as演算子を使ってもできます。そして、処理はこちらのほうが速いようです(wonderfl「Type casting comparison」参照)。 var _mc:Movi

    [AS3] データ型の変換はキャストよりas演算子が速い
  • [AS3] XORマジック

    投稿者:野中 文雄 | 投稿日:2010.12.08 | [AS 3][ActionScript][Tips][野中ゼミ] スクリプト001■ビットごとの排他的論理和演算子^で変数の整数を入替える var a:int = 12345; var b:int = 67890; trace(a, b); // 出力: 12345 67890 a = a ^ b; b = a ^ b; a = a ^ b; trace(a, b); // 出力: 67890 12345 ビットごとの排他的論理和(bitwise exclusive or)演算子^で、ふたつの変数の整数を他の変数は使わずに入替えることができます。 演算子^はふたつの計算対象(オペランド)の整数を2進数で扱い、各桁のどちらか一方のみが1のとき1、そうでないときは0にします。「ビットごと」というのは、繰り上がりや繰り下がりがなく、それぞ

    [AS3] XORマジック