UWPでMonoGame - GameからXAML Pageへの復帰 ― 2021年04月08日 18:42
UWPでXAMLのPage(GamePage)から、引数付きでMonoGameのGameを起動することができた。次は、Gameから元のXAMLのPageに復帰する。
Gameの終了は、Dispose()を呼び出せばよいようだが、UnhandledExceptionが発生し、アプリが終了してしまう。OnNavigatedFrom()に記述したデバッグ文が呼び出されているところから、XAMLのPageに戻ってはいる様子。
ログを見ると、Gameオブジェクトがなくなったのに、Mouse周りのイベントが刈り取られず、イベントの宛先がNullであると言っている(Disposeしたから当然だが)。これが致命傷になり、アプリの継続が不可になっている。
ちなみに、Exit()を呼び出すと、GamePageに戻ることなく、アプリが終了する。
本来は、MonoGame側の対処を望みたいところだが、何とか先に進めてみる。まず、Gameの終了をGamePage側から行うため、イベントを自作し、ゲームの終了をGameからGamePageに伝える。
そこで、GamePageを起動したMainPageにGoBack()で遷移する(L.70)。UIとは別Threadに居るので、Dispatcher.RunAsync() 経由。念のため、例外発生前に遷移指示を済ませる。
その上で、GameをDispose()する(L.84)。一つ前のSuppressDraw()は例外抑止に効果なし。発生するUnhandledExceptionは、ここのtry/catchでは拾えない。
UnhandledExceptionを拾うために、App.xaml.csにハンドラを登録(L.32,33)。2つ登録しているが、MonoGameの例外を拾うのは、CoreApplication.UnhandledErrorDetectedの方。
ハンドラの実体。CoreApplication.UnhandledErrorDetectedを受けるのは、CatchCoreUnhandledException()の方(L.133)。引数のargsには、Messageがないので、Propagate()で改めてThrow(L.147)。このあたりは、atmarkitの記事を参考に。
記事にあるように、VisualStudioのプロジェクトのPropertyで、条件付きコンパイルシンボルを設定しないと、Debugモードの実行では、アプリのハンドラの代わりにVisualStudioのデバッガが例外を捕まえるので注意。
すると、例外の実体が、NullReferenceExceptionであることがわかる。
こうして、UnhandledExceptionを受けとめると、例外でアプリが落ちることなく、GamePageから遷移したMainPageが無事に表示される。とりあえずは、これで先に進める。
UWPでMonoGame - Gameオブジェクトへの引数渡し ― 2021年04月08日 13:58
以前作成したXAMLベースのゲームアプリ(UWP)の使い勝手を改善しようと、ゲームエンジンの導入を考える。一度アプリ構築に使用したUnityが第一候補になるが、もう少し手軽で、XAMLページとの連携ができそうなMonoGameを試してみる。
MonoGameのUWP対応のプロジェクトを作成すると、生成されるコード群に、GamePage.xaml.csがあり、MonoGameの環境を生成するコードがある(L.40)。XamlGame<T>.Create() の部分。
最初の引数に parameter がある。設定のしかたは、"key:value"の形。複数ある場合は、空白で区切る。このあたり、MonoGameの文書に説明がなく、試行錯誤。
parameterの受け取りは、ゲーム本体のClass(Gameを継承)のConstrucorで行う(L.85)。Game.LaunchParameter(L.91)というCollectionに入っているので、foreachで取り出す。こちらは、Gameクラスの説明にある。
実際の活用は、App.xaml.csからGamePageを呼び出す処理を変更し、別に用意するMainPageを介してGamePageに遷移するようにする。この時、MainPage→GamePage→MonoGameに引数を渡す。こうすれば、MainPageにゲーム選択や各種設定などのUIを担わせることができる。
MonoGameで各種UIを作成することもできなくはないが、いろいろな部品は手作りになる。
The Fourteenth Labのアプリ一覧 ― 2021年03月18日 09:00
●Windows Storeで配信中のアプリ
Storeの運営により、予告なく配信が停止される場合があります。

