DIARY

病的折衷主義のガラクタ出力装置


はい、2011年もWorlfardの制作です。



現在ロビーCGIを作成中ですが、CGIはPerlで書いているのですが、
私はこのPerlの言語仕様がどうも合わないので、いろいろと細かいところで手間取ったりしています。

Perlは面倒な手続きとかが省かれていて、手軽にいろんなことが出来る分、
細かいこと複雑なことをしようとすると、逆に変な記述になり分かりにくくなるような気がします。
いろんなところを省略して簡略化して表記できますが、後から読み直すことを考えると、
はっきりいって省略表記は悪だと私は思います。
かなり個人的な感想ですが、Perlは嫌いです(;´Д`)

しかし、ロビーCGIを作るといっても、同時にCGIとメッセージをやり取りするために、
クライアントの方も改良しなければなりません。
インターフェイスも新しく作らないといけないし、なかなか大変です。

そんなこんなで、次のバージョンアップはもう少し掛かると思います。
2011年01月09日(日) No.300 (プログラム)
Trackback(0)

非同期型複数人同時接続チャット


Worlfardでネット対戦を実装すべく制作を行っているところなのですが、
やっと複数人でのチャットシステムの構築が終わりました。



しかし、これだけのシステムを組むのに1週間も掛かってしまいました。
コード量はせいぜい1000行強程度だったのですが、
やっぱり通信関係は変なところで時間を喰いがちですね。

一度エラーが出たときに、原因が通信関係の問題かと勘違いして、
Snifferを使っていちいちパケットを調べたりして悩みまくった挙句、
原因は(int)strlen(buf)と書くべきところを(int)sizeof(buf)と
書いたりしたためだったりして一晩無駄にしたりもしましたけどorz

どうでもいいけどsizeofの使い方って間違いやすいですよねぇ(;´Д`)


ま、そんなことは置いといて、
とりあえず、データを接続者に適切に転送するシステムの出来上がったので、
後はこれを使ってゲームのデータをプレイヤー間で適切にメッセージを送りあえば、
通信対戦の出来上がりなわけです。

しかし、その適切なデータというのがなかなか面倒だったりして、
完成にはまだ結構時間が掛かりそうです。
2010年11月21日(日) No.286 (プログラム)
Comment(0) Trackback(0)

ベンチマーク


Worlfardのエフェクトなどの見た目を改善している今日この頃です。

ちょこちょこやっているうちにWorlfard君結構重くなってきた気がしたので、
軽くベンチマークを採って確かめてみました。
するとまぁ、みごとに重くなってましたね。

現在WorlfardはFPS60でまわるように設定してあります。
このFPS60というのは1秒間に60回画面を更新しますよという意味で、
そうすると、1回画面を更新するのに掛けていい時間は16.6msで、
これを超えてしまうようになるとFPS60を維持するのが困難になってくるわけ。

