ViewBox下でManipulationを行う場合

Viewbox>Canvas>UIElement
画面サイズに左右されないように、上記のような構成で行っているの場合が多いと思います。
この時にManipulationを使用してUIElementを移動させる場合、ずれが出ます。
Viewboxがサイズだけでなく移動距離も変換しているためとみられます。

これを解決する方法としては、Viewboxの変換スケールを取得して、移動量をスケールで除算することで可能です。

private void ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
{
        var scaleX = Viewbox.ActualWidth / Viewbox.Child.DesiredSize.Width;
        var scaleY = Viewbox.ActualHeight / Viewbox.Child.DesiredSize.Height;

        double x = e.Delta.Translation.X;
        double y = e.Delta.Translation.Y;

        x = Canvas.GetLeft(obj) + (x / scaleX);
        y = Canvas.GetTop(obj) + (y / scaleY);
}

0除算チェックなどはしてないコードですが、こんなのでどうにかなります。

個人的には、移動までスケール変換されるのはどうなのかなとは思いますが、仕様ということならしょうがない(;´Д`)

でも、これはこれで修正されるとこのコード入れてるのがおかしくなるだろうから痛し痒し、がらっとバージョン変わった時でないと分離できないかなー

シンプルサッカー戦術ボード for WindowsPhone8.1 リリース

シンプルサッカー戦術ボード WindowsPhone8.1版をリリースしました。
これは先にリリースしていたWindows 8.1 ストアアプリ版をWindowsPhone8.1用に編集、再編したアプリです。

また、このアプリとWinストア版のアプリはuniversalアプリとして連携しています。

シンプルなサッカー戦術ボードアプリです
マグネットを移動出来ます。
また、マーカーで指示記入ができます。
ゴール前ボードに切り替えることが出来ます
Tweet 機能を搭載しています

試用版でも、機能制限は一切ありません。
気に入っていただけたら、ご購入下さい。

WPS_Download_cyan

*対応言語:日本語,English,português,español,italiano,русский,Deutsch,
français,简体中国,한국어

シンプルサッカー戦術ボード

*Simple soccer tactics board
*Simples Placa das táticas do futebol
*Simple tablero de tácticas de fútbol
*Simple tactique de football bord
*Semplice bordo tattiche di calcio
*Einfache Fußball Taktik Bord
*Простой тактики футбола доска
*심플 축구 전술 보드
*简单的足球战术板

Windopws Phone SilverLight 8.1 アプリをuniversal Appとして申請する場合のメモ

Windows8.1ストアアプリ側でInkManagerなどを使用したアプリを作成していた場合、WindopwsPhone SilverLight 8.1(以下WPSL8.1)で、アプリを作成しなければならなくなります。

このWPSL8.1アプリをユニバーサルアプリとして連携させる場合、ひと手間かかります。

sys000

上記のように同じソリューション内にWPSL8.1用のプロジェクトを作成するのが一般的だと思います。

作成はそのまま進めることで問題ないですが、そのままではアプリ登録時の検証でエラーが発生します。

sys001

WPSL8.1用の「Package.appxmanifest」をダブルクリックすると上記のように表示されるので、「パッケージ名」を登録済みWindowsストアアプリの「Package.appxmanifest」からコピーします。

次にWPSL8.1用「Package.appxmanifest」を右クリックし、「ファイルを開くアプリケーションを選択」>「ソースコード(テキスト)エディター」を選択して、XMLをテキストとして開きます。

sys002

「Identity」にある「Publisher=”CN=~”」をWindowsストアアプリの「Package.appxmanifest」、発行者に書かれている「CN=~」をコピーしてペーストします。

これらの書き換えはWindowsストアアプリが登録済みでなければできないので、WPSL8.1アプリを先行させている場合は、更新時に連携設定と書き換えを行う形になります。

WinRTベースのユニバーサルアプリを作成する場合は共有となり「Publisher=”CN=~”」の書き換えなどは必要ないので迷わず行えます。

今回はWPSL8.1アプリで説明しましたが、universal連携そのものはWP7.5/8アプリでも可能なようです。
おそらく同じような方法で連携設定を行うことになるのではないかと思いますが、自分は環境をWP8.1に移行していますので、検証できていないことをご了承ください。

“.AsStream”拡張

よく見失うのでメモがてら

「System.Runtime.InteropServices.WindowsRuntime」を「using」する。

一発でわかるってのは少ないような気がするんだが、引っかかってる人が見当たらないってことは、自分の勉強不足だね orz

忘れてなければどうということはないことではあるんだけどね

//Publish/ ハッカソンに参加していました

2014/05/17-18の二日間にわたって、//Publish/ハッカソンに参加してきました。
//Publish/ハッカソンは全世界で行われており、早いところは金曜~土曜で行われていたため、日本は二番手くらいの開始で行われました。

ハッカソンでは、ExpertとしてMVP/MSPの方々がイベント補佐でアプリを製作しながらいろいろなセッションなどを行っていました。

ハッカソンは徹夜、泊まり込みで作成していいようにイベントスペースで行われていましたが、自分は夜はいったん帰宅して部屋で調べ物など行い、就寝して翌朝再度イベントに向かいました。

当初予定していた、WinストアアプリとWPアプリ間のWi-fi Direct接続するアプリというネタをいろいろ検証しながら仕込んでいたのですが、ハッカソンで相談などした結果、現状できないのではないかというところになり、ネタを変更しました。

最終的に選択した画像をゲーム風ステータス表示するというどこかでありそうなネタにしました。
Win/WPのuniversal Project Appsで作成してWP版はハッカソン中に承認が降りて掲載されています。
Win版は現在申請中です。

そしてWP版なんですが、Releaseモードでのデバッグや最終的なスクリーンショット生成時は動いていたのですが、発表時にはうまく動かないという状況になりました(汗

なんとか原因を調べて安定させたものを再申請しようとは考えております。

二日間、ハッカソンに参加された皆様、運営の関わった皆様、会場提供の会社様、ありがとうございました。
そして、お疲れ様でした。

Action<in T>のメモ

Action<in T>はdelegateで単一パラメーターの戻り値を持たないカプセルメソッド

public class Hoge : IDisposable
{
        Action<string> _hogehoge;

        public Hoge(Action<string> HOGEHOGE= null)
        {
                _hogehoge = HOGEHOGE;
        }

        void HogeHoge(string message)
        {
            if (_hogehoge != null)
            {
                _hogehoge(message);
            }
        }
}

上記のように宣言しておく

public class Main
{
        Hoge HOGE;

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            HOGE= new Hoge(async (m) => await Dispatcher.RunIdleAsync((o) => Statustext.Text = m));
        }
}

こんな感じで宣言しておけば、class HogeでHogeHogeにテキストを投げて表示Pageに表示することができます。

Dispatcher.RunIdleAsyncなので、コントロールに限らず定義可能なので使い道は多いと思う。

今回はクラス内のStatusを追いかけるのにstringを宣言してますけど、<T>なので他も可能です。

かけ算 九九表です。簡単な問題、フラッシュ暗算もあります

かけ算を勉強するための、日本風の九九表アプリです。
計算の力を伸ばせれるように、簡単な問題を出す機能を搭載しています。

Windows8.1に最適化を行い、フラッシュ暗算機能を搭載しました。
標準では、「桁数は1桁、2桁、3桁の固定」、「出題数は10問まで」、「表示時間は約 1 ~ 0.7 秒まで」、「足し算のみ」、となっています。
アプリ内で機能解除をご購入いただけると、「桁数は1~7桁を最少~最大で設定可能」、「出題数は30問まで」、「表示時間は約 1 ~ 0.2 秒まで」、「足し算と引き算」、となります。

さらに、WindowsPhone8.1(WindowsRuntime)版をuniversal Appsとして連携しており、アプリ内課金によるフラッシュ暗算の機能拡張は共通課金となっています。

Windowsストア版初期画面
Windowsストア版初期画面
Windowsストア版フレッシュ暗算画面
Windowsストア版フレッシュ暗算画面

Windowsストア版
対応言語:日本語 , English , Deutsch, español, français,
português, 简体中国 , 傳統中國 , 한국어

WindowsPhone8.1版初期画面
WindowsPhone8.1版初期画面

WindowsPhone8.1版
対応言語:日本語 , English , Deutsch, español, français,
português, 简体中国 , 傳統中國 , 한국어

*かけ算 九九表です。簡単な問題、フラッシュ暗算もあります
*Is the multiplication times table. A simple problem, there is also a flash mental calculation.
*Multiplikation mal Tisch. Ein einfaches Problem, es ist auch ein Blitz Kopfrechnen
*Mesa de Multiplicación. Un problema sencillo, también hay un cálculo mental de flash
*Table fois de multiplication. Un problème simple, il ya aussi un calcul mental flash
*Vezes Multiplicação mesa. Um problema simples, existe também um cálculo mental de flash
*次乘法表。一个简单的问题,也有闪光心算
*次乘法表。一個簡單的問題,也有閃光心算
*곱셈 구구단 표. 단순한 플래시 암산도 있습니다

Windows8.1ストアアプリ/WindowsPhone8.1でのアプリ内課金メモ2

Windowsストアアプリのアプリ内課金メモ」でWindowsストアアプリでのアプリ内課金コードを記載しましたが、これがWindowsPhone8.1でも可能なことを確認しました。

ただし、WindowsPhone8.1ではいくつかの制限事項があり、そのまま適用とはなりません。
ただコンパイルでエラーが出るということはなく、実行時のエラーとなるのでtry{}は幅広くしておく必要があります。

・Windowsストア版との差
 ・「CurrentAppSimulator」でのデバッグは基本的に無理です。
  これはWindowsストアで操作できた「WindowsStoreProxy.xml」がないためです。
  もちろん今後何かしらのツールが出て同じような設定が可能になるかもしれません。

 ・「CurrentApp」を使用してIISを立てることで購入環境をエミュレーター上でエミュレートする
  これの欠点としては実機では試すことができません。
  この方法は「 伊勢 シン (id:iseebi) 」さんが公開されている「Windows Phone 8 のアプリ内課金をエミュレータで試す : (1)環境を作る」をご確認ください。

・実装結果
 ・自アプリでWindowsストアアプリとWindowsPhone8.1で連携をさせて相互にアプリ内課金が連携するか確認をしました。
  WindowsPhone8.1側で購入し、Windowsストアアプリ側への反映がどれくらいかかるかを確認していましたが、微妙に時間がかかる、または何かしら条件があるのかアプリを再インストールしないと反映しない気配です。
  もちろん、自分の環境で何か起こっている可能性は捨てきれないので、開発機器を使用していなければ問題なかったのかもしれません。

今後も何かしら対応アプリを作成して確認できればと思います。

WindowsPhone8.1アプリ製作時、最初の注意メモ

WindowsPhone8.1では「Windows Phone Silverlight 8.1 Apps」と「Windows Runtime universal Apps」があります。

ここでは「Windows Runtime universal Apps」での作業を元にしています。

WindowsPhone8.1ではタイルサイズが変更になりました。
WP81タイルイメージ
Windowsストアアプリとの互換性が向上した部分がありつつも、微妙にサイズが違うというのが手間ですね。

デザイン時のデバイスでのサイズが「480*800」から「400*640」に変更になっています。

WindowsPhone8.0デバイス
WindowsPhone8.0デバイス

WindowsPhone8.1デバイス
WindowsPhone8.1デバイス

よく見ると「サイズ @120%スケール」となっています。
このため以前の「480*800」デザインをそのまま移植することはできません。
「400*640」をもとにサイズと配置を変えなければなりません。

デバイスに「400*640」があれば、わかりやすく、やりやすいんですが、大幅な変更の割に告知がほぼない変更なのはどうにかならなかったのでしょうか?

画像のスケール%は「100%」「140%」「240%」となっています。
universal AppsでWindowsストアアプリとSharedで画像を共有している場合、Windowsストアアプリには「240%」が無く、WindowsPhone8.1アプリには「80%」がないため「scale-80」「scale-240」を配置しているとコンパイル時に警告は出ますが、今試している限りでは排他されるようで問題がないようです。

自分はアプリのイメージ資産に
「LargeLogo」「Logo」「SmallLogo」「SmallLogoWin」「SplashScreen」「SplashScreenWin」「Square70x70Logo」「Square71x71Logo」「StoreLogo」「WideLogo」と名称をつけて配置しています。