もぐらたたきゲーム WindowsPhone8

もぐらたたきゲームのWindowsPhone8版をリリースしました。
Windowsストアアプリ版をWindowsPhone8に移植したものです。

もぐらたたきWP8
もぐらたたきWP8

シンプルなもぐらたたきゲームです。
1分以内にガンガン叩いてください!!
ちょっとした時間のお遊びや気分転換にどうぞ!

WindowsPhone8 Application
Download-JP-Small.png
対応言語:日本語、English、簡体字中国語、espanol

コードスニペット

プロパティの記載が一々同じことを書かないとで面倒だなーという部分を「コードスニペット」としてまとめると便利です。
通常の「prop」だと「public int MyProperty { get; set; }」だけで、これはこれで楽なのですが、制御部分もという場合は物足りません。

MSエヴァンジェリストの高橋忍氏作成された【Dependency Property for Windows Phone コードスニペット】これをベースに改造をして「添付プロパティ」としてコードを展開するようにしました。
ファイルはテキストとして「DependencyPropertyWP.snippet」で保存しますが、文字コードをutf-8で保存しましょう。
マイ ドキュメントの「Visual Studio 2012\Code Snippets\Visual C#\My Code Snippets」に保存してください。
VS内でpropwp2[tab]で使用できます。

Windowsストアアプリで使用する場合は「[System.ComponentModel.Description(“説明文”), System.ComponentModel.CategoryAttribute(“タブ”)]」はコメントアウトすればOKです。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2008/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Dependency Property for Windows Phone</Title>
      <Shortcut>propwp2</Shortcut>
      <Description>Dependency Property for Windows Phone コード スニペット</Description>
      <Author>shinobu takahashi / CryEarth tomoyuki sasaki</Author>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>type</ID>
          <ToolTip>プロパティの型</ToolTip>
          <Default>int</Default>
        </Literal>
        <Literal>
          <ID>name</ID>
          <ToolTip>プロパティ名</ToolTip>
          <Default>MyPropName</Default>
        </Literal>
        <Literal>
          <ID>ownerclass</ID>
          <ToolTip>このプロパティを定義しているここのクラスです</ToolTip>
          <Default>ownerclass</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[[System.ComponentModel.Description("説明文"), System.ComponentModel.CategoryAttribute("タブ")]
	 public $type$ $name$
        {
            get { return ($type$)GetValue($name$Property); }
            set { SetValue($name$Property, value); }
        }

        public static readonly DependencyProperty $name$Property =
            DependencyProperty.Register(
				"$name$",
				typeof($type$),
				typeof($ownerclass$),
				new PropertyMetadata(   // メタデータ
					"",		// デフォルト値
					new PropertyChangedCallback(On$name$Changed)) );

	private static void On$name$Changed(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            $ownerclass$ userControl = obj as $ownerclass$;

            if (userControl != null)
            {
                $type$ newValue = ($type$)e.NewValue;
            }
        }

$end$]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

メモリ容量を意識しよう

WindowsストアアプリやWindowsPhoneアプリはガベージコレクション(GC)により、メモリ管理は比較的自動化され、あまり気にしなくてもよいようになっていますが、個人的にはGCにべったりではなく自分でメモリ容量を認識しながらアプリを作るべきではないかと思います。
GC管理されているからとメモリの使用量を気にかけずに開発すれば、それはメモリ不足などを引き起こし、アプリの停止や強制終了を起こします。

こういった現象を起こさないためにも、自身のコードやデータがどれだけのメモリを使用し、さらに使いそうなのか、どこでメモリの強制解放をすることでほかの部分に影響を与えずにメモリを適切に使うことができるかを見ていくべきでしょう。

必要ないデータは解放する、画像データやDBデータを必要な容量だけ使用するようにして、適時入れ替えるようにするなど単純なことですがこれらを意識してデータの最適化や、コードの最適化を図っていくようにしましょう。

何でこんなこと書いたかといえば、自分が作成したアプリでやらかしていたからです。
現象は解消して提出したので、問題なく公開されましたが、気が付いていなかったらリジェクトされた可能性または使用された方から指摘されたかなと思います。

