Windows 10 Anniversary Update SDKを入れた後、UWPのプロジェクトが作成できなくなった。

 プロジェクトを作成しようとすると、以下のエラーが出る。

 

003

 

 ’WinRT.TemplateWizards.ApplicationInsights.Wizard’がアセンブリに存在しないらしい。

 vstemplateで参照したいらしいのでファイルを確認。vstemplateは以下の場所にある。

 

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp\Windows Root\Windows UAP\1041\BlankApplication

 

 中身を確認すると以下の記述が、

 

  <WizardExtension>
    <Assembly>Microsoft.VisualStudio.WinRT.TemplateWizards, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
    <FullClassName>Microsoft.VisualStudio.WinRT.TemplateWizards.ApplicationInsights.Wizard</FullClassName>
  </WizardExtension>

 

 1033のSDKではこの記述が無い。

 試しに上記を削除してみると、あたりまでだが、プロジェクトが作成できた。

 

 これが、正しい対応という気もしないけど、環境依存のレアケースか、後で修正されそうなので、とりあえずメモとして記すだけにして調査終了。

 

追記:どうも Anniversary Update SDKのインストールが上手く言っていないようで、UWPのプロジェクト作成時の対応するバージョンの選択肢が以下の画像のようになってしまっていました。

 

004

 

 別環境を作成して、0からVisual Studioの最新をインストールした場合は以下。

010

 というわけで、今回のエラーを根本的に解決するには、VSまるごとじゃなくて、更新用のSDKだけインストールする際のエラーを解決する必要がありそう。

 .templateを触るのはどうしても、今すぐエラーを直してプロジェクトを作成する必要があるんだー(かつ捨てプロジェクト)という場合のみが良さそうです。

 

 


 住所入力処理を効率アップできるコンポーネントJPAddressについての記事を書かせていただきました。

 JPAddress+PlusPackや、JPAddress+Inputmanという組み合わせという提案は、コンポーネントを検討する段階では中々、検証する手間を取りづらいはずです。そんなときに、本記事を見て「こういう機能提案も可能」という検討に役立てていただければ幸いです。

 

 CodeZine:JPAddressを用いて、さらに優れた住所入力フォームを作成しよう

 

 


 標準のフォントサイズは24とデフォルトだと少し大きめです。

 これを変更するには、初期化処理あたりに以下の行を追記すればOK。

 

Font.default_size = 20

 

 


 RPGツクール VX Aceの画面解像度はデフォルトでは、画面サイズは544×416です。

 RGSS3スクリプトで変更可能なサイズは最大で640×480。これでも小さいなぁという印象。

 

 dllなどで更に拡大するツールが配布されているようですが、ここではRGSS3で変更する方法を紹介。

 

Graphics.resize_screen(640, 480) 

 

 これで画面サイズが640×480に変更できます。


 タイトルに限らず、戦闘結果系のログを記録したい場合、

 

BattleManager::battle_end

 

 だと、敵情報を格納した$game_troopがnilなので、その手前の

 

BattleManager::process_victory

 

 で、集計を行う。

 倒した敵の数をカウントしたい場合は、こんな感じで、

 

    $game_troop.members.each do |value|
      if $killboard.has_key?(value.enemy_id) 
         $killboard[value.enemy_id] += 1
      else
         $killboard[value.enemy_id] = 1
      end
    end

 

 $killboardは別の場所で宣言されている前提です。

 

 enemy_idが敵を表すID。

 $game_troopが敵の集団を表すクラスですね。

 


 2016年7月23日の.NETラボ勉強会のスライドを公開します。

 今回はWindows Mobile回ということで、UWPのXAMLについて調べて発表してみました。

 

 画面定義する仕組みとしてのXAMLはよく出来ているなぁと感じました。同時に色々出来るための複雑さもあります。

 デザイナーが触るという視点だとHTMLはよくバランスが取れているなぁと、セッションで話したのは上記のような感想からでした。

 

Uwpでみるxaml入門 from Makoto Nishimura

 


 RGSS3の組み込みクラスだけでは、できない処理がある。

 例えばマウスの座標を取得したいなど。

 

 その場合、dllを作成してRubyからそれを叩く必要がある。

 

dllの作成

 

 プロジェクトはC++の「Win32プロジェクト」。

 C#でdllを作成したいところだが、Rubyからマネージドなdllはコールできないので、C++を選択。

 

004

 

 特定のウィンドウのマウス座標の取得は少し面倒だが、今回の趣旨ではないので、割愛。需要があったら別途書きます。

 dllは以下のように2つのメソッドを持つものとします。

 

EXPORT int getMouseXpos();
EXPORT int getMouseYpos();

 

 ビルドで生成したdllをRPGツクール側のSystemフォルダ以下に配置します。

 

dllを呼び出す

 

 RGSS3側でdllの読み込みと、メソッドの呼び出しを記述します。dllはhoge.dllというファイル名とします。

 

#dll読み込み
xPosAPI = Win32API.new('System/hoge', 'getMouseXpos', nil, 'i')
yPosAPI = Win32API.new('System/hoge', 'getMouseYpos', nil, 'i')

#メソッド呼び出しのサンプル
while 1 do
    x = xPosAPI.call()
    y = yPosAPI.call()
    p "X = " + x.to_s + "/ Y = " + y.to_s
end

 

 サンプルはループを抜けずにずっとマウス座標を取り続けるので、実際に使う場合は用途に合わせて修正してください。

 


 タイトルの通り、RPGではよくある洞窟や街の壁を通り抜けるあれの実装方法について。

 RPG Maker VX Aceのマップは実質2層なので、キャラクターの上に壁を配置して、その下を抜けるということができない。

 というわけで、一工夫を考えてみた。

 

イベントでプレイヤーの座標を移動させる

 

 イベントでプレイヤーの座標を移動させる方法。

002

 壁の手前から「場所移動」イベントで、壁の向うに移動させる。

 ちょっと、よくあるRPGとは違う動きになるが、楽なのはこの方法。

 

透明なハシゴを移動させる方法

 

 マップタイルを工夫して、通りぬけ可能な壁を追加する方法を考えたが、これだと、壁の種類ごとに通り抜けれる壁を用意しないといけないので、壁の上に配置できるハシゴの仕様で透明なタイルを用意することを考えた。

 下画像のタイル右下にある透明なタイルの一つに梯子属性をつけた。ちょうどダウンロード購入したマップセットに透明な空きタイルがあったので、利用したが、そうでない場合はタイルセットをカスタマイズして、透明なタイルを用意しなければいけない。デフォルトのタイルにも透明なタイルがあるが、それは使い道があるので、残して置いたほうが良い。

 これを壁の上に接地すれば、その位置は通過できる。ただし、キャラクターは壁の上を移動するので、通過時にキャラクターを透明にして、壁から抜けたときに透明を解除する必要がある。

003

 

 注意:壁を通る際、通過可能にした部分の上下左右の壁に移動できることがあるので、意図しない位置に移動できてします場合は、逆に通行不能な透明なタイルを重ねると良い。