FLASH/Web制作: 2005年10月アーカイブ

 あったらいいなと思っていた色弱の場合の見え方をシミュレートするツールがありました。
色の問題って結構難しいですね。最近はディスプレイも液晶が普及してきたせいで発色の個体差が昔より大きくなり色の環境は悪くなっていると思います。特にノートPCだと輝度が低いので彩度も低くなりがちです。

ColorAccess
http://www.forest.impress.co.jp/article/2003/07/22/okiniiri.html

 昨日は単純だと言っておきながら、罠にハマった。XML Socketは簡単なのだが、FLASH XMLオブジェクトのメソッド・プロパティが生産性の低いものばかりだった。 orz

 送信用データの作成については、まだ目を瞑るとして、受信データの抽出の仕様には呆れてしまった。
何で上から順番に辿って取得しなきゃいけないんだ?しかも親→子で辿る分は気にしないが、記述順にずっと辿っていくのは情けない。(つまり親子関係の無いタグも辿っていく)折角タグに名前をつけることが出来るのに何故ダイレクトにデータを持って来れないのか。XMLの構造通りにデータ取得ルーチン書くなんてアホすぎ。まだ今日はチャット機能のみなのでまだ綺麗だが、全ての機能を実装した日にはとてつもなく費用対効果のないコードが出来る悪寒。こんな状態では仕様変更時のデバッグもやってられない事態に発展するので、書籍やネット調べました。

 …が、どこも苦労しているようです。裏技でダイレクトアクセスできる方法が載っていましたがMXでは使えなかった(バグ技は保証なしってことです)。ゲームの仕様上、キーボード入力のなデータはチャットメッセージのみでそのほかは全てイベントメッセージなのでデータ用のタグにメッセージを入れ、それ以外のデータはタグの属性に突っ込みました。摂りあえずこれで処理コードの量は1/100位になったと思う。おまけに構造を気にする必要もなくなったので、生産性の低いコードと無駄パケットの嵐の2つを天秤に掛ける必要もなくなった。

 これでMMOチャットは完成。ただキーボードイベントが変だったのでその処理を行って次はマウスイベントの方を実装します。キャラデザとBGMは11月後半かな。それまでにシステムだけは完成させよう。

 予算と時間に余裕があれば11月末にSTUDIO 8を準備してエフェクターの恩恵を受けたいなぁ。

 ソケット通信関係のプログラミングが一段落したので、本日よりプロジェクト開始とします。
今まで語る人も利用例も少ないFLASH XML Socketはかなり難解なものと思っていたら、関数も一桁の数しかないし、思いっきり単純でした。これで直ぐにチャット機能は完成しそうなんで実装して複数接続のテストを行います。

 因みに今回制作するコンテンツの詳細については、仕様を含め全ての詳細が決定しましたが、投稿作品として制作している理由上、作品そのものは発表時まで非公開になります。

 今日からFLASH側にテスト用クライアントを作成して動作の確認を行ってみた。
最初は接続・切断はうまくいくもののデータの受け渡しが上手くいってないようで、半日経過。
デフォルトの仕様から調査してみると、別にXML形式でやり取りする必要性はなく(FLASH側にとってはデータ処理が楽になるが)、1行ずつ読み込むPerl側はFLASHから改行コードが来ないため次の処理に進めず、FLASH側に\nつけて送ったら今度はサーバーからのエコーを処理できない。FLASHのXMLソケットはNULL(\0)を区切りとして処理しているのでサーバーからデータ送信する際に\0を付与すると解決した。
 一応1対1の通信が完了したので、今度はサーバーで同期配信を組み込めば大体処理は完了かな。
但し、サーバーのCPU負荷と通信量は十分考えなければいけない。

 通信量の節約:
究極はバイナリでbitごとに定義したデータだけど、多分チャットメッセージの方がずっと重いはず。
テキストだとコマンド部とデータ部を分ける処理をFLASH側で自作。XMLで在ればサーバーに解析処理が必要な場合も有り。例えば最大接続が1000人だとして大体位置的に自分の周り30人くらいのチャットを受け付けるとすると位置情報から絞り込んで送信すべきなのだろうか…CPU負荷と相談。

 CPU負荷の軽減:
これは、サーバー側での処理を極限までに少なくする必要がある。最初はコンパクトに実装するが通信量が見積もれる段階になったら考えてみよう…。

上記2つはタイムラグの発生を最小限にする為何度もシミュレートしてみる。
クライアント側の処理もなるべく軽くする予定だがPenIII-850未満のCPUは想定外。サーバーの通信帯域は32Mbpsを上限とする予定なので1クライアント32Kbpsつまり1秒間に4Kバイトまで、リフレッシュレートは10fps辺りで設定かな。(こんな通信仕様でレンタルサーバだったらプロセス停止食らいますね)
 

 マルチプレイサーバーを作るにあたって、自宅サーバーで運用すると仮定してもBSD辺りで最小限の構築をしようと思っていました。そのときの構成が以下の通り。

サーバー機1台新調。
FreeBSDをSSH,emacs,bcc,makeのみでインストール
Apache2.0+SSL(モジュール最小)…アカウント管理ツール用
Perl5.8.0(ライブラリはDB関連のみ)…ゲームサーバー・管理ツール用
Qmail…アカウント発行用
BIND…メールサーバー用
Postgresql…ゲームデータ保管用
ipfw…ファイヤーウォール

