ラベル 開発 の投稿を表示しています。 すべての投稿を表示
ラベル 開発 の投稿を表示しています。 すべての投稿を表示

2018年4月9日月曜日

cocos2d-xを始めてみる。

HSPでプログラム作っていたんだが、ちょっと浮気して、
別の言語を試してみようと思い立つ。

Windowsでゲームが作れるものといえば、Unityとか思いつくが、
ライセンスであったり、ロゴ表示の問題もあるので、
フリーで使用できるという観点で、cocos2d-xに決定。

スマホアプリを作るイメージがあるが、当然、Windows用も作れる。
導入から解説しているページを見て、サクッと作るぜ!

…。
…。

と思い立ってから、サンプルを実行するまで、5時間もかかったわ!!

VisualStudioはインストールしていたものの、C++での開発環境入れてないとか、
他にもcocosをビルドするのに足りないパッケージがあるとか、
導入について解説している内容では全然足りないって!

という過程を経て、ビルド環境と実行環境を得る。
30分でサンプルが動くHSPとはえらい違いだ。

まあ、その分、C++(っぽいもの)で開発できる、実行速度が速い、というメリットはあるが…。

そもそも、AndroidやiOSで動くものも作れるという時点で、
素のC++ではなく、覚える作法(APIとか)はいっぱいあるわけで、
その点については、HSPから乗り換えるメリットは薄い。

逆に、ゲームを作るのに覚える量は変わらないので、乗り換えによるデメリットもないとも言える。
とりあえず1週間ほど触ってみて、無理ゲーだったら、HSPでがんばろう。

2018年3月24日土曜日

HSPを少しずつ進める。

何事も放置すると、忘れたり、鈍ったりするわけで。
少しずつでもHSPのプロジェクトを完成に近づけなければ。

そもそも、何を作るかすら決まっていないけどな!

さて、今日の目標は、10年前には無かった(はず)module機能についてだ。
追記:過去のソースコードに、#module が記述されていた。ただ、それだけで、modfuncなどは使ってなかった模様。

とりあえず、インスタンスを作り、モジュール関数をコールし、
いわゆる、セッターやゲッターの動作も確認できた。

一通りやった(つもり)なので、早速実践。
ゲームには必須である、画面のフェードイン/アウトアウト機能をmoduleで作ってみる。

基本は、過去に deffunc で作ったものをコピペ…する予定だったが、
目に余るコードだったため(笑)、1から作り直す。

とはいえ、ゲームプログラマなら、
簡単なフェードシステムのコード書くのに30分も掛からないはずだ。

というわけで、出来たものを実行っと。

 う ご か な い !

いや、そんなはずは。
ちまちまとミスはあったが、そんなレベルではない、何かが違う。

試しに module外のメインループに移すと、きちんとフェードしている。
ということは、moduleが独立空間であるがゆえに、何かしらの障害が発生しているということだ。

さて、なんだろうか?
もしかして、module内では、gsel や gcopy などが使えない?
ありえそうだが、マニュアルには、そういうことは、一切書いてない。
さらに、付属のサンプルでは、思いっきり、moduleの中で、gcopyしてる。

まったくわからん!

が、独立空間という観点で見たときの問題が、もう1つあるじゃないか!

ゲーム作りの鉄則として、後から変更がありそうな部分は、define で一括で変更できるようにする。
Windowsのゲームだと、画面サイズなどが真っ先に定義される。
今回も、
#define screenW = 1280
#define screenH = 720
と定義している。
が、定義している箇所は、当然、#globalだ。

module内の gcopyは、

gcopy 1,0,0,screenW,screenH
になっている。

全くエラーは出てないが、これが悪いんじゃね?
というわけで、変更。

gcopy 1,0,0,screenW@,screenH@

ビンゴ!うまく表示されたわ。
うーむ、module内で全く定義せずに使用している変数は、
エラーを出さず、0として使われてるようだな。

マニュアルでは、module内から globalを参照するのは推奨しないとされている。
スクリーンのサイズを取得する変数や関数があるだろうか?

…あった。

画面の描画エリアXサイズ
ginfo_winx
画面の描画エリアYサイズ
ginfo_winy