UPnP音楽再生指示
UPnP(若しくはDLNA)の仕組みを利用して、楽曲を管理するサーバ(コンテンツのディレクトリ)上のプレイリストについて、音楽を再生する機器(メディアレンダラー)に再生を指示するアプリです。これにより、Windows10が動作する機器(主にmobileを想定)を一種のリモコンのように利用することができます。

お散歩コンパス
散歩などに持ち歩くコンパスと傾斜計の機能を提供します。インターネットが利用できる環境では、今いる位置を中心に国土地理院地図を開くことができます。また、適宜、現在位置を記録することで、簡易ですが、経路を表示できます。

ながら見Web
常時、見ておきたいWebサイトを、主たる作業の妨げにならないように、小さな画面にまとめて表示します。天気概況や地震速報のように、ざっくりとした状況を把握できればよいサイトの表示を想定しています。

ほそ道まっぷ
紀行文に記された地名を一覧から選択し、地理院地図とGoogle Mapで地形や史跡を確認しながら、読書を支援するアプリです。地形を合わせ見ることで、山あいを旅したのか、川沿いに進んだのか、荒野を縦断したのか、など、旅の風景が見えてきます。
奥の細道、東関紀行、海道記、を掲載します。

和書体
UWPアプリで利用できる日本語フォントを一覧し、例文を見ながら、実際の見え方を確認します。

四則演算パズルU
四則演算ボタンと計算順ボタンを組み合わせて、0から9までの整数を求めるパズルです。

漢字合わせパズル
同じ漢字の書かれた二枚のカードを見つけていくパズルです。学年別の漢字のほか、部首別の漢字、県別の駅名を合わせるゲームがあります。

火山壁紙
気象庁の火山監視カメラが提供する火山画像をWindowsの壁紙に設定します。
一覧に用意しているのは、サイトが提供する全ての火山についてではなく、解像度が高く、空が広く、電線などの障害物が少ないものを抜き出しています。

献血記録
献血のあとに送付される検査成績を記録し、次回の献血の予定を立てたり、検査結果の推移を体調管理に役立てることを意図しています。

画像微調整
写真やイラストなどの画像について、サイズ変更、回転、鏡像変換、切り抜き、任意の4点からなる四辺形からの長方形への変形、明度と彩度の調整、選択した矩形のモザイク化など、ブログ記事作成などで必要となる簡易な画像調整機能を提供します。

画面属性と制御
モニタに関する情報取得と電源制御(オフ)を行うユーティリティです。
マルチディスプレイ環境では、全てのモニタの電源を切ります。

直角取り
麻雀牌を使った一人遊びを元にしたゲームです。36牌(4x9漢字牌)、72牌(6x12漢字牌)、144牌(8x18漢字牌)、136牌(8x17麻雀牌)、4つの盤があります。漢字牌では、画数が多く紛らわしい漢字を用いて、ちょっと意地悪になっています。
条件を満たす同じ表示の牌を取っていき、盤上から全ての牌を取り除けば、ゲームクリアです。取れるのは、隣り合う場合、同じ直線上にある場合、一度だけ直角に曲がって四辺のいずれかを接することが出来る場合、の3つです。ただし、2つの牌の経路上に邪魔する牌があってはいけません。

統計電卓
キーパッドから登録した数値や、タブ区切りテキストから読み込んだ数値について、平均や分散などの記述統計と、2次元データの相関および回帰の分析を行います。

音量一覧選択
システムボリュームを一覧から選択して設定するユーティリティです。
動画や音声の配信では、番組毎に音量のレベルがまちまちですが、都度、システムのボリュームを調整するのではなく、あらかじめ登録してある設定を一覧から選択できるようにします。
●配信を停止したアプリ
Windows Storeで配信をしていましたが、現在、配信を停止しています。

Network Time
ネットワーク時刻を提供するサーバから時刻情報を取得し、本機の時刻とのずれを確認します。

Subnet Designer U
IPv4のSubnetの設計において、必要なSubnetの数と1つのSubnetが収容するホスト数をもとに、最適なSubnetを求める作業を支援します。

