2016年10月20日木曜日

対処に困るAndroid Studioでの実行時エラー/ワーニングの詳細

以下のようなエラーが出る場合…

「注意:一部の入力ファイルは非推奨のAPIを使用またはオーバーライドしています。」
「注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。」

とりあえず以下の様にすればエラー/ワーニングの詳細がログに出てきます。

build.gradle内に以下を追記してGradleをSync

allprojects {
  …
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}

こちらを参考にさせて頂きました。

この様な所は設定内で出来るようにしといてほしいですよねぇ…

2016年9月6日火曜日

共用ジョイスティック(Universal Controller)のコネクタ規格を作ってみました。

いろんな据え置き型ゲーム機を所有していると、遊んでいると使いたいけれどもどうにも邪魔くさいのが「ジョイスティック」です。
一々ゲーム機ごとにジョイスティックを用意すると邪魔ですし、対戦格闘物など2台単位とかになると、なんというか絶望的に片付きません…。

昔からコントローラ乗っ取り改造などする場合に、他機種でも使えるよう気を利かせてD-SUB15ピン(NEOGEO準拠)に合わせてみたり、6ボタン格ゲー用にD-SUB25ピンで繋ぐ人もいましたが、実際作ると…
  • 25ピンだとケーブルも太くなり取り回しが悪い
  • コネクタを筐体に付けるのには結構手間が掛かり、また抜き差しでの耐久性も問題
  • そもそも部品代がそれなりに掛かる
など難点もあります。
また信号を変換するタイプも悪くないのですが、市販されていないマイナー機種の物を自作するとなると技術と機材と時間(とコスト)が掛かってしまします。 でどうしたものかなぁと思案しました…

で、以下を基本アイデアに単純な直結(パラレル)タイプの規格をでっち上げ、最近実際に作ってみました。
  1. 比較的安価でいつでも入手可能、延長も簡単なLANケーブルを流用
  2. 必要な信号数に応じ複数ケーブルで接続する
  3. 各ゲーム機用にコントローラを乗っ取った「エンコーダユニット」を作成
  4. ジョイスティック・ユニットからはコネクタを固定せず、LANケーブルを直接外に出す
  5. ジョイスティックとエンコーダの接続にはLANケーブル延長コネクタを挟む

とこんな感じで。肝心のピンアサインは色々悩み、結局以下の様に定義しました。


UniversalController20160906.PNG

UniversalController20160906.pdf


各ケーブルにはS・B・Cのタグを付けて接続先を管理します。また使うケーブル数は
 1本:ATARI(2ボタン)
 2本:FC、PCE、MD、SFC、NG、レトロフリーク等10ボタンまで
 3本:PS3や連射機能付きUSBなど
 4本:アナログ入力付き(現在は仕様のみ)
 この様に、必要に応じて変化させます。基本的には2本でおおよそ対応できる様ですね。

ボタン配置の変更や連射装置などは、ジョイスティック←→エンコーダユニット間に変換ケーブルや拡張ユニットを挟み込む形の後付けで対応します。

注意点として、カテゴリー5以下のケーブルは全線結線されていない物も有り、当然使えませんので注意が必要です。
あと付け替えが比較的頻繁に発生しますので、爪折れ防止のタイプをお勧めします。
もしくは延長コネクタをつけっぱなしにして爪折れを防ぐのも手です。