結構、これで多人数の利用を考えるとスペックが必要になります。

 STUDIO 8 アップデート版が欲しいのにその倍額を掛けてサーバー構築も大変だーと思っていたら、「別にゲームサーバーのみで全て受け付けて、FLASHクライアントにアカウント登録から組み込めばコンパクトかつ、どのOSでもパワーの余ったPC使えばいいのでは?」と閃いた。

 そういえば自宅のデスクトップは全然使ってない。スペックが劣っていてもノートで制作したりしている。そういうことなら移植性を考慮しながらWin用で作ればと思い考えたのはこの構成。
Apache…ここのドメインを使用(告知・宣伝・クライアント配布用)
ActivePerl…ゲームサーバー・アカウント管理
Qmail…ここのドメインを使用(連絡用)
Postgresql…ゲームデータ保管用(使用しない場合も想定)
NAT…WindowsPCはルーターの下に接続しているのでここでポートフィルタリング
ウィルスバスター2006…パーソナルファイヤーウォール

これならハードウェアの追加はいらないどころか最大のパフォーマンスがだせるかも。

 あまり残りの期間もないので早速サーバーサイドのプログラムから書き始めました。FLASHのテストクライアントは週末にでも。
 ただ、自宅サーバーを休止した上にサーバー機を処分してしまった為にWindows用にテストサーバーを作ることになりました。
 …で。数年もやってないことはすっかり忘れているのかPerlでforkを使ってしまい撃沈。やっぱりUNIX系クライアントは必要だなー。cygwinと言う手もあるけど、妙なところでWindows絡むので信頼できないし。

 結局、思い出すために昔の雑誌やら書籍や参考にしていたサイトを探していました。
よくよく思い出してみるとソケットとforkの両方を使ったプログラムは組んだ事なかったのです。だからMMOがどうやって実現しているのか設計内容が分からなかったのか…。ソケット通信はHTTP/FTP/メールクライアントで作成して、fork関係は途中で投げ出していた…。

 とりあえず、forkの代わりにselectを使用して対処。

以前から大変に参考にしています。

ネットワークプログラミングの基礎知識
http://x68000.q-e-d.net/~68user/net/

年末のFLAどうしようかな。

| | コメント(0)

 最近、休日になると殆ど一日寝ている状態な管理人です。ちょっと地震にビビッタ。
そろそろFLASHの制作に取り掛からないと今年も作品作れずドロップアウトになるのでヤバいのですが、やっと作る内容を決めたので早速情報収集しなくてはの状態です。
 作曲の方がハードル高いので要するに著作権切れ楽曲を使用する事を前提。もちろんオリジナル作品でないと公開できないので音源等は自分で用意しレコーディングます。その関係でテーマはクリスマスにしましたが、次に具体的な内容を如何しようかと考えたところ、プロモだとストーリー大変だし、ゲーム感覚でオンラインミーティングでも作ろうかと。まぁチャットオンリーのMMOみたいなイメージですが、グリーティングカードの代わりにメールにメッセージを入れて指定した時間にお互いがログインすると、その場でチャットできるって物。ちなみに一人じゃ遊べないという微妙なデメリットもありますが、余裕があれば多人数接続までやってみようかな。

 夕方にmacrodedia社からのDMが来て、えっイキナリ発売!?な状態。
価格は予想通りだったので驚きませんが、事前に販売日とか告知しないんですね。
MX1.1買った時もまさか1ヶ月以内にMX2004が発売されるなんて知りませんでしたし、それがあってバージョンアップ代が勿体無い&一世代のバージョンアップはメリットが少ないということでずっと待ってました。早速注文したいところですが現金ナッシングなんで、年末かな…。
 とりあえず、今年はMXで出来る限界までやってみよう。

ネットゲーの企画

| | コメント(0)

 最近カテゴリーがクロスすようなことばかりですが、またプログラミングをするようになったので今度はネットワーク関連でやってみようかなと思っています。(1からは無理です。)昔C言語のメルマガを発行(現在休刊中)していたときは、C言語→C++→MFC→DirectXと展開する予定でしたが、結局時間が無くて書けないままです。実際モデルとしてUnrealTournamentのようなゲームが制作できたらいいなぁの気持ちだったのですが、最近はネットゲームでも5000人同時接続規模のMMOが流行なのでいつの間にかはるか雲の上の技術です。冷静になって考えてみれば、サーバー側はデータの同期と判定関係が殆どぽくて、それ以外は全てクライアント側プログラムだと思います。そう切り分けるとイキナリ気合いれてDirectXする前にFLASH対戦ゲーから作ってみようなという気になりました。これはUNIX無関係かな。一応大規模MMOを目指して個人でも運用できるプログラムならWinXP Pro+Postgreがいいのかな?

ColdFusion高っ!

| | コメント(0)

 昨日に続き、価格コムで値段をを調べたらサーバーが100万円近くするのか…。個人では買えません。若しCF用プログラム作っても配布するだけで、運用は他の有志にやってもらうしかないです。

このアーカイブについて

このページには、2005年10月以降に書かれたブログ記事のうちFLASH/Web制作カテゴリに属しているものが含まれています。

前のアーカイブはFLASH/Web制作: 2005年9月です。

次のアーカイブはFLASH/Web制作: 2005年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1