タグ

サンプルとActionScript3に関するmasakuma0812のブックマーク (40)

  • 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] 距離は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] 配列のインデックスを式で計算したときは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] データ型の変換はキャストより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] パフォーマンス向上のヒント

    12月4日土曜日に開かれたFITC Tokyo 2010で、Mike Chambers氏は「Flashで作成する高性能モバイルコンテンツ」と題するプレゼンテーションをされました。その中で使われたスライドは、多くがすでに公開されているFITC Amsterdam 2010のPDFと共通するようです。 そこで、とくにFlashコンテンツのパフォーマンス向上に関わる部分を、筆者の興味にしたがって若干の加筆・補正も含みつつ抜出してみました。なお、ActionScript 3.0におけるパフォーマンス向上の基については「ActionScript 3.0におけるパフォーマンス向上のヒント」をご参照ください。 *ページ番号は、Mike Chambers氏のPDFによる。 レンダリング(p.31、34) ハードウェア合成のレンダリングはDisplayObjectに使われる ソフトウェアレンダリングは画面

    [AS3] パフォーマンス向上のヒント
  • [AS3] Observerパターンのサンプルプログラム

    オブジェクト指向プログラミングにおけるデザインパターンに、「Observerパターン」があります。対象オブジェクトの状態が変わるごとに、その情報を必要なインスタンス(Observer)に送る仕組みです。Javaの例をActionScript 3.0に書替えてみましょう。今回は、デザインパターンの解説書として定評のある結城浩著『Java言語で学ぶデザインパターン入門』のサンプルプログラムを題材とします[*1]。 Observerパターンは、出版−購読型モデルとも呼ばれます。メールマガジンに登録して、その配信を受けるのと似た仕組みです。したがって、配信する側(Generator)と受取る側(Observer)のふたつの役割が必要になります。ActionScript 3.0のクラス設計では、インターフェイスで仕様を定めます。 01 配信側クラスの仕様 ー インターフェイスINumberGener

    [AS3] Observerパターンのサンプルプログラム
  • Flashで画像処理するときのコツ – Rest Term

    注意) レンダリングの高速化とは別レイヤーの話になります。 去年の記事でAPIレベルの考察はしていますが、今回はもう少し踏み込んで考えてみます。 get/setVector() vs get/setPixels() その前に BitmapData.getVector() と BitmapData.getPixels() のシグネチャを再掲。 両APIともピクセルデータを一次元のコンテナに詰め込むメソッドです。 getPixels(rect:Rectangle):ByteArray ピクセルデータの矩形領域からバイト配列を生成します。 getVector(rect:Rectangle):Vector.<uint> ピクセルデータの矩形領域からベクター配列を生成します。 速度を比較すると get/setVector() の方が高速です。 が、 重要なのはAPIの実行速度ではなく、 「取得したデ

    Flashで画像処理するときのコツ – Rest Term
  • [AS3] 連結リストとVectorによるエレメントの追加と削除

    投稿者:野中 文雄 | 投稿日:2010.10.12 | [AS 3][ActionScript][Tips][野中ゼミ] 「連結リスト」(linked list)はObjectとArrayクラスの中間のような仕組みで、エレメントには順序があるもののインデックス番号をもちません。その処理の速さを、Vectorクラスと比べてみます。 連結リストの各エレメントは、その前後のエレメントの参照をもちます。そのため、順序はあってもインデックス番号がないのです。連結リストの仕組みについて詳しくは、「連結リスト(linked list)」をお読みください。 ここでは、エレメントを最後に加える操作と先頭からエレメントを除く操作について、連結リストとVectorクラスを比べてみます。Vectorクラスのメソッドでは、push()とshift()です。テスト用のスクリプトをwonderflに掲げました。エレメ

    [AS3] 連結リストとVectorによるエレメントの追加と削除
  • [AS3] インスタンスをドラッグして回すクラス定義

    投稿者:野中 文雄 | 投稿日:2010.10.01 | [AS 3][ActionScript][サンプル][野中ゼミ] インスタンスをドラッグして回したり、マウスボタンを放して滑らせるアニメーション表現をクラス定義しました。[ライブラリ]のMovieClipシンボルに[クラス]として設定すれば、インスタンスのドラッグ&ドロップでそのようなインタラクティブな動きをします。 ドラッグ&ドロップするMovieClipシンボルを作成してタイムラインに置き、Flashムービー(FLA)ファイルを保存します(ファイル名は任意)。 ActionScript (AS)ファイルDragRotater.asをFLAファイルと同じ場所に保存します。 [ライブラリ]のシンボルを選んで[シンボルプロパティ]ダイアログボックスを開き([ライブラリ]パネルのオプションメニュー)、[クラス]に「DragRotater

    [AS3] インスタンスをドラッグして回すクラス定義