とりあえずこれだけでは実際どうなのかわかり辛いとは承知していますので、アレコレ作った改造後のジョイスティックの使用感とか、後日レポートを追記しようかと思ってます。
↑本当は撮影面倒で後回しにしてるだけ…(^o^;

2016年9月4日日曜日

Excel方眼紙をGoogleスプレッドシートで

ふとGoogleスプレッドシートでExcel方眼紙と同じ使い方をしたくなりシートを弄ってたのですが、相当なんというか相当面倒で…。
毎度アレコレ手作業でやるのは不便なのでちょいと調べた所、Google Apps Script(GAS)というExcelで言う所のVBAのようなスクリプトで出来るとの事で、折角なのでやってみました。

で出来たのがこちら。

自動方眼紙

セルのA1に方眼のサイズをピクセル数で、A2に縦のマスの数、A3に横のマスの数を入れて、メニューの[Script]→[方眼Go!]でシートを整形します。

 さてスクリプトの作り方ですが、シートのメニューの[ツール]→[スクリプト エディタ]で別のタグにスクリプトの編集画面が開きます。

でソースはこんなですね、見たまんま。
JavaScriptは初めて使いましたが、詳細を知らなくてもサンプルを弄ってなんとなくで動きました。
というかコレ以外の詳しい使い方はまだ分かりません…(゚∀゚;)

function onOpen() {
  // ここでシートのメニューに関数呼び出しを追加
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Script').addItem('方眼Go!', 'Grid').addToUi();
}

function onEdit() {
  onOpen();
}

// シートを方眼化する関数
function Grid() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var size = sheet.getRange(1, 1).getValue(); // セルA1から方眼のサイズ指定値を取得
  if (size == 0) return;

  var tr = sheet.getRange(2, 1).getValue(); // セルA2から方眼の縦の数を取得
  var tc = sheet.getRange(3, 1).getValue(); // セルA3から方眼の横の数を取得
  var mr = sheet.getMaxRows();    // 現在のシートの縦の数
  var mc = sheet.getMaxColumns(); // 現在のシートの横の数

  // 現在値との差分
  var dr = tr - mr;
  var dc = tc - mc;

  if (dr < 0) sheet.deleteRows(1, -dr);    // 縦が多い場合
  if (dr > 0) sheet.insertRows(1, dr);     // 縦が少ない場合
  if (dc < 0) sheet.deleteColumns(1, -dc); // 横が多い場合
  if (dc > 0) sheet.insertColumns(1, dc);  // 横が少ない場合

  sheet.clearContents(); // セルを全てクリア

  // 一応設定値を書き戻しておく
  sheet.getRange(1,1).setValue(size);
  sheet.getRange(2,1).setValue(tr);
  sheet.getRange(3,1).setValue(tc);

  mr = sheet.getMaxRows(); // 現在のシートの縦の数
  // 全てのセルの高さをsizeに
  for(var i = 1; i <= mr; i++) {
    sheet.setRowHeight(i, size);
  }
  mc = sheet.getMaxColumns(); // 現在のシートの横の数
  // 全てのセルの幅さをsizeに
  for(var i = 1; i <= mc; i++) {
    sheet.setColumnWidth(i, size);
  }

}
シートに一発でセルの縦横数をセット出来るのかと思ったのですがどうにも無いようで、仕方無くご覧のとおりわざわざ縦横の差をみて増減させてます。
パラメータもサンプルだとポップアップが開いて入力してたのですが、面倒くさいのでセルに値を入れとくようにしてみました。
まだスクリプトとシートとプロジェクトの関係もよく分かってない状態なのですが、とりあえず使う分には十分かなと。
 まぁもっと色々できるようになると楽しそうですよね。


2016年5月7日土曜日

「その男、グーグル」 Android Studio 2.1 のNDKでやっとサンプル動きました

「あんた、そうやって おれたちにUpdateさせて バグ取りしていると地獄に落ちるぜ」

「 ここはAndroid Studio 2.1 地獄の一丁目だよ! これ以上、どこへ落ちろというんだね!?」


なんか良い感じにNDK対応されたと見かけてウホウホとアップデートした所、どうにもJNIが上手く動かずもんどり打っておりました。
まぁ健忘録的に…

1)先ず2.1でJava 8が要求されます。8のJDKを入れてWindowsの環境変数にセットします。

2)Android Studio 2.1 は Updateではなくインストーラーで上書きインストールします。今迄の設定は引き継げますが、1.5と共存はできませんので要注意。

3)設定引き継ぐとJavaが7のままなので、[file]->[Other Settings]->[Default Project Structure]の所でJDK Locationを指定します。
既存のプロジェクトなら[file]->[Project Structure]で。

準備はこれで終わり。

後はこちらの動画を見ながらサンプルプロジェクトの作成

要点は以下です。


1)build.gradle(app)の修正
 Quitaのサイトからコピペ&修正します。
Android StudioでNDKを使ったビルドをする

2)jniフォルダの作成

3)確認用のCのソース用意

4)Makeファイル (Android.mk Application.mk)の作成

5)MainActivityからの呼び出しを記述

これで一応サンプルが動きます。Android Studio 1.5以前の余計な手間は必要ありません。


こっから先は僕も勉強中なので詳細不明。C++思い出さないとなぁ…


自分が引っかかった注意点としてはこの2つ。

1)NDKが絡むとビルド状態のクリーンナップに失敗することがある(かも)
なので、変だと思ったらAndroid Studioの再起動とgradleの同期し直し。

作成したjniフォルダが見えなかったり、mkファイル修正したのにgradleが変なエラー吐いたりはこれで直りました。

2)端末が変わると、やはりAndroid Studioもしくは端末が変な状態になるので、
どちらも再起動、端末は古いアプリの手動削除を行います。

