ちーたんタッチボードを使ってExcelで現在日時を1キーで入力する

image ちーたんタッチボードでボードをカスタマイズされている方はもうご存知かもしれませんが、ちーたんタッチボードではキー1つに対して複数のキー押下を割り当てることができます。設定の仕方とか説明すると長くなってしまいますのでホームページのほうを見ていただければと思いますが、キーのパラメータの「Processes」に値を設定することによって、その動作を行うようになります。 image で、Excel のセルに現在日時を1発入力させるには以下のパラメータを設定することによって可能です。Processes はあくまでもキーの同時処理がメインなので、順番に処理させるのは得意ではないのですが、少し裏技的な設定で可能です。

[{"KeyType": "LeftCtrl"},{"KeyType": "OemSemicolon"},{"KeyType": "LeftCtrl", "ExecuteTiming": "Pressed"},{"KeyType": "Space"},{"KeyType": "LeftCtrl"},{"KeyType": "Colon"},{"KeyType": "LeftCtrl", "ExecuteTiming": "Pressed"},{"KeyType": "Enter"},{"KeyType": "Up"}]
ここでミソなのが、セミコロンを入力した後に再度 Ctrl キーを押すようにしています。パラメータ「ExecuteTiming」に「Pressed」を指定することによって押下した直後にリリースさせることができます。一番最初の「Ctrl」は実際にキーを指から離すまでずっと押下が有効になってしまうため、後ろのスペースキーにも影響してしまいますが、その前に Pressed で離す動作を入れることによって Ctrl キーを強制的に無効にしています。 後はショートカットキーの流れで実行しているので現在日時が入力されるというわけです。後ろ2つで Enter と Up を指定していますが、現在日時を入力しただけではセルの入力が確定していないので、Enter キーで確定させ、選択が1セル分下に移動するので↑キーで戻すようにしています。この辺りは必要であれば入れたり外したりしてください。 ちなみにこのパラメータを指定すると、キーボード的には下のような流れの動作になります。
  1. Ctrlを押す
  2. セミコロンを押す
  3. Ctrlを押す
  4. Ctrlを離す
  5. スペースを押す
  6. Ctrlを押す
  7. コロンを押す
  8. Ctrlを押す
  9. Ctrlを離す
  10. Enterを押す
  11. ↑を押す
Ctrlキーを2回押すという物理的にはあり得ない動作になっていますが、そのあとのCtrlを離すできちんと離したことになるみたいです。 あと、このキーを押しっぱなしにするとセミコロンとコロンが入力されてしまうという動作になってしまいますので、押すのは1回だけにしてください。 image ※問い合わせていただいたサンプルキーを使っています。]]>

Windows 7 + IE11 の環境で ASP.NEt Web サイトプロジェクトを実行したときに IE の画面が真っ白になる現象を治す方法

メモです。

以下のパターンのいずれかを試す。

  • スタートから「Internet Explorer」を検索し、アドオンなしで実行する
  • タスクマネージャーを開き、「iexplorer」をすべて削除する
]]>

JSON テキスト整形 Web アプリ作りました

.NET Framework の標準機能でオブジェクトを JSON にシリアライズすると、改行やインデントのない1行の JSON テキストとして出力されるのですが、さすがにそのままだと見づらいので、プログラムで JSON テキストを解析して改行やインデントを付加し、見やすくしてたりしていました。

というのをずっと前に実装していたのを忘れていて、この機能ほしいなーと思っていたら、そういえばなんかそういうの作ったことあった気がするなー、と思い出しました。

ほかのサイトでも JSON の整形をやってくれるところはあるのですが、せっかくメソッド1個呼べば整形できるプログラムがあったので自サイトにもあってもいいかなと思って作ってみました。

とりあえず仮で作ったのでβ版開発室においてあります。本アプリとしてリリースするかはまだ決めていませんが、使ってみたい方は使ってみてください。

使い方は簡単で、JSON テキストを入力テキストエリアに張り付けて変換ボタンを押せば出力テキストエリアに整形された JSON テキストが出力されます。

変な形式でなければたいていはきちんと出力されるはずです。変な形式だと変なテキストが部分的に返されるはずだと思います。特別構文のチェックを行っているわけではありません。

]]>

しゃべりながらゲーム制作やってみます #26 Ver 0.20 公開!

ゲーム開発中デモ版 Ver 0.20 を公開したので、その改修内容や変更点について説明をしています。作るにあたって気を付けた点や、Ver 0.20 の内輪話などもしています。

ゲーム画面を実際に動かして説明しているので、画質が悪いです。ご了承ください。(エコ回避で動画イサイズを小さくしているので)

ほんとは昨日のうちに公開できるはずだったのですが、なぜかエンコードするとツールがエラーで落ちまくっていたので、四苦八苦しながら作って遅くなりました。

]]>

ゲーム開発中デモバージョン Ver 0.20 を公開しました!

結構時間が経ってしまいましたが、ようやく Ver 0.20 を公開しました。公開 URL は以下のページになります。