からだを動かすリズム計
身体を動かす際などにリズムを取るためのものです。ストレッチ運動などをする際に、リズムを崩さないようにする手助けとなることを想定しています。
一回の動作の拍数(1~4)と、目標の動作数を設定すると、図形の動きと音でリズムを取ります。たとえば、1回の動作を2拍で行い、30回を動作数に設定すると、2拍のリズムを30回の区切りで実行します。1拍の時間は、0.5~3秒の間で設定できます。

トーンと色の見本帳
Windowsアプリの色デザインの補助のために、Windowsの定義色について、PCCSのトーン、色相、明度、彩度を概算し、トーンマップ上の位置を示します。また、PCCSの色について、RGB(ARGB)値を算出し、それに近いWindowsの定義色を求めます。
●Windows8.1向けのアプリ
2021年3月18日、配信を停止しました。
Windows10でも動作するため、配信が継続されていますが、安定性を考え、Windows10向けに作成した版をご利用ください。

四則演算パズル

部屋の中の水分量
.NET5.0 の WPF App - Bind、UWPやWindowsForms APIの利用 ― 2021年02月20日 16:31
LogoVistaの辞書アプリを利用しているが、ブラウザの文書からコピーして、貼り付けて、検索ボタンを押す、という一連の作業が、少々面倒。手間を省くために、UI Automationを利用してみようと、WPFアプリに着手。
プロジェクトを追加しようとダイアログを開くと、.NET Framework用のWPFと、.NET用のWPFが出てくる。後者は、.NET5.0からのもの。UWPの改善点がフィードバックされているとのことで、後者を選んでみる。
まずは、便利だけど、いつも悩ましいBind。"x:Bind"は使えない。
ただし、ListViewなどにCollectionをBindするのに、XAMLにCollectionViewSourceの定義は、必ずしも要らなくなった。コードで、ListViewなどのDataSourceを設定すれば済む。このあたり、MSの文書にもいろいろあるが、このやり方が素直に思う(L81~)。
次に、Resourcesの参照。UWPのx:UidでLocalizationも含めて対応、というのはまだ。ただ、"x:Static"で簡単に参照できるようになっている。
UWP APIの利用方法も進化中。これまでは、プロジェクトの参照に各種設定していたが、プロジェクトの定義に一行追加するだけでよくなった。"<TargetFramework>"の箇所。ただし、Windows10 1809以上の対応になる。また、GUIで設定はできない。
同じように、WindowsForms APIの利用は、"<UseWindowsFroms>"を設定する。これなしでは、Build時に名前解決に失敗する。SendKeysの利用で嵌まった。
なお、これらの設定をすると、プロジェクト定義のGUIのフレームワークの箇所は、未選択状態になる。
他には、"MergedDictionaries"の定義ができるようになった。これで、Styleの定義などがやりやすくなる。
UWPでバックグラウンド処理を時間間隔で起動 ― 2021年02月09日 11:41
UWPでバックグラウンド処理を用意し、一定時間間隔で起動する手順は、MSやStack Overflowあたりでも、かなり詳しく説明されている。とはいえ、あちこちの情報を整理して実装する必要があるので、備忘までに。
バックグラウンド処理の登録。
・時間間隔起動なのでTimeTriggerの用意。(L.166)
・サイトから画像を取り込むので、インターネットが使えることを条件に設定。(L.171)
・UIが開いているときは、情報を更新する必要があるので、完了時のハンドラを登録。(L.178)
・バックグラウンド処理に渡す情報を、ApplicationData.Current.LocalSettingsを介して渡す。ここでは壁紙に設定する火山のコード。(L.180)
バックグラウンド処理の本体。起動するとRunが呼び出される。
バックグラウンド処理が完了したときに、ハンドラから呼び出される処理。別スレッドにいるので、Dispatcher.RunAsyncで処理。UIを更新。
アプリのUIが最小化されているときは、フォアグランドの処理は中断(Suspend)されているので、上のOnCompletedでは、処理されない。中断が解除されたときにハンドラから呼び出される処理にて、改めてUIを更新。
UIの更新処理。バックグラウンド処理が更新した情報をApplicationData.Current.LocalSettingsを介して返してもらう。基本的な型しかサポートされていないので、Classの中身をバラして設定。ここでは、ダウンロードして保存した、壁紙に用いる画像ファイルの情報。フォアグラウンドとバックグラウンドでは、同じClassでも異なるobjectになっているので、情報を同期する。
火山壁紙 - アプリリリース ― 2021年02月09日 08:29