3)ビルドが異常に遅い時がある。→ひたすら待つのみ…

これらの対処は自分の環境依存な気もしますので、ご参考まで。

2016年4月28日木曜日

アンドロイダーさんの認証を頂きました

申請書類をメールにて提出後、僕が確認の電話に出れなかった様で時間かかってしまいましたが、再度連絡を頂いてからサクッと完了しました。

https://androider.jp/developer/b7808224d70abe2b389b82d034fc3ee8/

たまたま気づいたのですが、驚いた事に認証から8時間しないでこのページがGoogleの検索に引っかかりました。凄いなーと。
 
まぁアプリがSpeedだけではしょっぱいので、サクサクとゲーム作らないとです。

2016年4月1日金曜日

Android Studioからのアプリのリリース準備

レイノン・スピードのリリース準備をしてます。

完了しているのは
・Google Play Developerへの登録
・AdMobへの登録
なので、先ずはデジタル署名したアプリのapkファイル作成から

[Build]→[Generate Signed APK]
Key store pathの
[Create New]

から。最初はKeyStoreという証明書を纏めておく台帳を作ります。
一緒に最初のKeyも作り、それを使って証明書付きAPKが生成されます。

Keyのところですが…
 ・Alias:個別のKeyの名称らしい。なんで別名ってなってるのか不明
・Validity:Keyの有効期限。特に区切らなければ次第の1000でも入れとけば良いんだそうです
・Certificate:
 ・~Name:この辺りは後で証明できるように本名を入れました
 ・Organizational Unit:これは何してる組織なの?って事らしいのでpersonalとかandroidにしとけば               問題ないそうです。僕はandroidにしときました。
 ・Organization:組織名ですね。まんまreinon studioとしました。
 ・City~:市、ですね
 ・State~:都道府県になります
 ・Country Code:日本はJPです

これでOKです。

次にAdMobの本番設定…
あれれ?なんだろう…いつの間にかYoutube経由で取得したAdSenseアカウントでもAdMob使えるようになったのかなぁ?

よくわかんないけどバナーとインタースティシャルの広告グループ作ってID取得、アプリに組み込んでみました。

一応、AdMobに紐付いていないアカウントを使っている端末で広告が 表示されたのを確認できたので、次に行きます。

Google Play Developer Consoleから、先ずは作成したAPKをアップロードします。

で、面倒なのがその後です。
「ストアの掲載情報」からGooglePlayで使用する…

・アプリの説明文
・各種スクリーンショット
・ゲーム動画(必須ではありません)
・高解像度アイコン
・宣伝用画像

を設定します。
電話(スマホ)とタブレット(7インチと10インチ)のスクリーンショットが分かれているのですが、特に見え方の違いが無いのでどうしたもんかなと悩み、結局同じ画像を置いちゃうことにしました。
もし怒られたら考えるとします。

この内、宣伝用画像を完全新規に作らねばならないので面倒でした。
これは端末からのストア表示のトップに来るものらしいです。
なんとか適当に…

こんなのをでっち上げました。
他の項目も適当に埋めていきます。

次が「コンテンツのレーティング」
これは何か問題が有った場合に、即座に対応しなければいけないので、メールアドレスは気をつけないとですね。
 んで「ゲーム」を選び、アンケートに答えて最後に「算定」ボタンでOKです。
結果を見て「レーティングの適応」を押せばOKのようです。

んで 「価格と販売配布地域」です。
今回無料広告モデルなのですが、有料ボタンがグレーアウトなので見てみると、販売者登録をせよというのでやってみます。
 …まぁコソコソするのもあれなので、真っ正直に書いてみました。
(イタズラはやめて下さいね~)
  「配布する地域」ですが、広告モデルがあからさまにダメ、という情報があったごく一部を覗いて全世界にしておきました。
実際どうなるんでしょうねぇ(゚∀゚)?

あとどうやら「プライバシーポリシー」を定めたページのURLも貼っといた方が宜しい様子なので、テンプレートを拝借してブログに貼り付けておこうかと思います。

【テンプレート】プライバシーポリシー(個人情報保護方針)のサンプル雛形

今回こちらを参考にさせていただきました。
「Designed for Families」が気になりますが、しばらく様子を見ようかなと。

同意事項の「マーケッティングの除外」はチェックしなくても良いのですが、意味が分からず気になって調べててみたところ、
「GoogleがGoogle所有のサービス【以外で宣伝して欲しくない】場合にチェックしてね」 
って事だそうです。そのOn/Offに60日位掛かるよ、って説明でした。
まぁチェックは不要ですね。

