2008年6月の記事

Flexのコーディング規約

Adobe Edge: 2008年6月 コーディングスタンダードのススメ

こんな記事が上がってきて、そういえばまだコーディング規約に目を通していなかったなと遅まきながらチェックしてみる。

基本的にJavaスタイルベースで書けばだいたい大丈夫だと把握。気になったところだけメモ。

命名規則

名前は略さないのが基本だが、いくらかお決まりの略称が用意されている。

* acc for accessibility, as in ButtonAccImpl
* auto for automatic, as in autoLayout
* eval for evaluate, as in EvalBindingResponder
* impl for implementation, as in ButtonAccImpl
* info for information, as in GridRowInfo
* num for number of, as in numChildren
* min for minimum, as in minWidth
* max for maximum, as in maxHeight
* nav for navigation, as in NavBar
* regexp for regular expression, as in RegExpValidator
* util for utility, as in StringUtil

頭文字でできた略語は全部大文字にするか全部小文字にするかのどちらか。例えばSWFなら、Swfではなく、SWFかswfにする。ちなみに、AIR(エア)など単語のように読ませるものをacronym、CSS(シーエスエス)のようにアルファベットで読ませるものをinitialismというらしい(Acronym and initialism – Wikipedia)。

アセットのファイル名は小文字で、アンダースコアで区切る(icon_align_left.pngなど)。

アクセサ

getHoge()やsetHoge()ではなくgetter/setterを使う。ただし、getHoge()が計算に時間のかかるメソッドのときは、getterは使わず、findHoge()、calculateHoge()、determineHoge()などと名づけて、遅いメソッドであることを示唆しなさいと。なるほど。

setterの引数にはvalueを使う。

public function set hoge(value:String):void

getter/setterでhogeを扱うとき、保存する変数は_hogeにする。

イベントハンドラ

イベントハンドラの名前はイベントの種類+Handler。mouseDownHandler()など。個人的にはonMouseDown()のほうが好みなんですが。引数にはeventを使う。eなどは駄目。要するにこれが制式。

protected function mouseDownHandler(event:Event):void

サブコンポーネントからイベントが送られるときはプリフィックスにコンポーネント名を入れてアンダースコアで区切る。textInput_focusInHandler()など。

配列その他

Arrayには何の型の要素が入るかコメントで注釈すること。まだ調べてませんが、Flash 10ではVectorを使うところなんでしょう。

var a:Array /* of String */ = [];
function f(a:Array /* of Number */):Array /* of Object */

Arrayの初期化には基本的に配列リテラルを使うこと。サイズを指定するときのみArrayコンストラクタを使う。

× new Array()
× new Array(1, 2, 3)
○ []
○ [ 1, 2, 3 ]
○ new Array(3)

オブジェクトも同様。

× new Object()
○ {}
○ { a: 1, b: 2, c: 3 }

以下、正規表現やXMLなどの例がありますが、要はリテラルで簡潔に書けるときはいつでもそうするようにってことですね。

16進数はx以外大文字で(0xFFCC88)。Numberの定数は必ず小数部まで表記すること(1なら1.0)。ただし、ピクセルの座標は例外。

overrideキーワードはアクセス修飾子の前、static、finalキーワードはアクセス修飾子の後ろに書くこと。

override protected method measure():void
public static const MOVE:String = "move";
public final class BoxDirection

コンストラクタが変数を初期化する引数を取るときは、変数と同じ名前で。

public function MyClass(foo:int, bar:int)
{
    this.foo = foo;
    this.bar = bar;
}

あと、括弧の位置が自分の趣味に合わない。それに、1行80文字制限なんていまどきないんじゃないかと思うんですが……このあたりは丁重にスルーさせてもらうということで。ひとまずこんなところでしょうか。

やっぱりいろいろ議論があるらしい。

2008年6月29日

ブログのデザイン

デフォルトでは寂しいのでどうにかしたいなあ。WordPressのテーマはこうかっこいいものがたくさんあるんですが、

テキスト主体のブログならともかく、スクリーンショットやFlash、ソースコードなどを貼るには、色が強すぎたり、幅が狭かったりと不都合で。ちょっと(かなり)見劣りしても自作するか、既存のテーマを改造するか。

2008年6月17日

特性エディタ(仮称)が欲しい

自動車シミュレータなどと標榜してはいるけれど、挙動については、最低限の力学的な加減速に、ころがり抵抗、空気抵抗、アッカーマンステアリングの幾何的な旋回、それに擬似的にアンダーステアにする程度のことしかやっていなかったりする。もちろんグリップを失うこともない。

ActionScript 2ではこれを秒100回実行するだけでパフォーマンス的にもう限界だったんですが、ActionScript 3では余裕があるのでもう少しきちんとやりたいなと(2Dで、しかもキーボード操作でどこまでやる意味があるのかわからないので、あくまで未定)。