定数をこちらに置き換えて、動作することを確認。
ま、なければ、セッターで画面サイズ渡せば良いだけか。

こういうのが、やってて面白いところだな。

追記:
#define の後に、global をつけることで、全module対象になるんだと!

#define global screenW 1280

これが正解の書き方ということだな。




2017年7月21日金曜日

Androidカメラとバーコード

以前作っていたカメラアプリを、最新の自前フレームワークに対応させて復活。

と言っても、カメラのプレビュー映像が表示されるだけだが、
Androidでカメラ使ったアプリの開発経験があれば、それだけでかなり大変だと分かるはず。

で、これをバーコード読み込みに対応させるのが今回の目的。
元々は、秋葉原で購入したUSBのバーコードリーダーを800円でゲットし、
OTGケーブルで接続して使っていたのだが、
カメラでさっと読み込みしたいじゃない?

幸い、GooglePlayサービスに、バーコード読み込みのAPIがあるってことだし、
試してみることに。

実際に、カメラアプリを作ったことがあれば、
http://dev.eyewhale.com/archives/1372
ここをさっと流し読みするだけで、30分でできるはず。

まあ、実際には、足りないSDKをダウンロードしたりの時間も含まれるわけですが。
(API21、Android5.0以上じゃないと使えないっぽいです)

で、早速組み込んだアプリを実機テスト。
実機テストでおなじみの nuuX4の登場です。

いやあ、想像していたのより、さくさく読めますね。
バーコードの読み取りが成功する度に、コールバックが呼ばれるので、
ずっとバーコードをかざしていると、毎フレーム呼ばれます。
なので、自前で排他処理とかが必要。

とか、そんなのは、どうでも良し!
もっと深刻な問題が!

ネット検索すると、同じようにGooglePlayサービスでバーコード読み取りしている人はたくさん居て、皆、読み取りがすごいと、感心しているのですが…。

これ、超高性能カメラ専用APIだった!?

サンプルでは、デフォルトで背面カメラをしているのだが、
私は、正面カメラ(自撮用、フロントカメラ)で読み込みたいのです。

しかしこれが全く読み込めない。
極たまに1フレームだけ読み込めるときがあるので、プログラムが間違っているわけでは無いと思う。

実際に表示されるプレビュー映像を見れば分かるのだが、
フロントカメラの場合、バーコードの線が潰れて読み取れないような映像になっている。
バックカメラ二すると、ものすごく綺麗なプレビューが表示されて、さっと読み取れる。

nuuX4のカメラは、相当良いものだ。
バックカメラは1300万画素だし、フロントカメラも500万画素ある。
この画素で潰れて読めないとか、ありえなさ過ぎる…。

カメラの設定かもと思ったが、用意されているカメラの設定APIには大したものがない。

https://developers.google.com/android/reference/com/google/android/gms/vision/CameraSource

プレビュー解像度は、1920x1080にしているし、オートフォーカスも trueだ。
後はマクロ撮影があればいいのだが、カメラが対応していても、APIがない。

バーコード関係なく、nuuX4標準でついてるカメラアプリでも、フロントカメラは同じように潰れているので、もはや設定ではどうしようもないのかもしれないが、
そうすると、このGooglePlayサービスのバーコード読み取りAPIは、1300万画素程度ないと、使えないということか?

読み取れないって人がたまにいるけど、もしかしたら、この問題と同じなのかもしれない…。


2017年7月7日金曜日

AndroidStudioでプロジェクト

少しXenkoを触っていたけど、再び、AndroidStudioに戻ってきた。
Ver3がリリースされたって聞いたからなんだけど、プレビュー版で、安定版ではなかったので、Ver2.3.3にアップデートしただけにしておいた。

docomo withで、Android7の機種を手に入れたので、最新の機能も試してみたい。
まあ、6すら満足に触ってないけどね…。

というわけで、またフレームワークのところからいじりはじめた。
2D仕様になっていたのを OpenGL仕様に作り変えている、その続きから。

テストアプリを作るところまですら行ってない。

Activity切り替えとか、そんなに必要としていない機能も作ってるからなぁ。
まあ、カメラアプリを作るには必須なんだけど。