たとえば、カメラを使用したアプリや画像を一覧表示するようなアプリの場合、保存用の大きな画像と一覧に表示する小さな画像をそれぞれ用意、生成しておき使い分けることでメモリの抑制になると思われます。

アプリ作成の際気にかけてみてはいかがでしょうか?

Nokia Imaging SDK

Nokia Imaging SDKというWinodwsPhone8用のフィルタ/エフェクトが公開されているようです。

さらっと流し読みですが、Nokia以外の端末でも使えるけど絶対使えるとは限らない、使う場合はCopyright表記を書くことという形のようです。

Nokia Lumia 1020が出たことでレンズ、カメラアプリが望まれるだろうからSDKで盛り上げてほしいという感じかな?

Unity4.2が出てた

学習用に入れてたんですが、Unity4.2が出ていました。
大きな違いとしては「WindowsStoa」と「WindowsPhone8」向けのbuildが可能になったようです。

unity

buildの際に、専用のフォルダを作成して指定しないとbuildされないような気配です。

作製すると、VS2012用のソリューションファイルが作成されているので、VSで開き、WindowsPhone8実機に転送実行になります。

吐き出したUnityPlayerがARMのみのようなため実機(デバイス)での実行に制限されるようです。

ストアアプリ向けbuildを試したところ、エラーが発生して作成できませんでした。
エラーが文字化けしているため何でエラーなのかがちょっと不明ですが、ArrayList、Hashtableで起きています。
WP8用にbuildした際は通っているので、何かしらの制限かとも思うのですが不明です。

Unity勉強しないとな、、、

多言語対応アプリ提出時の注意点

Windowsストアアプリ/WindowsPhoneアプリを多言語に対応させてストアへ提出する場合の注意点。
・スクリーンショットは全言語用に同じだけ用意する。
・スクリーンショットの説明は全言語で共通の内容を翻訳して記載する。

プロモーション画像やタイトルアイコン、スプラッシュ画像はよほどでない限り共通でも行ける模様。
・タイトルに漢字を使って目立たせてるのでなどの理由は必要だと思いますが、可能でした。

後から言語を増やした場合は、すでに登録済みの言語に対しての更新内容に「対応言語を増やしました」という記載をしたほうがよい。
・追加した言語は「最初の公開」でも大丈夫でした。

indexを指定可能なIntデータCollectionProperty

collectionなPropertyにIndexを指定して通知したい場合に下記のように行う
通常ではIndex指定でやり取りはできないと思うのでメモがてら

    /// <summary>
    /// IntデータcollectionProperty
    /// </summary>
    public class CollectionDataProperty : CryEarth.lib.cryearthlib.NotifyPropertyChangedMethod
    { 
        private readonly Collection<int> items = new Collection<int>();

        public CollectionDataProperty()
        {
            items.Clear();
        }

        public int this[int index]
        {
            get
            {
                // indexの境界チェック
                if (items.Count < index)
                {
                    return 0;
                }
                return items[index];
            }
            set
            {
                //indexの境界チェック
                if (items.Count < index+1)
                {
                    items.Add(value);
                }
                else if (items[index] == value)
                {
                    return;
                }
                else
                {
                    items[index] = value;
                }
                OnPropertyChanged(ITEMS);
            }
        }

        private const string ITEMS = "Item[]";
    }

Windows ストアアプリ開発の情報

@shinoblogavi さんのツイートで、Windows ストアアプリの画面設計に使えそうなものを教えてもらえました。

VS2012 Ultimate、Visual Studio Premium、または Visual Studio の Test Professionalをインストールしている場合、PowerPoint のストーリーボード図形にUIデザインできるストーリーボード図形が同梱されている。
Windows8、WindowsPhone、iPhoneなどがありました。

Windows ストア アプリの PSD 設計資産のダウンロード
http://msdn.microsoft.com/ja-jp/library/windows/apps/hh700403.aspx

高橋 忍のブログ
UX & モバイル、全ては心でエバンジェリズム♪
Windows 8 UIデザインシート
http://blogs.msdn.com/b/shintak/archive/2013/04/15/10411038.aspx

Windows Phone UI デザインシート
http://blogs.msdn.com/b/shintak/archive/2013/04/15/10411097.aspx