残りの2つに同意のチェック付ければアプリの公開が可能にな…りません。
どうやらそれぞれの詳細のリンクを辿ってちゃんと見てないとダメな様です。 全く面倒な。

というわけで、めでたく公開ボタンをポチッと。
即座に反映されず、数時間かかるそうなのでしばらく待ちましょう。


レイノン工房 プライバシーポリシー

レイノン工房(以下「当工房」)は、以下のとおり個人情報保護方針を定め、個人情報保護の仕組みを構築し、全関係者に個人情報保護の重要性の認識と取組みを徹底させることにより、個人情報の保護を推進致します。
個人情報の管理
当工房は、お客さまの個人情報を正確かつ最新の状態に保ち、個人情報への不正アクセス・紛失・破損・改ざん・漏洩などを防止するため、セキュリティシステムの維持・管理体制の整備・社員教育の徹底等の必要な措置を講じ、安全対策を実施し個人情報の厳重な管理を行ないます。
個人情報の利用目的
お客さまからお預かりした個人情報は、当工房からのご連絡や業務のご案内やご質問に対する回答として、電子メールや資料のご送付に利用いたします。
個人情報の第三者への開示・提供の禁止
当工房は、お客さまよりお預かりした個人情報を適切に管理し、次のいずれかに該当する場合を除き、個人情報を第三者に開示いたしません。
  • お客さまの同意がある場合
  • お客さまが希望されるサービスを行なうために当工房が業務を委託する業者に対して開示する場合
  • 法令に基づき開示することが必要である場合
個人情報の安全対策
当工房は、個人情報の正確性及び安全性確保のために、セキュリティに万全の対策を講じています。
ご本人の照会
お客さまがご本人の個人情報の照会・修正・削除などをご希望される場合には、ご本人であることを確認の上、対応させていただきます。
法令、規範の遵守と見直し
当工房は、保有する個人情報に関して適用される日本の法令、その他規範を遵守するとともに、本ポリシーの内容を適宜見直し、その改善に努めます。
お問い合せ
お客様からの当工房への個人情報の取扱に関するお問い合せは下記までご連絡ください。
レイノン工房
〒187-0011 東京都小平市鈴木町1-148-38
Mail:studio.reinon@gmail.com

2016年3月31日木曜日

feedburnerがなんだか動かなくなっている?

BloggerとTwitterを連携しているはずが…
feedburner側はちゃんとTwetterアカウントと連携してるんだけれども。

ってよく考えたらBloggerに独自ドメイン設定したの忘れてました(^o^;A
そりゃダメですよねぇ。

参考
 Twitterと連携してブログの更新を自動投稿する方法


マルチディスプレイのWindows7でdwm.exeが可怪しくなる問題が直った様子

Windows7でGPUの負荷が増えるとdwm.exeが怪しい動きをして度々厄介な障害を引き起こしていたのですが、レジストリにキーを設定するだけでどうやら収まったみたいです。

regeditを起動し、以下のDWORDのキーを追加します。これらDWM以下の値は初めから無いので手動で作成します。


[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\DWM]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\DWM\Schedule]
"FrameRateMin"=dword:0000003c

[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"Force10Level9"=dword:00000001

これだけらしいです。引用元は以下から。
http://pastebin.com/FFDbubw9

2016年2月17日水曜日

BloggerをTwitter連携させてみた。

Bloggerの投稿時、自動でツイートしてくれる(ハズ)のFeed Burner使ってみました。
実は以前やって上手く行かなかったのですが、どうもRSSフィードの登録を間違えていたっぽいので再チャレンジしました。
参考にさせていただいたのはここ。
Bloggerのブログの更新に連携・連動してTwitterに自動投稿

さて、この投稿、ちゃんとツイートしてくれるんでしょうか…?

RNsSpeed 20160214

レイノン・スピードです。一応遊べる所までできたので動画を撮りました。



Win上のAndyというAndroidエミュレータ+ロイロゲームレコーダーの組み合わせです。
SH06Eでも大体60FPS付近で動きます。

動画作成に慣れてきたら、もうちょい作業中のを色々アップしたい所です。

現在の開発ライン

動いている開発ラインは

1)(RNsFW)フレームワーク
 → 随時更新中 クリティカルな描画処理部をNDKへ移行準備中

2)RNsFW検証/OEM提供用トランプゲーム「レイノン・スピード」
 → α版程度。近々Twitter開発アカウントにて公開予定
  → マーケットリリースの準備中
 → この後もテーブルゲーム関連を進める方向で検討中

