HubSection内のコントロールの更新2015年07月18日 15:46

今回は、簡単なゲームでも作ってみようと、ゲーム画面を構築後、入口となる画面をHubで作り始める。MSのデザインガイドによると、アプリの入口としておすすめらしい。

それらしいUIを作った後、HubSectionに埋め込んだTextBlockのText文字列を更新するコードを書こうとしてはまる。通常、コード入力時にx:Nameで定義されたXAML要素を入力すると、補完が働くが、動作しない。

少し調べると、HubSectionの内容は、DataTemplateとして定義されるので、コードからは直接のアクセスはできない。HubSectionの名前まではアクセスできるので、以前やったようにFindNameで目的のTextBlockを検索してみるが、これもだめ。MSの開発者Forumには、VisualTreeHelperを用いる例が掲載されているが、このやりかたは少し悔しい。


Application.Resources

ふと思いついて、Application Resourceを介したやり方を試してみる。表示するデータを保持するclassを定義した後、このclassをApp.xamlに定義する。

class定義

class定義では、プロパティにgetterの定義を忘れないこと。debugで手間取る。ここではまるとは情けない。

HubSection

画面を定義するMainPage.xamlのHubSectionにて、TextBlockのTextをBindingでStaticResourceから取得するように定義する。赤枠の部分。緑色の四角の中に3つのTextBlockを設けている。XAML Designerでは1つめのTextBlockのみ表示されている。

MainPage.xaml.cs抜粋

コードを記述するMainPage.xaml.csでは、5行目でResourceからオブジェクトへの参照を取り出した後、最後の行で表示したい値を設定する。

HubSection更新の動作例

実際に動かしてみたところ。意図したとおり、表示できている。

P.S.
roamingSettingsまわりのコードは虫だらけなので、見ないで。

2015年07月18日 18:24


桜

少し季節外れ。購買予定リストに載せたのは春だった。NHKのサイエンスZEROでも桜を取り上げた回があったので、そのときだったか。分類学の話など、語らずにはいられないが、多くの読者には興味が薄いであろう記述がやや目立つが、身近な木のことでもあり、興味は尽きない。歩き旅の身には、次の春は山に野生の桜を訪ねていきたくなる。

※サイエンスZERO、桜の回

ウワミズザクラ

桜花がほとんど散った遅い春に札幌郊外の森林総研を散策したときに見つけたウワミズザクラ。サクラと名がつきながら、サクラに見えない木の謎も解けた。

はぐらうりにまくわうり2015年07月19日 12:35


はぐらうりにまくわうり

近所の青果店を覗くと、はぐらうり(緑)とまくわうり(黄)。まくわうりは懐かしい。はぐらうりは千葉あたりの瓜らしい。どちらも、メジャーではないが、その季節に探せばあるものだ。

冷やして切ったまくわうり

まくわうりは切ってから冷やしておく。甘みは低いが、後味がいい。メロンは後味が少々くどいので、こちらの方が好み。

はぐらうりの浅漬け

はぐらうりは、薄切りにして軽く塩で漬けてから、酢とめんつゆで漬けなおす。きゅうりと違い、ぱりぱり感はないが、独特の香りがなく、食べやすい。店頭に並ぶ間は、こちらにしよう。

VisualStudio 2015 リリース2015年07月21日 11:21

2015年7月20日、VisualStudio 2015がリリース。日本時間だと夜。さっそく、日本マイクロソフトでは、ニコニコでイベントをしていたが、深夜なのでパス。

VisualStudio 2015 Pro

朝、改めてMSDNのSubscriptionからダウンロードして、インストール。

スタート画面

起動後のスタート画面。ぱっと見て、2013と大きくは変わらない。先にプロダクトキーを取得しておいたせいか、プロダクトキーを改めて聞かれることもない。MSアカウントのログインで一緒に処理してくれたのかも。

Windows8.1ツール

VisualStudio 2013で開発中のソリューションを開こうとすると、Windows8.1ツールのインストールを求められる。インストール後、ソリューションを開いて、何事もなく編集、デバッグを実行できる。開発途中のツールの切り替えも問題なさそう。

ライブコード分析

少しさわって便利そうなのは、ライブコード分析。コードの左端に電球が現れて、修正のアドバイスをしてくれる。少々、お節介が過ぎることもあるようだが、参考にはなる。また、プロパティやメソッドがどのくらい参照されているか、誰が最近編集したか、何回変更されたか、などの表示が現れる。後者は、VisualStudio Onlineと連携しているため。

診断ツール

もう一つは、テスト実行での診断ツールの使い勝手が向上している。標準で右側に表示が現れ、メモリやCPUなどの利用状況を表示してくれる。これまでは、別に起動するツールだったものが、統合された。

VisualStudio 2015 メモリ所要量増加2015年07月23日 17:31

