吹き出しに続き、キャラクターの表示もWPFで行うようにしてみました。以前、UpdateLayeredWindowを使ったバージョンでは200行近くあったコードが、WPFでは50行にも満たないコードでほぼ同等の機能を実装しています。今までの苦労は一体…。
WPFの資料はまだ少ないですが、使えるようになれば強力なライブラリかも?これは本腰入れて勉強したほうがいいかも。
ついでに、簡単なアニメーションができるようにしました。まばたき、します。
リソースの管理が甘いとか色々問題もあるけど、実際に動くと感動ですね。差分の画像を用意するのも楽しいです。(今だけかもしれないけど)
実用性からどんどん離れた機能ばかり増えてるよ~。
2009年6月23日火曜日
WPF版の吹き出しをPADに組み込む
WPFのコードをクラスライブラリ(DLL)化するのに若干手間取りました。デフォルトだとWPFのクラスライブラリのテンプレートが用意されていないから、自力でDLL化。しかし、そのDLLを他のプロジェクトから参照すると、「~の参照がたりないよ」的なメッセージがたくさん出てきたり…。
とりあえず以下のようになりました。(まだバグが多いけどね)
かなり綺麗に表示できるようになったと思う。メッセージも読みやすくなった、かな。
とりあえず以下のようになりました。(まだバグが多いけどね)
かなり綺麗に表示できるようになったと思う。メッセージも読みやすくなった、かな。
2009年6月22日月曜日
2009年6月21日日曜日
透過フォームを綺麗に表示
新しい画像でPADを起動すると、以前に比べて輪郭のギザギザ(ジャギ)が気になる。元の絵はアルファ情報付きのPNG形式だけど、どうやら輪郭の透過具合が働いていないっぽい。
今はフォームのTransparencyKeyをフォームの背景色にすることでキャラクターを表示しているが、これではダメらしい。調べると、WindowsAPIのUpdateLayeredWindowを使えばPNGのアルファ情報そのままに表示できるらしい。
しかし、C#でのサンプルコードが見つからず苦戦しました…。まだ作りかけのコードですが、一応綺麗に表示できるようになりました。
左が改良版で、右が今までのバージョン。右は輪郭が白っぽくなっていますが、左は綺麗に表示されています。WindowsAPIを使っているので、Windows専用の機能となってしまうけど仕方ない。そもそも、Linuxで実行すると透過処理自体がうまくいかないから、結局Windows以外のOSはサポートできそうもないですし…。
できればMono上で動かしたかったなぁ。Monoを諦めるなら、WPFを視野に入れる時期かも?未だにWindowsAPIの呪縛に縛られるのは正直嫌なのです。
今はフォームのTransparencyKeyをフォームの背景色にすることでキャラクターを表示しているが、これではダメらしい。調べると、WindowsAPIのUpdateLayeredWindowを使えばPNGのアルファ情報そのままに表示できるらしい。
しかし、C#でのサンプルコードが見つからず苦戦しました…。まだ作りかけのコードですが、一応綺麗に表示できるようになりました。
左が改良版で、右が今までのバージョン。右は輪郭が白っぽくなっていますが、左は綺麗に表示されています。WindowsAPIを使っているので、Windows専用の機能となってしまうけど仕方ない。そもそも、Linuxで実行すると透過処理自体がうまくいかないから、結局Windows以外のOSはサポートできそうもないですし…。
できればMono上で動かしたかったなぁ。Monoを諦めるなら、WPFを視野に入れる時期かも?未だにWindowsAPIの呪縛に縛られるのは正直嫌なのです。
2009年6月13日土曜日
2009年6月1日月曜日
LinuxではPAD不発
いろんな場所でPADを動かそう計画、Linux編。
ダメでした!
ただ、上記のようにとりあえず起動するだけなら、Windowsオンリーのプログラムとほぼ同じコードでOKでした。以下、Linuxで動かすためにやったこと。
ダメでした!
Monoというプログラムを利用すると.NETで作成したプログラムがそのままLinuxなどで動くのですが、
GUI周りは微妙なのかなぁ。早苗さんや吹き出しの透過処理が見事に失敗しています。ただ、上記のようにとりあえず起動するだけなら、Windowsオンリーのプログラムとほぼ同じコードでOKでした。以下、Linuxで動かすためにやったこと。
- Monoでは音声認識の処理はサポートされていないので、音声認識プラグインを外す。(単にプラグインのDLLをプラグインフォルダから削除するだけ)
- ファイルのパス区切りを"\"から"Path.DirectorySeparatorChar"に置き換え。
これだけです。実質、コードとしては2.の変更だけですね。数分程度の修正でPADがLinuxでも起動したのはびっくりです。Monoすげぇ。
で、透過処理が失敗する理由が不明。MonoのWindows版だとちゃんと透過処理が動くので、Mono的には問題ないはず?気になるのはVMware(仮想環境)で動かしていることかな。しかし、これ以上は検証のしようがない…。
登録:
投稿 (Atom)