OnsenUIでnavigation-barの文字が見切れる仕様

HTML5ライブラリ「Onsen UI」を使うと、Androidのブラウザで問題がありました。
ナビゲーションの上部のバーの文字が途切れる仕様があります。
原因はナビゲーションバーの子に「center」クラスを作ると「navigation-bar–android__center」クラスが付加されるのですが、その最大幅が「max-width: 50%;」に強制されるからです。
そこでcssで、以下のように「navigation-bar–android__center」クラスを上書きしてやれば、スクリーン幅までテキストを表示できました。

.navigation-bar–android__center {
width: 100%;
max-width: 100%;
}

VisualStudio2015のC++でWin・iOS・AndroidをCrossPlatform

Visual Studio 2015のC++言語で、「Universal Windows Platform (UWP)」「Android」「iOS」の3つのプラットフォームに、OpenGL ES 2でクロスプラットフォームできるプロジェクトテンプレートが公開されています。
http://blogs.msdn.com/b/vcblog/archive/2015/07/30/cross-platform-code-sharing-with-visual-c.aspx

ただし、まだ64bit対応していません。
iOSでは32ビットと64ビットの両方に対応している必要があります。そうしないとappストアに申請できません。

またこの3つのプラットフォームに対応したサウンドライブラリが、OpenSLでいいのか?何がいいのか?わかりません。

jQueryMobileでbodyの背景色

jQuery Mobileではテーマに沿った配色などのデザインが強制的に適用されるようです。

例えばbodyで全体の背景色を指定しても変更できません。
そこで以下のように、bodyに指定されたui-mobile-viewportクラスをcssで設定すれば、背景色が変更できました。
body.ui-mobile-viewport {
background:#ccc;
}

CORDOVAなどiOS8でUIWebViewのバグ

HTML5アプリをスマホアプリに変換するハイブリッドアプリツール「Cordova」などからiOS8に書き出した場合などに、実機で実行する際に落ちるバグがあります。
原因はUIWebViewにあり、iOS8から新たにWKWebViewが出たのでそれを使えば解決します。
ただ現在のところCordovaからはUIWebViewに書き出すので、他の解決方法もあります。
Animationsを使わないのなら、Controllerファイルのinitメソッドで、
[UIView setAnimationsEnabled:NO];
を追加しただけで解決しました。

「天国への階段」でキャラクターが階段にめり込む問題

天国へと進む階段をひたすら登り続けるゲーム「STAIRWAY2HEAVEN」を最初に作ったのは、2002年のデジスタのどーもくん特集の時でした。
その頃は僕に技術がなかったので、キャラが階段を進むと次第に階段のモデルにめり込むバグがありました。
理由は階段は中心を軸に一定の距離を進んで次の階段が現れるけど、キャラは進む距離は階段と同じでも階段をショートカットできてしまうので、徐々に階段モデルとキャラが近づくためです。
そこで解決策ですが、階段を先に描画しZバッファをクリアすれば、キャラクターより手前にあるZ値はなくなり、めり込みはなくなりました。
ZバッファとはZ深度とも言われるように、ピクセルのZ方向(手前から奥へ)のZ値が現在のZ値より手前にある時だけピクセルを描画するものです。
本当は、物理計算で、階段との当たり判定を取る方がリアルになるのですが。

stairwayhttps://game.flash-lab.net/stairway/

XAudio2でアクセス違反が発生する問題

Visual Studio 2012のC++のMFCでしか確認していませんが、Xaudio2を使っていると必ずと言っていいほど、

初回例外が 0x5CCBA5E0 (CartoonD.exe) で発生しました: 0xC0000005: 場所 0x5CCBA5E0 の実行中にアクセス違反が発生しました。
ハンドルされない例外が 0x5CCBA5E0 (CartoonD.exe) で発生しました: 0xC0000005: 場所 0x5CCBA5E0 の実行中にアクセス違反が発生しました。

のようなエラーが出てプログラムが強制終了します。

原因はCOMが勝手にXAudio2のDLLをアンロードするためで、それを防ぐために、メモリーにXAudio2のDLLを明示的にLoadLibraryで読み込んだらいいようです。

以下の参考サイトに2種類の解決策のソースがあるので、いずれかを実装したらうまくいきました。

参考サイト:http://social.msdn.microsoft.com/Forums/vstudio/en-US/1833af9d-7f8c-4f77-a765-f626a3221f91/com-apartments-sta-object-corrupting-an-mta-object?forum=vcgeneral

Visual Studio 2015からMacOSXのXcodeリモート接続

■はじめに

Visual Studio 2015では、Windows上からMacOSXにリモート接続してXcodeにソースを送ってiOSアプリをビルド・実行する事ができます。
「C++」の「Cross Platform」で利用できます。
なぜこんな面倒な事をするかというと、iOSアプリはMacOSX上で作成しなければならないというライセンス条項が有るからです。

■LAN接続

まずルーターでWindowsマシンとMacOSXマシンをLAN接続する必要があります。必ず有線LANがいいです。

■ここからMacOSX上の操作です。

「Apple ID」を取得します。

「Apple Developer Program」のアカウントを購入して下さい。2015年現在1年間12000円ぐらいです。

プログラミングツール「Xcode」を最新のものをApp Storeからダウンロードします。

「Xcode command line tools」を「ターミナル」アプリから「xcode-select –install」と入力してダウンロードします。

XcodeでiOSをApple IDでセットします。

実機のデバイスで動作テストするには「Provisioning Profile」を取得して下さい。

「Node.js」をダウンロードして下さい。できればバージョン「0.10」が望ましいです。

「ターミナル」アプリで「npm update -g npm@2.6.0」を実行してバージョン2.6の「npm」をダウンロードしてください。

「ターミナル」アプリで「npm install -g vcremote」を実行し、リモート接続する「vcremote」をダウンロードして下さい。

「ターミナル」アプリで「vcremote」を実行し、「ホスト」「ポート」「PIN」を取得して下さい。

「PIN」は10分間だけWindowsとMacOSXをリモート接続するパスワードです。再発行するには「ターミナル」アプリで「vcremote generateClientCert」を実行して下さい。

もしインターネットに接続せず、Wifiパスワードが完全なら、「ターミナル」アプリで「vcremote –secure false」で「PIN」なしで無制限にリモート接続できます。

「vcremote」を切断するには「ターミナル」アプリでキーボードの「Control」+「C」を押して下さい。

■ここからはWindows上の操作です。

「Visual Studio 2015」で、「ツール」→「オプション」メニューの「Cross Platform」→「C++」→「iOS」を開きます。

先ほどMacOSXで取得した、「ホスト」「ポート」「PIN(Secureをチェック)」を入力します。「Secure」を「false」にしている場合は「Secure」のチェックを外します。

「Pair」をクリックしてリモート接続を確認します。

「Remote Root」の「<user>」のところにOSXでのユーザー名を入力します。

「OK」します。

後は「Visual Studio 2015」で「新規作成」で「Visual C++」の「Cross Platform」で「OpenGLES Application」を作成して、ビルド・実行して下さい。

■この記事はInstall And Configure Tools to Build using iOSを参考にしています。

ようこそ!ビクサーのブログへ

VIXARのブログへようこそ!

このサイトでは作者がプログラミングしたりデザインしていて問題になった個所の解決策や、プログラミングTipsなどを公開していきます。

またこのブログの作者が作った50以上のサイトも「自作サイトの紹介」カテゴリーで紹介していきます。

他にも新たに作ったスマホアプリ・Webアプリ・ゲーム・ツールなどコンテンツの紹介もしていきます。