Androidでまともなアプリを作ろうと思ったら、Activityにstatic変数を使わないのは当然として、メンバー変数もなるべく使っちゃダメっての読んで、極限まで減らしたところ。

さて、何ゲー作るかな。

2017年5月15日月曜日

Xenko / その4

Microsoft Build tools を更新したら、エラーが減ったけど、
まだまだ大量のエラーが出ている、というのが前回の内容。

で、そのすぐ後に解決したんだけど、記事にしていなかったので、今さら解説。
解説するほどのことでもないんだけど。

出ていたエラーは、「あんたのDirectXのバージョンと合わないんだよ!」的な内容。
ツールで調べたところ、このPCの(オンボードの)グラフィックボードは、DirectX10.1まで対応しているらしい。

Xenkoは、DirectX9.0からさポートしているようだし、そういう意味ではまったく問題ないはずなのに、バージョン違い系のエラーが出ている模様。

で、

デバイスマネージャー ⇒ グラフィックボード

から、ドライバの更新をしてみたところ、なんと更新があるではないか。
そして、Xenkoを起動。

…できた!

というわけで、エラーが出ている人は、グラフィックカードのドライバ更新を試してみましょう。

実際に、Xenkoでサンプルゲームを動かしてみたけど、動作はこのPCではギリギリと言ったところ。

ただ、作り方の解説が少ないので、ここから先が苦労しそう。

2017年5月9日火曜日

Visual C# / その3

前回、VisualC#の基本的な罠に色々掛かってしまったわけだが。

その辺を回避したら、サクサク作れる。
オブジェクト指向などは、Javaで散々やってきているので、
C#独特の解放(デストラクタ)周りの、ガベージコレクトを何とかすれば良い。

それも、基本形は公開されているものをコピペでOK。

Javaで作っていた各種ツールを移植しようと思ったが、
基本部分を作ってから出ないと、気がすまないので…。

まずは、実行ログを出力テキストエリアと、結果を効率よく表示するための、
タブ切り替えを設置。
ファイル読み込み/書き込みのユーティリティは既に作ったので、
ソレを利用して、ツールのオプションを自動保存する機能も追加。

これらも、そこまで悩むこともなく、追加できたので、ようやくツール本体へ。
ツール本体を作成するには、画像の合成が必要だが、先に作っていた独自イメージクラスで基本はOK。
塗りつぶし処理を追加するくらいでできた。
(Javaでいうところの、Paint が、Brushになっている程度)

そこで、100枚程度の細かい画像パーツを1枚のテクスチャに敷き詰める処理を移植。
Javaでは、独自にクイックソートAPIを作成していたが、C#でのその部分は、LINQを使って楽をする。

サクッと単純移植した結果、1枚の生成に3秒かからないくらい。
これ、Javaとそんなには違わない。
だがしかし、アルゴリズムに改良の余地があることは分かっていたので、それを実装した結果…。

50ミリ秒。

そんなもんさ!
いくら、頑張って最適化しても、ちょこっと速くなればラッキー。
もちろん、そのちょこっとが必要なときもある。

だが、大抵は、アルゴリズムの改良の方が効果的なのだ。

50ミリ秒より速く…はできないだろうなぁ。


2017年4月27日木曜日

Xenko / その3

ようやく、Xenkoのプロジェクトが起動できた。

…というか、起動の一歩手前まで行った(笑)

昨日、大量のエラーが出ていたのだが、各種設定を見直して、
最低限のエラーだけが出るところまで修正。

その結果、Microsoft Biuld Tools の最新版が入ってないからでは?
という結論に。

ネットを探しまくって、ようやく、最新版をGET。
C#のToolsを入れてみたら、プロジェクトの作成は問題なくでき、
Xenkoが起動した(Unityっぽいツール画面が一瞬表示された)。

その後、

「Xenko Game Studio は動作を停止しました」

というあのウインドウが出てあえなく終了。
まだまだ先は長そうだ。

2017年4月25日火曜日

Xenko / その2

インストールについては、全く問題なく終了。
自動的にランチャーが起動し、最新バージョンのインストールも問題なく完了。