2016-03-06 15_41_45-Greenshot_600px

前のバージョン 0.10 と同様にデモ版の公開は Silverlight での動作になります。なのでゲームをプレイされる方は Windows かつ IE11 でページを開いてください。ほかの OS やブラウザの場合、設定などで動かすことはできるかもしれませんが確認はしていません。(例えば Google Chrome では絶対動かない、FireFox は設定変えれば動くなどがあります。)

また、今回のバージョンからゲームを GPU で動かすようにしたので、初めてプレイされる方は Silverlight の設定を変える必要があります。変更手順についてはゲーム公開ページの下のほうに記載しましたので、その手順で変更をお願いします。

そのほか操作方法や、Ver 0.10 からの改良点なども上記のページに記載してありますので、ぜひ遊んでみてください!

]]>

ゲームデモ版 Ver 0.20 について

結構時間がかかってしまいましたが、ようやく公開できそうな段階まで出来上がってきました。都合がつけば今週中ぐらいにはアップできると思いますが、仕事がやたら忙しいため、下手すると次の週末になりそうな予感もしています(実際その確率のほうが高い)。

変更内容とかは公開したときに書きたいと思いますが、Ver 0.20 からは GPU 処理に代わりますので、ゲームを始める前に1回 Silverlight の設定を変更する必要があります。変更方法については公開後に、該当ページに説明を入れておきます。1回設定すれば、ほかのバージョンを公開した場合でも再設定の必要はありません(同一ドメインならそうだった気がします)。

パフォーマンスは想定していたよりはいい感じです。まあ結構アルゴリズムの最適化を行ってきたのでそうでないと割と困るのですが(^^;)。一応持っているデスクトップPCとノートで動かしてみましたがほぼ問題ありません。どちらも割と高スペックなのであまり参考にはならないのですが…。試しに DELL の Venue Pro 8 のタブレット PC でも動かしてみたのですが、たぶん 30FPS ぐらいでスムーズに動いている感じでした。ただ Ver 0.20 はまだキーボードしか対応していないので、ちーたんタッチボードを起動して無理やり操作したのですが。

続きは時間が取れた時に。下に載せたイメージは開発中の画面です。

2

]]>

Silverlight で XNA のコンテンツプロパインを使うためのプロジェクトファイルへの追加書き込み

なんか毎回忘れているのでメモ書き。

csproj ファイルをテキストファイルで開き、Project タグ以下に以下のタグを追加する。

<PropertyGroup>
   <XnaContentProject>..XXXXSampleContentProjectXXXXSampleContentProject.contentproj</XnaContentProject>
</PropertyGroup>
<Target Name="BeforeBuild">
   <MSBuild Projects="$(XnaContentProject)" Properties="XnaContentPipelineTargetPlatform=Windows;XnaContentPipelineTargetProfile=Reach" />
   <CreateItem Include="$(XnaContentProject)">
     <Output TaskParameter="Include" ItemName="XnaContentProjectItem" />
   </CreateItem>
   <CreateProperty Value="%(XnaContentProjectItem.RelativeDir)">
     <Output TaskParameter="Value" PropertyName="XnaContentProjectPath" />
   </CreateProperty>
   <CreateItem Include="$(XnaContentProjectPath)cachefile*targetpath.txt">
     <Output TaskParameter="Include" ItemName="XnaContentCacheFile" />
   </CreateItem>
   <ReadLinesFromFile File="@(XnaContentCacheFile)" Condition="Exists(@(XnaContentCacheFile))">
     <Output TaskParameter="Lines" ItemName="XnaContentOutputs" />
   </ReadLinesFromFile>
   <CreateItem Include="@(XnaContentOutputs->'$(XnaContentProjectPath)binAnyCPU$(Configuration)%(Identity)')" AdditionalMetadata="Link=Content%(RelativeDir)%(Filename)%(Extension)">
     <Output TaskParameter="Include" ItemName="Content" />
   </CreateItem> </Target>

ただし、プロジェクトをビルドしたりなんかしているといつの間にか以下のようなコメントが csproj ファイルの中に追加されていて、前に追加したタグもすべてコメントアウトされていることがある。

To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.

実はコメントアウトされたタグの下にまったく同じタグが再度追加されているが、なぜかこのコメントアウトされたものが残っていると正しくコンテンツパイプラインが動作しない。なのでコメントをすべて削除して再ビルドする必要がある。

メモ書きなので環境によっては動作が異なる場合があるので注意してください。

]]>

ゲーム開発進捗 2016/02/12 またまたGCとパフォーマンス

どういった場合に GC の対象となるか調べてコードをいくつか改善してみました。おおざっぱなキャプチャしかとってなかったのであんまり参考にならないですが、改善前はこんな感じ。

2016-02-07 11_11_05-CpuGameDanke1UAP - Microsoft Visual Studio

10秒の間に2~4回ぐらい GC が発生していました。

改善した結果がこちら。

2016-02-11 20_12_39-CpuGameDanke1UAP - Microsoft Visual Studio - コピー