VisualStudio 2015に環境を移行して、ちょっとした使い勝手がよくなっているのに感心しつつ、デバッグのためにシミュレーターでテスト実行すると重い。見てみるとメモリ使用量がずいぶんと増えている。

VisualStudio 2015 メモリ

VisualStudio 2015を起動し、ソリューションを開き、シミュレーターでテスト実行したときの状況。2.3GBほどメモリを使用している。これまで、2.5GBの仮想マシンで作業をしていたので重いはず。取り急ぎ、3GBにメモリを増やして様子を見る。プロファイラーも走っているのでCPUもそれなり。

VisualStudio 2013 メモリ

こちら、同じことをVisualStudio 2013で実施したときの様子。1.6GBほどしか使用していない。まあ、いろいろ機能も増えているので当然といえばそうだが、メモリ2GBほどの開発機ではメモリを増やす必要がありそう。

それから、少し前にかいたXAMLデザイナの動きが怪しくなる件、VisualStudio 2015では、発生していない。".suo"ファイルもなくなっている。

※VisualStudio Online使用でXAMLデザイナの動作が怪しくなる

MediaElementで効果音2015年07月26日 14:19

ゲームには、効果音があったほうがいい。と、XAMLにMediaElementの定義を行う。

MediaElementのXAML定義

ところが、鳴らない。いや、鳴るときもある。ページを切り替えるとまた鳴らなくなる。しばらく経つと、ページ切替を伴わない処理では安定して鳴る。音声ファイルの形式を疑うも、MSのゲームに添付されているものに合わせても症状は変わらない。

MediaElement.CurrentStateの変化をイベントハンドラーで捉まえ、Debug.WriteLine()で追いかける。ページ起動後、一斉にOpeningになり、PausedやClosedになるが、少々時間を要す。

MediaElementはUI要素なので、ページ切替で都度初期化される。初期化されてしばらくは、音声ファイルの読み込みなどが非同期で行われ、完了するまでは鳴らない、と考えられる。音声の準備が出来てから、ゲーム画面をReadyにしたい。

MediaElementのコード定義

そこで、MediaElementをページのXAMLに記述しないで、コードで作ってみる。効果音を司るclassを設け、ページ切替の度に初期化されるのを防ぐ。主たる処理はSetSndSource()に任せる。

MediaElementの各種設定

ここでは、音声ファイルの読み込みに時間を要していると考え、awaitで完了を待ってみる。


ただし、バッファリングを待つ術がない。Play()は、voidなので、awaitで待てない。


これで、ほとんどは鳴るようになった。それでも、一番最初のゲーム開始を告げる効果音は鳴らない。2回目からは鳴る。

ただし、副作用が生じる。イベントハンドラがイベントを拾わなくなる。先のDebug.WriteLine()の出力もない。デバッガでブレークポイントを設定しても止まらないので、そもそもイベントが通知されていない。MediaElementはUI要素なので、ページのUI構造(ツリー)に登録しないと、イベントが降りてこないのだろう。

MediaElementのXAML定義ダミー

試しに、XAMLにダミーのGridを用意して、コードで登録すると(3つ前の図の末尾のコメント)、イベントを拾える。反面、ページ切替の度の初期化から逃れられず、鳴らない率が増える。

これ以上は、別のサウンドライブラリを使うなり、Unityで開発する方がよさそう。

HubのScrollToSectionが動作せず2015年07月27日 07:40

Hubは横に長くなるので、前のページで表示するHubSectionを指定して、ページ切り替え後、指定のHubSectionが表示されるようにしたい。

HubのScrollToSection

HubのScrollToSectionを使えばできそうだが、動かない。デバッガで引数を確認しても問題ない。MSDNのサンプルと比較しても違いが見つからない。検索で見つかるコードサンプルも同じ方法を紹介している。MSのゲームで「遊び方」の動きを見ているとできそうなのに。

結局、Hubのプロパティ DefaultSectionIndexを制御することで対処(赤の下線)。指定のセクションの番号を事前に入れておけば、目的のSectionが表示される。

Windows10 ダウンロード開始2015年07月29日 18:49

Windows10提供開始のアナウンス。MSDNのサブスクライブのサイトにも午後には登録。最初は、MSDN Proでは、Enterpriseしか対応していません、という状態だったが、夕方に見てみると、通常バージョンもダウンロード可能に。

Windows10 ダウンロード開始

さっそく、ダウンロード開始。64bit版は、4GB弱で、今のところ2時間コース。おっと、今見たら、遅くなって6時間コースになるか。

とりあえず、テスト環境にセットアップして様子見。今回は、リリース形態がずいぶん異なるので、品質面は少し懸念あり。使用しているソフトウェアの動作確認が取れてから、主機は切替。RolandとBlackmagicあたりが常連の曲者。

開発環境は、その前に10にして、UWP対応の開発に進みたい。こちらは、VS2015が動けばいいので。

P.S.
結局、初日は途中で接続が切れて、ダウンロード失敗つづき。翌朝、無事完了。