テンプレートやサンプルがたくさんあるが、
まずはサンプルゲームがあるので、そのプロジェクトを起動してみよう。



クソツールwww
サンプルの起動でこのエラー。
横のスクロールバーを見れば分かるとおり、大量のエラーですよ!

なにこれ。

その他のプロジェクトを作ろうとしても、全部このエラーが出る。
もうこの時点で、やる気0。

Unityはサクッとプロジェクト作れたぞ。

Unity、C#と来て…

Unityを触りつつ、C#のおさらいをやっている最中ですが。

新ゲームエンジンがリリースされました。

C#で開発できるオープンソースのゲームエンジン「Xenko」が4月25日にリリース。個人利用は無料で,Pro版も7月まで無償
http://www.4gamer.net/games/378/G037845/20170425022/

C#で開発できるゲームエンジン!
使いやすさ、機能性などで、どこまでUnityに対抗できるのか…?

早速インストール中。
以前触ったものでは、一応2Dも作ることはできたので、
その辺りも、Unityに対抗できそうではある。

ここまで広がったら、Unityでいいじゃないか、とも思うが、
Xenkoは、一応「オープンソース」らしいじゃないか。
つまり、バグFixやカスタマイズも自分で可能…なはず。

あ、.NET FRAMEWORK4.6.2を要求されたので、サクッとOKしたが、
これ、Cドライブに入るんじゃないか…。
容量が…。

…。
インストール完了。
Dドライブにインストールできたから、Cドライブは殆ど無傷だったが…。


いまどき、本当に16MBで済むんか?(笑)


ランチャーから、Xenkoを起動した直後の画面。
プロジェクトのテンプレートが並んでる!
2Dゲームっぽいのがないな。
TOP-DOWN RPGってのがそれかな?

センサーデバイスのサンプルや、物理系のサンプルもあるな。
Unityと違って、参考書がないから、YouTube漁ったりしないと、サッパリワカランね。


2017年4月22日土曜日

Visual C# / その2

とりあえず、簡単なフォームパーツを配置して、アプリを作ってみる。

以前(5年以上前)には、ボタンを押したら、45度回転するフォーム、なんてのが15分もかからず作れたし、実際今でも、超簡単だった。

…のだが。

なかなかに酷い罠にはまったので記録しておくことにした。

まず、基本である、Windowsフォームアプリのプロジェクトを作成する。


そして、ツールボックスから、必要なパーツを配置していく。


ここのまま作っていけば、問題はない。
…のだが。
例えば、ボタンを押したときの機能を作りたければ、ボタンをダブルクリックすると自動的にコードが挿入される。それはいい。

だがしかし。
なぜか、ラベルをダブルクリックしてもコードが挿入される。


正直、ラベルをクリックさせる仕様を作るヤツがアホなので、ラベルをクリックさせる必要は全く無いのに、この仕様。

しかも、配置したパーツから、一度「label1」を削除して、次のラベルを配置すると、
同じ「label1」という名前で配置される。
だが、それをダブルクリックして挿入されるコードは、


このように、違う名前で生成される!なんてこったい。
この画像で言うと、上の赤い四角のAPIは、全く使われないゴミコードだ。

しかし、こういうことを繰り返すと、どれがゴミコードか分からなくなることもあるはず。

で、ゴミコードじゃないコードを削除してしまうと…。


というエラー画面が表示され、結果、


パーツ配置がリセットされた!!


これを回避するには。
この部分を展開して、コードを全て表示。


各パーツに関するブロック内にある、一番下の部分。
この行とクリック処理のAPIを削除すれば、エラーが出ずに、コードを削除することができた。

配置したパーツがリセットに、ゴミコードを挿入…。
なんだこのツール…。


2017年4月19日水曜日

Visual C#学習中

学習中といっても…。
もう20年Javaをやっているので、内容はあっという間に頭に入っていく。

Java Swingを使って、パーツを配置していくのに比べたら、
Windowsのフォームの配置なんて、寝ながらできるレベル。

で、参考書として買ったのが、これなんだが…。



総ページ数800以上!
全ページフルカラーで、2016年10月1日初版!
Windowsアプリはもちろん、スマホアプリまで解説してくれて、3500円程度って安いジャン!!