3)回転画面シューティング
 → オリジナルゲームとしての本命で、縦シューの文法で広範囲の要素を放り込んだ物にする予定です。でも欲張りすぎて一時中断…

4)固定画面STG
 → RNs検証用その2。レトロゲームのクローン風 開発前準備中

5)回転画面STG
 → 戦車モノ 企画段階 ガルパン人気に乗り損ねても頑張るよ(゚∀゚)ノ

6)縦スクロールSTG
 → RPG風ネタモノ 企画段階 パクリのパクリ

この辺ですね。
元ネタを白状すれば、3)はメタルホークを縦シュー風味に、4)はインベーダーやギャラクシアンのクローン風、5)はアサルト+バトルシティ、6)はキングスナイトとかドラクエSTG風って所でして。
ゲーム自体のクオリティに関しては、最低でもPC-Engineの頃以上に保つのが目標です。
個人製作ですとその辺りが限界かなとも考えてます。

当初マリオ風アクションも視野に入れておりましたが、幾つかの事情から少し後回しにしました。現在は携帯アプリの頃の開発スピードを再現する事を最優先にとらえています。

ファーストリリースが落ち着いた頃にAndroidでの創作仲間を募ろうかと思います。お互いに情報交換したり、最終的にはフレームワークの限定公開もできれば良いなぁと。
ご興味ある方はTwitterでフォローしてみてくださいね!https://twitter.com/reinon_68000 (^o^)ノ

何?このブログ

ブログ引っ越しましたので、こちらでも自己紹介を…

元ゲーム開発屋で、現在Android向けにオリジナルゲームを作ってます。
それに先立ちゲームアプリの基礎となるフレームワークを作っており、その過程でお役立ち情報が有れば書いていこうかと思いブログを開始しました…
実際にやってる事はフレームワークなんて大それたものではなく、ゲーム用コアライブラリ程度の寄せ集めなのですが、元職業ゲームプログラマ的にポイントを絞って拘っていきたいと思っています。
現時点での技術的な立ち位置では

・描画はOpenGLのみで構成。Android独自のUIは基本使わないで完結させる方向
 コンシューマゲーム機的に端末を使えるような方向性で統一しようかと
 OpenGLESは現在1.1で基本部分はFix。後で2.0に移行予定
 そろそろ本気で考えないと。おそらくNDK移行と前後しての予定

・独自のゲーム向けタッチパネルIU
 これは色々応用が出来る実装が動いています。詳細は未だ非公開…

・文字入力は未だにどうしようか悩み中。できればゲーム内で閉じたいのですが…

・当初は2D視点描画が基本で
 リソース的に3Dモデルが大変なので…ちょいと思いついた簡易モデル用処理で色々実装中

・簡単物理演算系。ビリアードとかのシミュレータ程度の処理で出来る範囲
 未だ円どうしの衝突だけの実装ですが、そのうち拡張予定

・アプリは基本スタンドアロンでの動作だけで
 追加データDLの辺りは考え中

・サウンドはBGM/SE共に実装済み

・内部課金はやらない方向。広告付き無料と売り切り有料(+更新)のみでなんとか
 広告の組み込み関連勉強中です

・Google Play ゲーム対応は様子見
 実績とかは興味ないのでやりませんが、データのセーブ場所としてライブラリ化は検討中

・機種依存の根本的な排除
 元々は携帯アプリやってたのでフラグメンテーションとかヘッチャラ(゚∀゚)ノ
 バージョンはAndroid4.0.3以降に対応で。2.3対応とかは挫けました

・Javaのコードの記述性をなるべく落とさずGCを走らせない構成
 まぁこの辺りの実践方法は追々公開しようかなと

・ゲーム上の内部データ処理に対して徹底した単位化
 とか言いつつ、時間軸はいいかげんな実装してます。色々仕込んでは居ますが、
 その内なんとかまとめたい所です

・オリジナルのテキスト処理言語
 XMLとかは使いません。ゲーム内処理へ特化するため、あれこれ再構成中

こんな辺りでしょうか。
あとDBも使わない…目的のゲームアプリ的に使えないので、ストレージI/O関連も昔のを再構築しないとダメですねぇ。まだまだやる事多いです…(-o-)
こちらをメインにするために引っ越し準備中…なんですが、どうしたもんかなぁと。
Androidアプリ開発であれやこれやの情報を記したく、基本個人的な事は分けてノイズを減らす、という方針は立てました。
んで、元の方は…開発じゃなくてAndroidアプリをバッサリ切り捨てる感じで…良いのかなぁ?(゜∀。)