iOS開発者向けAndroid開発備忘録 変数
TexaGPSとDOCOLをアンドロイド対応するために本格的にAndroid参入。
まだまだAndroid開発はわからないことが多いのでiOS開発者目線で備忘録を残していくことにする。
変数の宣言
変数
型と識別子が最低限必要(修飾子や初期設定子も持てる)
String 型の変数 strName ("アンドロイド" で初期化) String strName = "アンドロイド"; int 型の変数 finalIntCount (10000 で初期化; final 修飾されているので変更不可) final int finalIntCount = 10000;
配列変数
String 型の値を要素とする配列変数とその初期化 String[] arrayStringNames = { "りんご", "バナナ", "なし" }; int[] 型の値を要素とする配列変数 int[][] values;
文字列結合
NSString stringWithFormatよりもSwiftに近い
int intSpeed = 100;
String str = "スピード"+intSpeed+"km/h";
NSString stringWithFormatの近似処理で数値のコントロールも可能
double speed = 125.358643;
String str = String.format("%.2f",speed)+km/h;
一部にStringが含まれると足し算ではなく文字列結合演算子と自動的に判断される
辞書
NSDictionaryに近い辞書はMap 初期化はHashMapで行う Map<String,String> dicValues = new HashMap<String, String>(); NSStringと違いキー値と値の型も指定できる
数値を指定する場合はint,doubleはInteger,Doubleに変換して行う
値の設定は.put関数を利用する
dicValues.put("KeyString","ValueString");
Integerを宣言した場合はint値をそのまま代入可能
Map<String,Integer> dicValues = new HashMap<String, Integer>();
int intValue = 123;
dicValues.put("Key1",intValue);
Doubleを宣言した場合はdouble値をそのまま代入可能(floatはFloatを宣言)
Map<String,Double> dicValues = new HashMap<String, Double>();
double doubleValue = 123.456;
dicValues.put("Key2",dobleValue);
値の取り出しは.getを利用する
String strResult = (String)dicValues.get("keyString");
int intResult = (int)dicValues.get("key1");
double doubleResult = (double)dicValues.get("Key2");
値の取り出しの際は受け取る型を明示しておくとどの型か後で見てわかりやすい
Mapは基本的にMutable、変更不可にしたい場合はこれを使う
Collections.unmodifiableMap(map);
配列
NSArrayとは中に入れるオブジェクトの型指定が必要な点が異なる
ArrayList<String> array = new ArrayList<String>();
array.add("りんご");//値の追加
int count = array.size();//要素の数
int count = array.length;//要素の数
String str = array.get(index);//要素の取得 indexは整数値
array.remove(index);//要素の削除 indexは整数値
ArrayListはMutable
以下参考になるURL
iPhone7のステレオスピーカーは期待を裏切る可能性
ついにiPhone7でステレオスピーカーになる。
Appleの発表会をライブ中継で見ていて、やっときてくれた!
ゲームやムービーを見る時にスピーカーの穴を塞いでしまい、音が出てこないなんてマヌケな仕様がやっと改善される!!
なんて思ったがどうも、怪しい。
Appleの公式ページ上にある上記イメージ下記リンクの中段あたりでアニメーションで表示されている画面だが、これを見る限りiPhone7はMacBookAirと同じ筐体振動伝達型のステレオスピーカーを搭載しているように見える。
そんな浮かれ気分を吹き飛ばしてくれたのが、このツイート
ジェットブラックを購入予定の方は、こちらをお勧めします。
— Hossy ★ トリニティ (@hosinity) 2016年9月8日
[ #iPhone7 用] https://t.co/oMQG0BJWiP
[ #iPhone7Plus 用] https://t.co/RYK0PZUZkQ https://t.co/WhzxLUGn1T
Simplism iPhone 7 Plus [Aegis] フルカバーTPUケース クリア TR-AGIP165-CL TR-AGIP165-CL
- 出版社/メーカー: Simplism
- 発売日: 2016/09/08
- メディア: エレクトロニクス
- この商品を含むブログを見る
商品リンクの画像を見ると、iPhone7のライトニングコネクタの左右に今までどおり穴が空いている。Appleのイメージ通り筐体振動伝達型スピーカーになったのであればこれはおかしい。
iPhone7はステレオスピーカーになったはずなのに、なぜ筐体下部に今まで通りの穴が空いているのか疑問になり「Hossy ★ トリニティ (@hosinity)」さんに質問したところiPhone7専用ケースの下の穴は、今まで通り、スピーカーとマイク用だという。
つまり上記ビジュアルは、あくまでイメージで音は今まで通り、本体下の穴から出ることになる。
実物を手に取ったわけではないのでわからないが、今回のiPhoneのスピーカーのステレオ化は、MacBookAirのような筐体振動伝達型のスピーカーを二機搭載したわけではなく、単純に通話用スピーカーを大音量スピーカーに差し替えただけだと思われる。
こうなるとゲームなどで本体下部スピーカーの穴をおさえてまえば、今まで通り下部スピーカーの音量はミュートされる苦難は続く。
しかも、ステレオスピーカーといっても、通話用スピーカーは画面側、通常音響用スピーカーは下側から音を出す仕組みとなるので、音場はバラバラになる。
まぁそれでも今までみたいに、ほとんど音が聞こえなくなることは無くなるので改善はされるわけなんですが。
Appleのことだから音を出す方向が違うことによる音量差や音質の差は、ソフトウエアで解決してくるとは思うが、Apple公式ページのイメージ通り、音が正面からやってくるとイメージすると、とてつもなくガッカリする層が一定数出そうなので、実機を確認せず、9/9にオンラインで注文する人は、「あまり期待しないでおいたほうが、ダメージが少ないよ」と、忠告しておきたいw
さらにステレオスピーカーになることで音量が2倍になるiPhone7はカメラのシャッター音も2倍になることが予想されます。
これは、iPadProで前科があるので、非常に可能性が高いので注意が必要です。
4:23追記
上記記事をさっそく現地取材をした「Nobi Hayashi 林信行 (@nobi)」さんに振ってみたところ
下の2つのスピーカーで縦持ちした時もステレオ、というのが私の認識です。 https://t.co/UoEEGkulFO
— Nobi Hayashi 林信行 (@nobi) 2016年9月8日
との回答が。え??下部に二個スピーカー??
実はiPhone7ってスピーカー三個搭載??
林さんが言うようにスピーカーが三個あるのであれば、小手先の技術なしに縦横ステレオは可能なのですが、下に二個スピーカーがあるという情報は初めて聞きました。
スピーカーが上下二個なのに、林さんをそう感じさせたとすると、もしかしたら、すごい音位コントロール技術が使われている可能性も出てきました!
理論的には下記のように音の出る方向を傾けることで、スピーカーが二個でも、縦でも横でもステレオ感覚を与えることは可能だと思います。
ただしこのようなコントロールをした場合はiPhoneケースを付けた時の弊害が甚大です。
音響技術は、方位だけではなく、反響利用など含めて二個のスピーカーで後ろからも音が聞こえる技術などもありますが、ポータブルデバイスではかなり限定した技術しか使えないと認識しています。
ただしスピーカーが三個搭載されている場合で、下のライトニングの左右の穴からRLの音を出す場合、横持ちした時に指で穴を塞ぎ音をミュートしてしまう問題は解決されません。
個人的にはMacBookAir方式が一番すっきりして嬉しいのですが、アップルは期待を良い方向に裏切ってくれるでしょうか。
吉と出るか凶とでるか、iPhone7の実機が来るまで、事実は闇の中。
ワクワクするね!
iPhone7日本版は日本に特化した新たなガラパゴス携帯の可能性
日本語版iPhone7はFeliCaチップを特別に搭載することで、日本国内でのApplePayを利用可能にした。
ただし、下記抜粋にあるように、「日本で購入したiPhoneを海外のApple Payの支払いに使うことはできない」
つまり、日本語版iPhone7は「日本限定ガラパゴスApplePay」であり世界仕様では無い可能性がある。
個人的にはNFC搭載なので、国内ではFelica、海外や実店舗では汎用NFC経由で、ApplePayが利用できるようになったと喜んだのだが、アップルのこのページの一番下の表にもあるように、国内版ApplePayはFeliCaありきのため、NFCを搭載しているiPhone6sでは、実店舗は利用できないとしている。
これは日本版iPhone7は米国版iPhone7にFeliCaチップを増設したものではなく、FeliCaチップを搭載することにより何かを犠牲にした可能性を示唆する。
「日本で購入したiPhoneを海外のApple Payの支払いに使うことはできないし、海外でiPhone 7を買った人が日本国内のSuicaのサービスを利用することはできない。」
ならば、日本版iPhoneを米国人が旅行で購入した場合、本国に戻ったあと、米国版iPhone同様に米国のApplePayを利用できるのか?という疑問が残る。
そもそもApplePayという技術自体、登録者の国内だけでしか使えない仕様なのかは知らないので、詳しい人には教えて欲しいが、現在、米国でApplePayを利用している米国人は他の対応国に行っても現状ApplePayを利用してカード決済はできないんだろうか?
もしそうなら、今回の日本版iPhone7の日本国内限定仕様には納得がいくんだけど、そうでないなら、日本版iPhoneは決済ロック付きガラパゴスiPhoneの登場を意味する気がする。
日本版iPhone7にFeliCaチップを搭載して、FeliCaチップ経由のみで日本市場に対応したというのは暫定措置であると思う。
ただ、日本版iPhone7の登場は、また新たなガラパゴスロックを作ったということになりそうだ。
日本版iPhoneが海外でApplePayを利用できる日が早く来てほしい。
ITMEDIA.林信行の現地リポート:抜粋
なお、FeliCaを搭載するiPhoneは日本で発売されるモデルのみで、それ以外の国で購入した型番の異なるiPhoneにFeliCaは搭載されていない。つまり、日本で購入したiPhoneを海外のApple Payの支払いに使うことはできないし、海外でiPhone 7を買った人が日本国内のSuicaのサービスを利用することはできない。
http://www.itmedia.co.jp/pcuser/articles/1609/…/news170.html
9/9 7:44追記
この記事が正しければ、リージョンコードさえ書き換えれば、日本版iPhoneは海外でも使えそう。
「日本版iPhoneを米国人が旅行で購入した場合、本国に戻ったあと、米国版iPhone同様に米国のApplePayを利用できるのか?」という疑問は可能ということで良いのかもしれない。
ただし逆に言えば、日本国内のクレジットカードを持っていない外国の人は、日本版iPhoneを買ったとしても、FeliCaは使えないことになる可能性がある。
さらに、この記事が正しいなら、日本版iPhoneは米国版iPhoneにFeliCaを乗せただけで、特に制限事項もなさそうで、日本版iPhoneは世界一多機能なiPhoneということになる。
ただし、あくまでソースが開示されていないので、正しいかどうかはわからない。
しかもリージョンコードの変更方法も不明だ。
米国のクレジットカードでAppleIDを作って、登録するだけでいけるのかな??
ポケモンGO「引きこもりトレーナーの散歩術」位置情報系開発者目線のPokémon GO #3
引きこもりトレーナーの散歩術です。
この方法を使えば家にいながらにして歩行距離を稼ぐことができます。
検証機材はiPhone iOS9のみ対応バージョンは1.3.1です。
(1.3.1でも動作を確認しました 8/14)
以下の方法でアバターを移動することができることがあります。
1.WiFiをOFFにする。
2.コントロールセンターをちょっとだけ出す
3.指を離してコントロールセンターを消す。
4.トレーナーのアバターが動いたら手順2と3を繰り返す。
実際の操作は動画を参考にしてください。
手順3のときに、画面上のトレーナーが動いた場合は連続的に同一方向に移動し続ける現象が発生します。
動かない時はWiFiをONにして、しばらく待ってから手順1からやり直します。
※一回の操作あたりのアバターの移動量が多い時は手順3の後に、アバターが停止して、少し時間をおいて手順2を実行するようにしないと速度オーバーの判定になりますので工夫が必要です。
※この裏技は高度に環境に左右されるため、できる場所はかなり限定されると思われます。
※何度かやっているうちに偶発的に成功します。確実な動作条件はわかりません。
技術的考察
以下技術的考察なので普通の人には面白く無い内容です
このブログはポケモンGOの遊び方を紹介することよりも、位置情報系技術の有効活用方法としてポケモンGOを捉え技術的にどのように今後役立てることができるかを検証することを主目的としています。なお検証はリバースエンジニアリングなどは行わずに、正規操作でどんな問題が起きるか?この技術はすごい!この仕組みは多分こうなっているので次回作に役立つ!ということを検証と妄想を交えて記事にしています。問題が確認できた場合はすぐにナイアンテックに報告し、その対処速度なども検証しています。
このバグは位置情報の受信状況とアバターのアニメーションの仕様の組み合わせによって発生しているものと思われます。
このため以下の条件が必要となると思われます。
・GPS感度が微弱な状態にあること
・WiFiがオフでA-GPSのアシストが効かない状態にあること
・アバターの動作アニメーションが保持されていること
・GPS感度が微弱な状態にあること
GPSが受信できないことはないが、かなりの時間更新されないような状態を保持する必要があるようです。新しいGPS電波の解析ができて、位置情報を取得すると、アバターは元の位置に強制送還されます。このため、裏技中はGPSがなかなか更新できない程度にGPS感度が低い場所でしか実行不可能と判断しています。
逆に言うと全く受信できない状態で赤い帯で「GPSの信号をさがしています」と出る場合もこの裏技は使えないようです。
引きこもり部屋の、窓から遠い、赤い帯で「GPSの信号をさがしています」と時々出るような場所が最適なようです。
・WiFiがオフでA-GPSのアシストが効かない状態にあること
WiFiがONでアシストが効いている場合は位置情報が更新される可能性が高まるのでWiFiの設定はOFFでなくてはいけないようです。
実際ONではこの方法は成功した実例がありません。
・アバターの動作アニメーションが保持されていること
位置情報の変化をアニメーションで示す場合は大抵新しい位置情報を受けてから、どの方向にどれだけの距離を移動するというアニメーションを作成するのが普通です。
リアルタイムで動いているように見える効果も実は1秒ほど遅延させることで、体感速度を稼いでるにすぎません。
このリアルタイムに見せる効果を実現するために、アバターのアニメーションは常に後出しじゃんけん状態でアニメーションを実行します。
コントロールセンターを出すことでアプリケーションは一時的に停止状態にするようにOSから指示されます。
ユニティーで作ったゲームアプリケーションは顕著にこのルールを守る仕組みになっているらしく、コントロールセンターを出すと全てのアニメーションが一時停止します。
そしてコントロールセンターを閉じると、アプリケーションは再開します。
ポケモンGOでは、この復帰処理の際にアバターの動作アニメーションを再動作させるようにして、位置情報を再取得しようと試みる対策が施されているようです。
ここで、前述のように新しい位置情報が取れず、アニメーションが保持されていると、前回アバターが移動したアニメーションを繰り返すことになります。
これらの複合結果として、ユーザが動かなくてもアバターは一定方向に移動し続けるという、このバグが成立するものと思われます。
この問題はナイアンテックに報告済みですので、近い将来封印されると思います。
ポケモンGOよくわかる攻略本1: 〜SNS・まとめ動画・LINE@まで大公開!〜
- 作者: ポケモンGO専用SNSポケチュウ
- 出版社/メーカー: 株式会社storyプラス
- 発売日: 2016/07/31
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
ポケモンGO iPhoneで使えるプチ裏技
引きこもりトレーナーの皆さんがちょっとでも歩行距離を稼ぐ方法です。
iPhoneの場合GPSを誤動作させて距離を稼ぐことは難しくなっています。
そんなiPhoneでも停止中にすこしだけ位置を移動する方法があります。
※下記技術的情報はわかりやすいよう細部を省略しています。厳密な原理や精度とは異なる場合がありますのでご了承ください。
WiFiのON/OFFをすること位置情報誤差を発生させる
iPhoneのGPS機能はA-GPSと呼ばれ、位置情報の精度を上げるためにGPS電波の他にWiFiと携帯電波を利用しています。
A-GPS(Assisted GPS)
この原理を利用して、WiFiをON/OFFすることで、精度を少し調整可能です。
一般にGPSは空が見えない屋内では受信できません。
そのような状況でもWiFiと携帯電話の電波からだいたいの位置を取得したり組み合わせて精度を上げることができます。
これがA-GPSの仕組みです。
GPSが正常に受信できる場合は、WiFiと携帯電波を使って現在地の測定精度の向上と測定時間の短縮に利用します。
GPSが受信できない場合は、WiFiと携帯電波のみを利用して現在地を推測します。
WiFiのON/OFFでこのうちのWiFiの補助をONにしたりOFFにしたりすることが可能です。
GPS電波を受信できない場合の位置精度はWiFiと携帯電波を正常に受信できる場合でWiFiが周囲にある程度の数が設置されている場合65m程度の誤差となります。
WiFiが周囲に少ない場合は精度は1000m程度まで低下することがあります。
GPS単体では、GPSの電波を複数(3機以上)つかめる場合は最大で5m程度の誤差となりますが、屋内で電波を拾えない場合や、反射波しか受けられない場合は位置が測定不能になるか、極端に低下します。
WiFiのON/OFFによる誤差は、環境により異なりますが、通常数メートルから50m程度で発生します。この誤差が10m程度の場合はかなりの距離を稼ぐことができます。
うまくいくかどうかは環境次第です。
さらに、もっとエグイ宅内散歩の方法も見つけたので、もう少し検証して近日アップします。
注意
・あまりに誤差が大きい時は、移動速度が速すぎてカウントされません。
・あまりに誤差が小さい時は、移動距離が小さすぎてカウントされません。
どうしても家から出られない時は試してみても良いかもですw
※意図的な位置情報改ざん行為はアカウントにペナルティーが課せられる場合があります。
※この方法は、Android携帯の位置情報精度コントロールとは異なり、規制の対象になる心配はありませんし、iPhoneの通常の操作のため問題が発生する可能性もありませんが、ゲーム性を損なわない程度にしましょう。
※この方法でなんらかの損害が発生しても筆者は責任を負いません。
ポケモンGO Ver1.3.0 位置情報系開発者目線のPokémon GO #2
ポケモンGO Ver1.3.0がリリースされ、いろいろ修正、変更されました。
・運転時や高速移動時にプレイしないよう注意画面を追加
・モンスターボールを投げた時の精度の判定を修正
・モンスターボールをうまく投げた時のXPボーナスが出ないバグを修正
・カーブボールを投げた時の曲がり方を修正
・実績メダルの画像の間違いを修正しました
・トレーナーのニックネームを一度だけ変更可(変更は一度のみ)
・近くにいるポケモンのフィールドテストを開始(詳細不明・隠れているポケモンに変更)
・バッテリーセーバー復活
・一部テキストの修正
気になる修正
・「近くのポケモン」を「隠れているポケモン」に仕様変更
この変更は大幅な機能変更となっている。
今までデバイス間で整合性の無かった「近くにいるポケモン」が、同じ場所に居れば「隠れているポケモン」は、ほぼ同じポケモンが表示されるようになった。
同じ場所にいて表示されるポケモンに誤差が出るケースは現在、アカウントで取得したものは「隠れているポケモン」から削除されることが確認できた。
これにより「隠れているポケモン」に表示されるポケモンは一気に減少した。
田舎では本当に少なくなり、一個も表示されないケースが多発していると思われる。
整合性は出たが期待感の演出としては逆効果になる可能性を感じる。
パチンコやパチスロで当たりそうだけど当たらないというような演出がなくなり、本当に当たる時だけしか演出がなくなったようなものなので、出ないのに出そうでワクワクするというような楽しみはスポイルされたと言える。
「隠れているポケモン」の現状の解析結果。
・ポケモンの場所は全ユーザで整合性がある
・取得したポケモン逃げられたポケモンはアカウント限定で削除される
・取得したポケモンの削除はアカウント毎に管理される
(ポケモンの出現には整合性はあるが、取得は早いもの勝ちではなく、各ユーザが
取得するまで、時間管理されみんなが獲れるという今までの方式はそのまま受け
つがれている)
・表示されているポケモンは指定時間になると削除される
・本当に近くにいるポケモンしか表示されなくなったので数が激減した
定点観測の結果予想される「隠れているポケモン」に表示されるポケモン
・現地点から一定の距離以内に出現しているポケモン
・現地点から一定の距離以内に存在する出現予定のポケモン
(指定時間になると出現するがそれまでは地図上には現れない)
(個人的にはこの時に草をパヤパヤしてほしいw)
以下仕様予想
・ポケモンは従来通り位置固定で移動はしない
・ポケモンが実際に出現する前に出現予定時間がセットされ未出現でも表示される
・アクディブユーザポケモンの存在は継続された模様
(ポケスポットの無い事務所固定でも、ある程度の周期で出現を確認)
アクティブユーザを起点に出現ルーチンを生成し、各デバイスのみで行っていた
ポケモンの出現管理をサーバサイドで「隠れているポケモン」に共有するために
吸収するように仕様変更された可能性を感じる。
・仮説アクティブユーザポケモンはPokémon GOの制作会社の米ナイアンテックの
IngressのMXというポイントと密接に関係しており、MXが無いところでは、
ほぼポケモンは出現しないとのことを友人の自宅環境で確認できているため、
思いの外単純なルーチンのみでポケモンは生成されているようである。
ただし、散らばったMXはたぶん「天然」ポケモンの配置とは別に「野良」を
発生させている可能性は、依然として高いと個人的には考えています。
・地図上のポケモンに距離の概念を追加(リリースノートには無し)
スクリーンショットの撮影には失敗したが、「ポケモンが遠いため近づいてください」という旨のアラートを確認した。
今までは、地図上に居るポケモンは基本的に捕獲対象だったが、今回のバージョンアップでは、地図上にポケモンとの距離がある程度の範囲外の場合は上記アラートによって捕獲できない仕様に変更されたようだ。
初めて見たアラートだったけど、前のバージョンにも存在していたかは不明。
・イーブイの進化先を指定する裏技を2回目から封印
イーブイを進化させる前に名前を変更しておくことで進化先を指定できましたが、どうやらこれは封印された模様。各1回目まではOKのままかもしれない。
下記の名前に置き換えてから進化させることで、進化先を指定できる。
最初から1回だけだよという話もあるものの、筆者は2回シャワーズを出すことに成功していたので事実は不明(2回目はたまたまシャワーズに当選しただけかもしれない。バージョンアップ後の3回目は失敗した)
・バッテリーセーバー復活
設定画面から設定できるバッテリーセーバーが復活した。
iPhone上を下向きにした時に、画面の輝度を最低にして、電池の消耗を抑える。
初期バージョンではこの機能を使うと操作を受け付けなくなるバグがあり1.2で削除されていた。
輝度を最低にすることで節電は可能だけど、バックライトが点灯しモニターがアクティブな時点で結構画面は電気を浪費するので、効果は限定的。
まぁ、いいんだけど、やっぱりバックグラウンドで動いて欲しい。他のアプリと同時に使えたほうが圧倒的に楽しいと個人的には思う。
また、位置情報が取れず赤いバーが降りてきている時は設定ボタンは、赤いバーの下になってしまうため、設定画面を開けないという、なんとも寂しいバグがある。
・高速移動時の警告画面の追加
速度判定はUnityを使っているせいか、iOSでも独自に2点間の距離と移動時間から算出している模様。GPSのブレでも高速移動と誤判定する場合がある。
本来は一定の速度や振動を感知し、一定時間、距離も含めて検証し高速移動中であると判定すべきところだが、かなり単純なルーチンで警告の表示を実装している様子だ。
「私は運転者ではありません」というボタンを押すと、ゲームを継続できるので、抑止力としては限定的。
どちらかといえば、デベロッパとして警告を出すことで責任は果たしてますよというポーズをしっかり入れておいたという感じ。
これは警告画面をアップルに出すように指摘された可能性もある。
アップルは位置情報系アプリケーションでユーザが危険な行為に及ぶ可能性がある時には警告を出すように指示することが多いため、この措置を適用された可能性がある。
なびすけでも、実際の交通規制を優先し安全に使うよう警告を出している。
また、HUDManiaxで顔認識ミサイル照準ロック機構を搭載したときは、リジェクトされそうになったことがある。
車で利用することを想定しているアプリに危険なゲーム要素を組み込んではいけないというのがアップルの指摘だった。
この時は、対人ミサイルロックは近距離のみで可能であり、ボンネット越しでの顔認識機能は、距離的に機能しないことを説明しリジェクトを回避した経緯がある。
ポケモンGO、第三のポケモン出現ルーチン 位置情報系開発者目線のPokémon GO #1
位置情報系アプリケーションをずっと作っているデベロッパーとしてポケモンGOには強い関心をもっている。
筆者が関与しているアプリケーションは以下の会社からリリース中。
そのゲーム性や、位置情報の活用法の素晴らしさは圧巻。
学ぶところはたくさんある。
今日はそのポケモンGOのポケモン出現ルーチンを掘り下げてみる。
面白いバグもあったりでなんともお茶目さんな「ポケモンGO」w
ポケモンの出現ルーチン基本編
Pokémon GO での「近くにいるポケモン」活用法 | Orangkucing Lab
ポケモンの出現ルーチンは上記ブログでも2つあることが確認されている。
上記サイトで記載されている「天然」と「養殖」ポケモンである。
簡単におさらいし、他の情報も集約すると以下のようになる。
※用語については上記ブログを周到し定義する。
「天然ポケモン」
・約7日周期でマップ上に設定されるポケモン。
・毎時x分に出現するルーチンになっていて、出現するとy分間存在する。
x:固定された数値となっている模様、毎時10分などとなっている様子。
y:複数の数値が存在することが確認されている最小12分最大15分
y値はz倍されることによって存在時間の延長が図られるケースがある。
z:z値は最大3倍と思われる
・約7日で配置はリセットされ、出現するポケモンは変わる。
・出現する場所は固定定義されている。名称を「ポケソース」と定義。
・この存在はSDKクラック系サービスで確認されている。
「養殖ポケモン」
・「おこう」や「ポケストップのルアー」で生成されるポケモン
・養殖ポケモンは出現時にピンクの輪の中に出現する
・「おこう」で呼び寄せられたポケモンは単一ユーザ限定で出現。
・「ルアー」で呼び寄せられたポケモンは全ユーザにシェアされる。
・存在はオフィシャルに確認されており疑う余地は無い
第三のポケモン出現ポイント
上記ブログ上ではポケモンの出現はこの2種類とされている。
だが実際は第三のポケモンが存在すると思われる。
この存在は自宅でポケモンを取得している筆者がそのルーチンを推測したものとなる。
自宅でポケモンを集取する際に、ずっとSDKクラック系サービスで「天然ポケモン」の場所を確認しながら行っていたが、自宅近辺は「ポケソース」に設定されていない。
にもかかわらず。ポケモンは出現するのである。これは上記二つでは説明がつかない。
筆者はこれを「アクティブユーザポケモン」と定義する。
現在検証でわかっている点は以下の特徴がある。
「アクティブユーザポケモン」(仮説)
・「ポケソース」とは別に広範囲に定義される「サブポケソース」が存在する
・「サブポケソース」は、緯度経度の定期的周期で設定されてマッピングされる
※出現するポケモンの位置がある程度固定されていることから推測
・このポケモンはアクティブユーザを起点に生成されると推測される
※「ポケソース」で出現している以外を無意味に生成する必要はない
※ユーザが「ポケソース」以外の場所にいても発生するのは間違いない
・生成場所はユーザの直近の「サブポケソース」に定義される
・このポケモンの存在は「近くにいるポケモン」のユーザ毎のばらつきも発生させる
・このポケモンは「近くにいるポケモン」にも「天然ポケモン」にも表示されない
※正確には表示する場合としない場合を意図的に操作していると思われる
・このポケモンは誰かが発見すると他のユーザにもシェアされる。
・シェアされたあとも「天然ポケモン」に昇格はしない
・これを有効に使うことで将来田舎などの「ポケソース」不在地に対応
※現在のところ周囲のアクティブユーザ数にも影響を受けると思われる。
※周囲のアクティブユーザが少ない田舎では発生しづらい傾向がありそう。
・そこそこレアなポケモンも出現する。
・出現時間はランダムで定時何分というような、「ポケソース」とは異なる。
筆者はこの「アクティブユーザポケモン」の存在に強い関心をもっている。
この存在は、サーバで定義しきれない場所にユーザが存在する場合に非常に有用に機能する。
このデータの蓄積は近い将来地域格差を是正するだろう。
将来「ろけなう」や「DOCOL」にこれらの機能を進化させた機能を組み込みたい。
「HUDManiaX」に戦闘機能やユーザ交流機能を追加する際の大いなるヒントとなっている。「なびすけ」のようなナビゲーションにも新しい可能性を付加できる発想で、ぽけもんGOを研究していると、様々な発見と確認がある。
9/9追記
「アクティブユーザポケモン」の存在は否定されました。
レーダー系サービスでは、すべてのポケソースがカバーされていたわけではなく、一部のポケソースは表示対象外になっていました。
レーダー系サービスの表示、非表示の分岐に関しては不明ですが、このへんは案外単純に処理されていた模様です。
ただし、仮説を構想したことで、以降アプリケーションの制作時には有益な方法がイメージできたので良しとしますw
ゲームとしてももちろん楽しいが、仕組みを想像、検証し、次のアプリケーションの作成のヒントにも大いになっているポケモンGOからまだまだ目が離せません。