と思って買ったのだが…。
正直ヤバイ。
最初は笑っていたのだが、だんだん腹が立ってきた(-_-メ)

何がヤバイって、誤字・脱字・解説ミスが多いのなんの。
プログラム初心者向けなので、いわゆる変数や四則演算から解説しているのだが。

たとえば、73ページの以下のコード。

int x;
x = 1;

int y;
y = x;
y = 10;

Console.WriteLine(x);
Console.WriteLine(y);

これで、コンソールに、xの値として100が表示されます
なんて、書いてあるんだぜ。

109ページから、簡単なサンプルとして、金額に対する消費税金額を求めるプログラムの解説が始まる。
115ページのコードでは、確かに消費税率として、0.08という定数が書かれているのだが、次のキャプチャ画像では、50000円に対する消費税額が2500円になっている。

この時点で、この本が消費税率5%のときに書かれたものであることが分かる。
消費税が8%になったのは、2014年1月。
2016年10月初版って、最大3年近く掛かってますねぇ。それでこの内容。

他にも、消費税を切り捨てじゃなく、四捨五入にしたい場合は、この後のHINTを見てね!と書いてあるが、そんなHINTがなかったり…。

配列についての説明で、194ページに、

privateint[] array = new int[5];

という謎の型が登場し、197ページのコード解説では、

praivateint[] array = new int[5];

と、綴りすら間違えてるレベル。
ここで、怒りのブログ投稿ですよ(苦笑)

いやホント、もっともっと多いのよ!
解説がおかしかったり、日本語になってなかったり…。

本気で、乱丁・落丁として、取り替えて欲しいんですけど。

2017年4月15日土曜日

Cドライブ容量不足問題

PCでよく遭遇する問題の1つ、Cドライブの容量問題。

購入時スペックで、Cドライブは45GB。
多くはないので、出来るだけDドライブを活用してきたのだが、
最近はもう限界。

先日導入したUnityで完全に埋まってしまった。
Unityのために、なんとか3GBは確保し、Unity自体Dドライブにインストールしたのに、なぜがCドライブが1GB程度まで消費される。

もうダメぽ。

というわけで、

DiskInfo

このツールを使って、Cドライブを解析。
無駄に容量を食ってる箇所を探し出して、対処しようと試みる。

結果。
AndroidStudioで使用している、AndroidのSDKフォルダが、それ単体で、11GBも浪費していることが発覚。

とくに、API-23は、Android-TV、Android-Wearと使いもしないようなもので、1GBも使われていた。

というわけで、これらをDドライブに移動し、Cドライブの同じ場所にシンボリックリンクを張ってみた。

AndroidStudioも問題なく使用できた。
こまごまとしたファイル整理をするつもりだったが、1フォルダの移動で済むとは。


2017年4月14日金曜日

SVNを自宅にも導入したみた。

仕事では、ファイル管理として、svnを使用していたが、自宅での開発では手動バックアップのみ。

だったので、自宅にもsvnを導入してみる。

参考にしたのは、こちら。
http://ameblo.jp/k-freedom7/entry-11946273611.html

自宅用で使うのは自分ひとりだし、PC1台しかないので、apacheは不要。
特に面倒な設定はなく、サクッと導入。

問題なく導入できた。
だが、PC1台で、履歴を管理するとなると、HDDの容量の問題がでてくる。
というわけで、Googleドライブをネットワークドライブとして、アクセスできるようにしてみたくなる。

多分、これでできるんじゃないか、と妄想中。

結果、失敗

原因はまだ突き止めていないのだが、とにかく転送が遅い
サンプルで作ったUnityのプロジェクトを svnにインポートしてみたのだが…。
5時間かけて、400KBしか転送できなかった!
いまどき、キロバイトだぞ…。

一体何が原因なのか…。
svnを使わずに、割り当てたドライブにそのまま放り込んでも、同じくらい遅いので、根本的な何かが悪いようだ。



2017年4月2日日曜日

Unity学習中 / その2

ふらっとUnityをやってみようと思い(遅いわ)、ただ今参考書を元に、サンプルを作成中。
参考書はこれ。



