2009年6月24日水曜日

WPFに本格移行?

吹き出しに続き、キャラクターの表示もWPFで行うようにしてみました。以前、UpdateLayeredWindowを使ったバージョンでは200行近くあったコードが、WPFでは50行にも満たないコードでほぼ同等の機能を実装しています。今までの苦労は一体…。

WPFの資料はまだ少ないですが、使えるようになれば強力なライブラリかも?これは本腰入れて勉強したほうがいいかも。


ついでに、簡単なアニメーションができるようにしました。まばたき、します。

リソースの管理が甘いとか色々問題もあるけど、実際に動くと感動ですね。差分の画像を用意するのも楽しいです。(今だけかもしれないけど)

実用性からどんどん離れた機能ばかり増えてるよ~。

2009年6月23日火曜日

WPF版の吹き出しをPADに組み込む

WPFのコードをクラスライブラリ(DLL)化するのに若干手間取りました。デフォルトだとWPFのクラスライブラリのテンプレートが用意されていないから、自力でDLL化。しかし、そのDLLを他のプロジェクトから参照すると、「~の参照がたりないよ」的なメッセージがたくさん出てきたり…。

とりあえず以下のようになりました。(まだバグが多いけどね)


かなり綺麗に表示できるようになったと思う。メッセージも読みやすくなった、かな。

2009年6月22日月曜日

WPFはじめました

昨日WPF始めようかなとか言ってたら、本当に始めてしまいました。しかし、まだあまり情報が揃っていない?ので、結構苦戦中。

とりあえず、吹き出しを今までよりも綺麗に出せるようになりました。が、ライブラリ化とかVista以外での動作確認とか色々できてません。未実装の機能も多く、先は長い。


輪郭線が表示できるようになり、輪郭のギザギザなくなって綺麗になりました。
これなら、キャラクターの表示もWPFでやればよかった…。

2009年6月21日日曜日

透過フォームを綺麗に表示

新しい画像でPADを起動すると、以前に比べて輪郭のギザギザ(ジャギ)が気になる。元の絵はアルファ情報付きのPNG形式だけど、どうやら輪郭の透過具合が働いていないっぽい。

今はフォームのTransparencyKeyをフォームの背景色にすることでキャラクターを表示しているが、これではダメらしい。調べると、WindowsAPIのUpdateLayeredWindowを使えばPNGのアルファ情報そのままに表示できるらしい。

しかし、C#でのサンプルコードが見つからず苦戦しました…。まだ作りかけのコードですが、一応綺麗に表示できるようになりました。


左が改良版で、右が今までのバージョン。右は輪郭が白っぽくなっていますが、左は綺麗に表示されています。WindowsAPIを使っているので、Windows専用の機能となってしまうけど仕方ない。そもそも、Linuxで実行すると透過処理自体がうまくいかないから、結局Windows以外のOSはサポートできそうもないですし…。

できればMono上で動かしたかったなぁ。Monoを諦めるなら、WPFを視野に入れる時期かも?未だにWindowsAPIの呪縛に縛られるのは正直嫌なのです。

2009年6月13日土曜日

コミケ76受かりました

無事受かりました。本当は1週間くらい前に分かっていたのだけど、忙しくてブログでの報告が遅れました。既にメインのWebページは更新済み。しかし、作品紹介のページが全然できていない…。遅くとも、カタログが発売されるまでに更新しないとね。

いや、それよりもPADを作らねば。今回どこまで作り込むかを決定して、CD盤面のデザインとか、当日手伝ってくれる人探したりとか、色々大変だ。

早苗さんの絵を新しく描き直したので、絵はこれで最終版、かな?


デスクトップアクセサリーっぽくなったかな?

2009年6月1日月曜日

LinuxではPAD不発

いろんな場所でPADを動かそう計画、Linux編。

ダメでした!

Monoというプログラムを利用すると.NETで作成したプログラムがそのままLinuxなどで動くのですが、
GUI周りは微妙なのかなぁ。早苗さんや吹き出しの透過処理が見事に失敗しています。

ただ、上記のようにとりあえず起動するだけなら、Windowsオンリーのプログラムとほぼ同じコードでOKでした。以下、Linuxで動かすためにやったこと。

  1. Monoでは音声認識の処理はサポートされていないので、音声認識プラグインを外す。(単にプラグインのDLLをプラグインフォルダから削除するだけ)
  2. ファイルのパス区切りを"\"から"Path.DirectorySeparatorChar"に置き換え。
これだけです。実質、コードとしては2.の変更だけですね。数分程度の修正でPADがLinuxでも起動したのはびっくりです。Monoすげぇ。
で、透過処理が失敗する理由が不明。MonoのWindows版だとちゃんと透過処理が動くので、Mono的には問題ないはず?気になるのはVMware(仮想環境)で動かしていることかな。しかし、これ以上は検証のしようがない…。