で、いろいろ本を眺めて付け焼刃をつけようとしてるわけですが、本格的にやるなら、走行性能曲線やその他のいろんなグラフを作成してコードから利用するものを作らないといけなさそう。これは挙動のシミュレートだけじゃなく、先のエントリで書いた、ハンドルの応答の調整のようなことにも役に立つんじゃないかと。

さらに、そうした特性エディタ(仮称。もっといい呼び名ないでしょうか)は、ゲーム一般のオブジェクトの制御にも便利なんじゃないだろうか。特に、ゲーム実行中にon the flyでオブジェクトやカメラなどの特性をグラフでコントロールできれば、かなり制作効率が上がって、なおかつゲーム自体のバランスもきちんと調整できるような気がする。いちいち勘で式を何度も書き換えてコンパイルせずに済むし、assert的な異常値の入力の検知も自動的についてくる。どう使うか、どれだけうまく行くかはともかく、そうした仕組みを検討してみる価値はあるように思った。

エディタをどうしよう。何か出来合いのソフトで使えそうなものがあればそれが一番なんですが。単に曲線を描いてデータ化できるだけでなく、数式なども通るやつ。

2008年6月17日

robots.txtでGoogleの検索結果にFlashが表示されないようにする

Googleの検索結果にSWFファイルが直接出てきて、しかもページよりも上位に出てきたりするのが気になっていたので、robots.txtを書いてみました。参考にしたのは「Google の検索結果にコンテンツが表示されないようにする方法」。というより詳しくて答えそのもの。

とにかくFlashをヒットさせたくなければ簡単で、

User-Agent: *
Disallow: /*.swf$

これでサイト内のSWFファイルを全部はじける。*は任意の文字列に一致するワイルドカード、$はURLの末尾に一致。

ついでに、WordPressのログインページがインデックスされていたのもブロック。「WordPress パスワード紛失」でぐぐるとぞろぞろ無数にヒットするあたり、どうなのかと思う。気分の問題として。

Disallow: /blog/wp-login.php

Google ウェブマスターツールの「robots.txt を解析」を使えば、任意のURLが意図通りにブロックされるかチェックできる。

そうしてできたrobots.txtをアップロードしたのが1週間前。robots.txt自体は半日しないうちにbotにアクセスされた。で、今日検索結果からきちんと消えたのを確認。

ちなみに、robots.txtの仕様はまだ標準化されていないらしい。

ところで、ウェブマスターツールの表示を見る限り、やっぱり海外向けコンテンツは.jpドメインじゃないほうがいいのかな。どうもこの「日本」との関連付け、解除できないみたいなんですよね。

Google ウェブマスターツールはいろいろ面白いことが分かるのでサイト持ちの人にはお勧めです。例えば、「こーりん」で検索するとこのサイトが意味もなく上位に出てくること、しかもまったくクリックされないこととか。

2008年6月13日

反響など

CNET.comで記事になったりGizmodo本家で紹介されたりdel.icio.usで300ブックマークされたりして、昨日今日で70000PV雪崩れ込んできてる。でも、”Google Maps meets ‘Grand Theft Auto’”というのはちょっと納得がいかないw

やっぱり運転が難しいのと当たり判定がないのはあちこちで言われてるなあ。当たり判定は写真から道路を判別する手段がないので無理だと思う。どこかの偉い人に訊けば何か教えてくれるかもしれないけれど、さすがに、立体交差があったり、ビルが道路に被っていたり、鈴鹿サーキットが雲に覆われていたりしていてはどうしようもないんじゃないかな(この鈴鹿の雲どうにかならないでしょうか)。

操作についても、根本的にキーボードやマウスで運転するというのが苦しくて、反力のあるステアリングホイールがたぶん自動車をきちんとコントロールできる唯一のインターフェースなんだと思う。グランツーリスモなんかもGT Force Proで遊ぶと10倍くらい面白いし(本当に。おすすめ)、PSコントローラでは難しい速度制限を守っての安全運転も簡単にできたりする。

ただ、このFlashはもともと駐車シミュレータとして作ったので、基本的に「カーソルキーでハンドルが回る」ようにしてあるんだけど、ドライブ向けに「カーソルキーで車が曲がる」ように調整しなおしたほうがいいのかも。速度によってこの2つをなめらかに切り替えたりして。方向指示器との兼ね合いもあるし、かなり微妙な調整とそのためのコード(もしかしたらエディタも)が必要になりそうなので、このあたりはしばらく後ということで……。バージョン3.0の課題かな?

バックで1200km/h出るバグを確認。後で直します。走行抵抗がきちんと効いていない予感。たぶん以前からのバグなんだろうなあ、これ。コースが狭くて気づかなかっただけで。冷汗が出てくる。よくあることですよね。ね?

ところで、Gizmodoの記事でも示唆されてるけど、Google Earthで、車体挙動をきちんとシミュレーションして、ステアリングコントローラで運転できたら、それはもう遊びではないちょっとした自動車シミュレータになるんじゃないだろうか。どうなのかな。さらにオンライン化とか。もう誰かが取り掛かってるかもしれない。

2008年6月12日

トップページ
プロフィール

はてなブックマーク
wonderfl