んで、実際に1回画面を更新するのに掛かる時間を測定してみると、
画面にカードが増えてくると、1ループ16msを軽く超えてしまっていた(;´Д`)
これはつまり処理の上限を振り切っちゃっているということで、
画面がガクガクになって、所謂『重い』という状態。

但し、Worlfardはカードゲームでゲーム性からして、滑らかな描画が必要なわけではないので、
本当はFPS60にする必要はなかったりします。
実際試しにFPS30に下げてみても、レスポンスなどの操作性は、
まったく影響がなかったのでそれでも大丈夫でしょう。

しかし、もう少し工夫することで、処理を軽く出来る要素がまだまだあったりもする。
FPSを下げるのはそこらへんを改善してみて、それでもまだ重い場合の最終手段にしておきます。


てなわけで、次のバージョンは、エフェクトを追加して、処理の改善が出来たらアップします。
2010年09月26日(日) No.271 (プログラム)
Comment(0) Trackback(0)

DDBとDIB


Worlfardは現在、見た目の部分を改善中。



こんな感じの画像を用意して、カードが破壊された時とかのエフェクトを作ってます。
リアルタイムで計算してエフェクトを作ってもいいんでしょうけど、
とりあえず、今回はお手軽にあらかじめ用意した画像を合成するだけにしました。
速度とか負荷的にもリアルタイムに合成するのってどうなんだろうという疑問もあったので。

さすがにエフェクトを作るのに、アルファブレンドだけだとさすがにダサ過ぎるので、
光などの表現によく使う加算合成(アッドブレンド?)を実装して実現しました。



αブレンドはGDIにそのままのAPIがあるのでDDBのままで簡単に出来たけれど、
加算合成はDDBのままでは出来ない(やらない方がいい)ので、
DIBでピクセルデータを生で弄って合成しないといけない。

DIBを扱うのは初めてだったので、実装するのは大変かなと思っていたけど、案外簡単に出来た。
DIBSectionを使えばDDBとDIBの変換は面倒見てくれるので、
後は合成部分のコードを書けばいいだけ。
合成の処理自体も、合成する画像同士で各ピクセルのRGBを加算して255で上限をきればいいだけと簡単。

まぁ、飽和加算のビット演算の式についてははっきり言って理解できてないですけどね。

temp = ((src & dest) + (((src ^ dest) >> 1) & 0x7f7f7f7f)) & 0x80808080;
mask = (temp << 1) - (temp >> 7);
dest = ((src + dest) - mask) | mask;

いやぁ、やろうとしてることは分かるんですが、それがこの式で計算できるということが・・・
ぶっちゃけ、めんどくさいんで実際に計算してみて理解しようとかそういう作業もしてないんですが。
とりあえず、実装できてるのでそれでよしとしてますヾ(;´▽`A``

そういえば、DIBとかDDBについて私は間違った認識をしていたようで、
てっきり、DIBを使うとDDBより高速で描画出来るようになると思ってました。

しかし、DIBでピクセルの生データを高速で弄れるようになったとしても、
結局実際にディスプレイに表示するには、DDBに変換しなければいけないわけで、
描画速度はDDBだけの時と変らない、というか変換の分遅くなるんですね。
DIBはあくまでDDBのままやると遅くなる処理の一部を早くできますよってことだったんですねぇ(-ω-;)ウーン
2010年09月22日(水) No.270 (プログラム)
Comment(0) Trackback(0)

Microsoft Visual C++ 2010 Express を使ってみた


MSVC++2010の日本語のExpress版が出ていたので、
試しにインストールして、使ってみました。

http://www.microsoft.com/japan/msdn/vstudio/express/

インストールにはオンラインインストールとオフラインインストールの2つの方法があるのですが、
オンラインだと途中でエラーが出たりすると怖いので、今回はオフラインインストールを行いました。
オフライン版は、イメージファイルを落としそれをDVDに焼いてインストールするのですが、
ディスクに焼くのが面倒だったので、DeamonToolでマウントしてやってみました。

しかし、インストール中に2回も再起動を要求されてしまいました orz
当然、再起動するとマウントが外れてしまうので、
ファイルが見つからないというエラーが出てしまい、
そのたびにインストールをやり直すハメになったりして、
これはこれでまた面倒でした(;´Д`)

まだ、入れてない人は、後々のためにディスクを残してもいいかと思うなら、
DVDにちゃんと焼いてからインストールすることをオススメします。
(エラーが出たりして途中でやり直しても、既にインストールした部分は、
もう一度入れなおす必要はないのでちゃんと完走できます。)


そして、使ってみた感想ですが、もともと私はVC++.NET 2003を使っていたのですが、
今回の2010では、かなり賢くなっているなと感じました。
コードを書いている途中で、コンパイルエラーになるような箇所は、
ほぼすべてピックアップされて赤波線で警告してくれまし、
includeファイルを指定するときにまで、補完機能が働いたりします。

しかし、はっきり言って私には常用できないツールだと感じました。
何よりも「重い!」これが最大の問題です。

賢くなった分、さまざまな処理を裏でやっているようで、
ちょっとコードを書いただけで、そのたびにガリガリとCPUが動き、
編集するファイルを切り替えると、その部分のためにまた読み込みが入ったりして、
実害はなくても、メモリやCPUが動き回るのは、非常に不快です。
挙句の果てにヘッダーに関数を1個追加しただけで、
数百MB以上のメモリが飛んでいくのには驚きました(;゚;Å;゚; )

CPUパワーが恐ろしく高く、メモリがギガ単位で余っているようなマシンを
使っているのなら問題ないのかもしれませんが、
私のような、作業中にはiTunesでBGMを流し、FireFoxで調べ物をし、
余剰メモリが豊潤ではない環境で作業しているような人間にとっては、
ぶっちゃけ実用に耐えないモノでした。
言ってしまえば、7年も前のツールの方が確実に使いやすいです。


今回コレを使ってみてやっぱりツールには、多彩な機能などより、
動作の速さや使用メモリの軽さなどの「軽快さ」が最も大切だと痛感しました。
2010年05月30日(日) No.240 (プログラム)
Comment(0) Trackback(0)

[1][2] [3] [4] [5] [6] [7] [8] [9]