10秒に1~2回ぐらいまで抑えられました。まだ改善できそうな箇所があるのでもう少し頑張ってみます。

まあ GC の発生を改善すれば処理速度向上するかなーと思ってたんですが、気持ち程度でしたね。ただ、確実によくはなっていると思います。

とりあえず現状のパフォーマンスでユニットをたくさん出してみました。

2016-02-11 23_57_23-CpuGameDanke1UAP.Windows - コピー

ユニットがどれだけいるかわからないのですが、一応開発マシンでは FPS が 50~60 でている感じです。ただ、開発マシンはスペックが高く、ノートでやると明らかに落ちているのでまだまだ改善しないといけないですね。というかそもそもこんなにユニット出すのかっていう前提もあるんですが (^^;)

ロジックを最適化する場合、たいていは無駄な判定とか減らすのですが、それをやると正常に動かなくなることが割と多いです。これを直すのに意外と時間かかったりしますね。

]]>

艦これ日和 2016冬 イベント前

今回はささっとだけ書きます。

霞改二乙

大発装備できるようになってからひたすら遠征に回してます。遠征で駆逐艦は必須なので資源 15% プラスはかなりいいです。

あと大型電探が装備できるものいいですね。艦種が固定されている 2-5 任務(軽重駆駆駆駆)に行かせる際、今までは頑張っても夜戦装備が探照灯だけだったのが、霞改二乙に32号対水上電探改を装備させることによってぎりぎり照明弾も装備できる余裕ができるようになりました。

KanColle-160207-23073350_2

イベントのための資材

今まではイベントが終わった後、余ってた資材をすべてまるゆ建造に回していたのですが、前回のイベントで資材が結構余ってしまったので、今回は逆に貯めてみようかと思って貯めてみました。上の図を見ていただければわかりますが、結構頑張りました。

ボーキサイトが一番たまりにくいので、ボーキサイト任務はキラ付け+大発で常に回していました。バケツが想定していたよりも増えてなく、3000個まで行きませんでした。前イベントからは800個ぐらい増やしています。

今回は資材貯め中心にやっていたので、目立った作業はこのくらいです。駆逐艦が萩風を除いて全員レベル70以上になったということぐらいでしょうか。

]]>

ゲーム開発進捗 2016/02/07 GC とパフォーマンス

来週艦これのイベントが始まるということで、イベントが始まる前にマンスリー任務やEOステージのクリアをやってたのでゲーム開発のほうはあまりはかどりませんでした。それよりもどんどんたまっていくアニメの録画の消化をどうにかしたい…。

さてゲーム開発のほうですが、現在は Ver 0.20 の公開に向けて作っています。ですが、ちょっとパフォーマンスに難ありな状態なので、機能の作りはおいておいてメモリ管理のほうを少しやってました。

Visual Studio 2015 には診断ツールがあり、メモリの使用状況や CG の発生タイミング、メモリのスナップショットなどを見ることができます。

2016-02-07 11_11_05-CpuGameDanke1UAP - Microsoft Visual Studio

ゲームの場合ツール系とは違い、常に処理が回っているのでメモリ(インスタンス)の確保が常に発生します。C言語のような完全なネイティブプログラムの場合、自身でメモリの破棄タイミングを指定しなければならないので、メモリリークさえ気を付ければ GC なんて考えなくてもいいのですが、今回 C# でゲームを作っており、確保したメモリの破棄はほぼすべて GC に任せることになります。

ゲームループ中に GC の発生を抑えることはほぼ不可能です。事前に必要なメモリを確保しておき、その中でやりくりするという方法がゲームでは主流ですが、マネージドなプログラムだと、文字列処理を行うだけで GC 対象になるので相当気を使います。

とは言ってもあまり余計なインスタンスを作成さえしなければ、GC が発生してもゲームに影響することはそんなにありません。上の図で何回か GC が発生していますが、メモリが平行に進んでいる部分のGCは大体ジェネレーション1のものです。1回当たりにかかる時間はミリ秒単位。うまく作ってればコンマミリ秒まで落とせるので支障はあまりないと思います。

ただ、別のシーンに切り替えたときなどに例えば大きな規模の初期化処理などを行うとジェネレーション2が使用されます。これを放置しておくとゲームの最中で突然一気に解放されたりします。これにかかる時間が100ミリ秒単位だったりするので、その間完全にゲームが停止します。リアルタイム性が求められるゲームの場合致命的です。上の図でも途中で一気にメモリが解放されていることが分かります。

変なタイミングで発生されても困るので、初期化処理が終わったらとっとと GC.Collect を呼んで解放してしまうのがいいと思います。

2016-02-07 22_38_37-CpuGameDanke1UAP - Microsoft Visual Studio

プレイヤーが操作中に止まるよりは、次のシーンが始まる前の真っ暗な画面なんかで実行したほうがいいですね。操作中に0.5秒止まるよりは真っ暗な画面で0.5秒止まってたほうが、ユーザーは全然気にならないと思います。

]]>