本屋にたまたま合ったのがコレ、というのが選出の理由。
とりあえず、半分(5章)までは制覇。
ページ数的には、半分くらい。

内容も、カラーでキャプチャ画像が豊富なので、分かりやすい反面、
大部分が画像、というページは、逆に見づらい気もする。

説明の仕方もゲームを心がけており、HPゲージ付ゲームのサンプルで、
HPゲージが、円形ゲージなところは、さすがと言える。
 
初心者向けなので、プログラムの基本の変数や分岐、配列などから解説しているのだが、その割りに、細かいミスがあるところは気になる。

例えば、1秒ごとに矢を発生させるサンプルで、

if ( deltaTime > span ) 

というプログラムに対し、「経過時間が1秒以上」と説明してる点。

「以上」なら、

if ( deltaTime >= span )

が正しい。
クラスのメンバー変数についての説明で、
使用するときは、

this.score

という風に、thisを付けた方がバグを減らせると書いてある。
それ自体は間違いではないのだが、どうせなら、

int mScore;

と、メンバー変数は、mで始めるという、ルールもコラムレベルで良いから、書いていて欲しい。

ちなみに、この参考書のサンプルプログラムでは、
メンバー変数は全て、mはついていない。

それはともかく。
5章までで一通りゲームが作れる基礎(Prefabまで)はできた。
次章のシーン切り替えをマスターできれば、ひと段落だな。

2017年3月31日金曜日

Unity始めてみた。

まあ、AndroidStudioで作ってるから、自分用はそれで良いんだけど。
仕事上、Unityは必須スキルになりつつあるしね…。

ま、以前ちょっとだけやったことあるし、最近は2Dも作れるし。
コンシューマ等でのミドルウェア組み込みに比べたら、圧倒的に楽でしょ。

というわけで、まずは参考書を購入。
↓これを買ってみた。

なぜコレかと言えば、近くの大型書店にUnity本が2種類しかなく、こっちの方が良さそうだったから。
こういう本を買うときは、まず初版の日付を見るのが定石。
2016.6.29 なので、まずまず。

ついでに、EnrealEngine4の本も衝動買い。
以前どこかで紹介されてたのを見た覚えがある。


2017.1.18 なので、全く問題なし。
問題あるとすれば、私のPCがUnityで容量がパンパンになったので、
これに手を出す頃には、PC買い換える必要がありそうなこと。
となると、まずは部屋を片付けて…。
今は考えまい。

それにしても、こういう参考書も安くなったねぇ。
BREW本なんて、1冊で6000円くらいしたぞ…。

で、Unity。
こういう本のお約束で、まずは環境セッティング。
AndroidStudioは導入済みだから、純粋にUnityのみで行ける。
とはいえ、なんだかんだで、インストールに1時間くらいかかった。