「火山壁紙」の名称で、ユニバーサルWindowsストアアプリをリリース。気象庁の火山監視カメラの画像を、時折、楽しみに見ているが、いっそ壁紙にできたら、ということで作成してみたもの。気象庁のサイトで提供される画像の解像度は低めなので、少々粗いが、ときに、驚くような絵が得られるので楽しい。
対象の火山は全てでなく、解像度が高めで、空が広いものをピックアップ。メンテナンスで絵がホワイトアウトすることが偶にある。
※アプリのページ
開発時間は、35時間ほど。HttpClientを用いて気象庁のサイトにアクセスし、得られたHTMLから画像のURLを正規表現で抽出し、ダウンロードしたファイルを壁紙に設定する。このため、サイトの仕様変更ですぐに動かなくなるが、ご容赦。
更新間隔を指定しての自動更新は、当初、ThreadPoolTimerを用いていたが、UIを最小化すると止まってしまうので、Background Taskとして実装。時間起動を実現するTimeTriggerは、最小間隔が15分なので、動作確認に時間がかかる。ForegroundとBackgroundの情報のやりとりは、ApplicationData.Current.LocalSettingsを利用。既定の型しか使えないので、ClassのPropertyをバラしてやりとり。

お薦めの第一は、阿蘇山。今も噴煙を上げ、雄大。東の空で朝日が美しい。

霧島山の韓国岳は、火口を上から見下ろす視点が唯一。

東日本では浅間山もなかなか。

もちろん富士山も。頂上付近の絵なので、雄大さは少々欠けるけども。
プライバシーポリシーとサポート情報 - 火山壁紙 ― 2021年02月03日 09:15
本アプリについて (About this app)
このアプリは、気象庁の火山監視カメラが提供する火山画像をWindowsの壁紙に設定します。
一覧に用意しているのは、サイトが提供する全ての火山についてではなく、解像度が高く、空が広く、電線などの障害物が少ないものを抜き出しています。
なお、カメラのメンテナンスなどにより、画像が得られない場合があります。また、気象庁のサイトの仕様変更により、アプリが動作しなくなることがあります。
※アプリのページ
プライバシーポリシー (Privacy statement)

対象アプリ;火山壁紙
本アプリの製作者である The Fourteenth Lab (第十四工房) は、本アプリによって、お客様の個人情報およびプライバシーに関する情報を収集しません。
サポート情報 (Support)
ご質問や不具合のご連絡は、このページの「コメント欄」をご利用いただくか、「このブログについて」に記載の連絡先までお願いします。
あらかじめのおことわり (FAQ)
1)本アプリの製作者は、気象庁のサイトの利用者である以上に、気象庁とは特段の関係はありません。
2)サイトで提供される火山監視カメラの解像度は、640x360程度です。大きなディスプレイでは、壁紙に設定したときに画像が粗く感じられるかもしれません。
利用するツールや文献 (Reference)
1)気象庁、火山の観測データ、監視カメラ画像のサイト
ComboBoxのSelectedValueの型の怪しい挙動 ― 2021年01月30日 16:57
UWPにて、ComboBoxを定義。
項目選択時のSelectionChangedイベント処理にSelectedValueを使ってみる。
MS Docの記述例では、AddedItems[0]を用いているものもあるのだけど。
動かしてみると、XAMLの初期化時の呼び出しで、型不一致の例外。
デバッガの変数表示を見ると、SelectedValuePathが未定義。
SelectedValueには、IDを定義するクラスであるIntervalItemのインスタンスが設定。
苦し紛れだが、そこのところを、型チェックで除外。
すると、UI初期化完了後の呼び出しでは、SelectedValuePathはXAMLの定義通りに設定され、SelectedValueにはIntervalItemのプロパティであるIDが正しく設定されている。
なんとも怪しげ。まだ、こんなのがある。

























最近のコメント