その間に、最初の方を斜め読み。
さすがに、変数や子息演算、条件分岐、ループとか、
そんな解説、読む必要ないもの (^_^;

さらに、Javaやってるし、C#自体何の問題も無い。
リファレンスさえ押さえておけば、何とかなる。

さくっと3章まで読み終わり。というか3章以外は基礎知識。
3章だけで、簡単なプロジェクト生成から、実機テストまで解説してある。
必要な素材も公式サイトからダウンロードできる。

タッチしたら、画像が回転して止まる、というだけの、ルーレットのサンプルだが、
ホントに30分も掛からずに、実機で動作したわ。

AndroidStudioで1から作ったら、1時間くらい掛かるか?
PC版も同時にできると考えると、かなりの時間短縮だね。

まあ、開発用のツール群は、VisualStudioで作った方が良いんだろうが、やっぱりJavaで作ってコマンドラインから実行が楽でいいや…。
どうせ自分しか使わないし(^^;;;

1日でUnity参考書の1/3程を消化したが、このペースで行けば、1週間でマスターできるな!

コンソールへのデバッグ表示、画像を簡単に動かす、というサンプルから始まり、次の4章ではテキスト表示もあるし、この本は、かなり実用的な参考書だと思うわ。

2017年3月9日木曜日

昔の俺ぇえええ!!

ラターシュ名で、ずいぶん昔にゲームを公開していた。
今は死語だが、昔は「ホームページ」で「Javaアプレット」が動いていたんだ。

というわけで、当時のソースを引っ張りだしてきた。
(探さなくても、メインPCにずっと入ったままだのだが)

しかし、残念ながら、今時のブラウザでは、Javaアプレットは動作しない。
だが、コマンドラインから、appletviewerを使うことで問題なく動作する。

今でもそうだが、なるべくコマンドラインで全部済ますようにしていたため、
各ゲームのフォルダに入っている、コンパイル用バッチと起動用バッチで、さくっと操作できる。

ソースも、ちょっと見れば、思い出した。

なんで今さらそんなものを…?
Androidアプリを作るのに、昔のゲームを移植してみようと思ったわけだ。

ホームページ公開時には、(無料で配布していたこともあって)それなりに人気シリーズだった。
で、日の目を見なかった未公開シリーズもそれなりに数があるのだ。

それらを再度検証して、使えればみっけもの。
と思ったのだが…。

なんだこれは!!
昔の俺、すごすぎるじゃないか!
今遊んでも十分面白いミニゲーム群。

ゲームとゲームの間の演出効果、テンポ、センス。
どれも今の俺に足りないものばかりじゃないか!

これは、みっけものどころじゃないぞ。



2017年1月11日水曜日

MOVERIO カメラアプリを真面目に考えてみる / その2

MOVERIOは、自分で色々作らないと話にならない…。
ということで、まずは、カメラアプリから、作ろうということにしたんだが。

音量が小さい問題とか、Androidでタッチが認識されない問題とか。

検証アプリ作ったりで、時間取られまくったけど、ようやく本来のカメラアプリが開発できる…?

かと思いきや、MOVERIOは、やはりコントロールBOXの入力がトリッキーらしい。
こちらの記事でも書きましたが、まずは、タッチパッドで長押しすることから始まる。

実際、ギャラリーなど、Androidで共通で使われるアプリを操作してみると、正しく操作できているように思える。

例えば、タッチパッドを長押しして、カーソルが○⇒●に替わった瞬間に、左にはじくと、左フリックになる。
(ホーム画面が右にスクロールする)

だが同じことを自作アプリでやっても、Activityの onTouchEvent() にブレークが来ない!
カーソルが○のまま移動する、HOVERに関しては、がんがんブレークに引っかかってくるのだが、onTouchEvent() には、全く来ない。

と思いきや、たまに来る。

コントロールBOXは特殊な操作なので、HOVERの内部で、タッチイベントを発行しているのではないかと推測できるが、これまた検証だよ…。

ついでに、サイドの物理ボタンも検証するか。
技術資料によると…。

お、トラックパッドで取得できるイベント一覧もあるぞ。

onTouchEvent 発生することになってるな。いや発生はするけど、タイミングおかしいんだけど。

まあ、それは検証に回して、キーに関しては、

Volume Up
Volume Down
Back Key
Up
Down
Left
Right
Enter Key

通知されるのは、これくらいか。
Back Keyは使いにくいので、それ以外だな。


2017年1月10日火曜日

Androidでタッチイベントが取得できないだと!/ 解決編

Androidで初回のタッチが取得できない件が解決した。

どうやら、ナビゲーションバーの非表示が絡んでいたらしい。
ナビゲーションバーの非表示については、Activityの onCreate() で以下をするのが一般的のようだ。
View view = window.getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | c);

これを、GLSurfaceView を作成して、setContentView をやったあとに呼ぶのか、やる前に呼ぶのか、説明しているブログでも統一されていない。

今回のアプリの実機テストは、F-10Dと、nuuX4で行っているのだが、どちらの機種も、ナビゲーションバーは物理的に表示されていて、OFFにできない。

※上記プログラムの青色部分は、APIレベル的にF-10Dでは対応してないので注意

だが、ナビゲーションバーの表示を切り替えられる、MOVERIO BT-300で試したところ、原因が分かった。

この命令は、あくまで、ナビゲーションバーを“隠す”ものなのだ。
で、隠れた状態で、タッチすると、ナビゲーションバーが表示される。

このナビゲーションバーの表示に、1タッチ取られているから、初回のタッチは検出できず、ナビゲーションバーは一度表示されると、二度と隠れないので、そのままアプリのActivityにタッチイベントが通知される、という動作のようだ。

むむ…。

元々、ナビゲーションバーの非表示を追加したのは、MOVERIO対策。
ディスプレイに有機ELを使用しているため、長時間同じものを表示すると焼きつく、と説明があるからだ。
ナビゲーションバーなんて、同じものしか表示しないジャン!

だが、実機テストは、今まで通り、F-10Dで行っていたので、初回タッチ問題が発生してしまったわけだ。

実機テストをnuuX4に変更し、ターゲットをレベル19(Android4.4)に設定して、

View.SYSTEM_UI_FLAG_IMMERSIVE
を追加したところ、ナビゲーションバーも表示されなくなり、かつ、1タッチ目から取得できるようになった。

めでたしめでたし。

MOVERIOの技術資料を見ると、この点に触れていて、BT-300より前の機種では、専用のAPIでフルスクリーンにしていたが、BT-300では、Android標準の、上記方法でフルスクリーン化ができるようになったそうな。

もう、実機テストにすら、使えなくなってきたのか >F-10D

しまった、実機テスト用に、年末年始の安いタブレットを買っておけば良かった…!


2017年1月8日日曜日

Androidでタッチイベントが取得できないだと!/ その3

tetatailでも解決できないので、地道に自分で解析中。
まだ解決はできていません。

最近のプロジェクトは、速度重視のため、SurfaceView ⇒ GLSurfaceView に作り変えたもの。

基本システム以外、入力なども全て一旦削除(コメントアウト)して、
GLでのシステムができたので、徐々に機能を追加している途中で、
初回タッチが入力できていない、ということが発覚した。

なので、昔のプロジェクトを実行してみたところ、問題なく全てのタッチが取得できている。
ということは、

・GLSurfaceViewのタッチ入力
・その他の改良部分

のいずれかであることは間違い、ということだ。

次の検証。

GLSurfaceView をそのまま使用していた部分を、MyGLSurfaceView に変更し、
APIをラップして動作を確認してみる。

まず、onTouchEvent() だが、Activityと同様に、2回目しかコールされていない。

起動時に、onWindowFocusChanged(boolean) が、 true でコールされていることを確認。
これで、フォーカス移動に1タッチ取られている、という可能性も低くなった。

ちなみに、onWindowFocusChange() 内で、ブレークしているときに、画面を2回タップして再実行すると、やはり、1回分のタップが認識される。

ブレーク中もきちんとタッチした回数を覚えていて、その回数 -1 回、onToucheEvent() がコールされている。

以上のことから、タイミングなど不確定要素が絡んでいる可能性は低く、確実に、初回の1タップ処理が、何か別の処理に搾取されていると推測できる。

一体、何なんだ…。



2017年1月7日土曜日

teratail / Androidでタッチイベントが取得できないだと!

Androidで、初回のタッチイベントが取得できないという、
もうどうしようもないバグが出たので、
前から気になっている質問サイトに、投稿することにした。

https://teratail.com/

広告として出てくるので、見たことある人も多いと思う。
売り文句としては、

 「15分悩んで分からなければteratail」
 「最短○○分で回答が来た!」

とか、言ってるんで、だったら聞いてみよう、と。

実際の質問が、これ。
https://teratail.com/questions/61089


いやー、回答きませんな!

Google絡みの問題が発生したときにも、サポートセンターが無いので、
プロダクトフォーラムというのに質問したんだが、
これまた返事がこない。

https://productforums.google.com/forum/#!topic/google-plus-ja/W1J048JtmDY

Googleの方も、エキスパートって人が返答してくれてるが、
スレ違いだがら、スレ移動しといたわ、ってだけ。

エキスパートなら、答えてよ。
こっちは、マニュアルどおりの操作しかしていないんだから、
この程度の質問に答えられなくて、エキスパートってなんだよ…。

結局、こういうサイトって、素人がちょっと困っているってのに役立つだけで、
エンジニアが本気で困っている質問に、答えられる人は居ない

ってことの証明にしかならんわ。