2015年6月16日火曜日

パッティングゲームの製作(斜面でボールが曲がるアルゴリズム)

前回グリーンを転がるボールが止まるアルゴリズムのやったんで、今度は地面の傾斜でボールが曲がるアルゴリズムを作ってみたいと思います
なぜボールが曲がるかっていうと、重力が働いているからですね
図にするとこんな感じ

傾斜角θの時、x方向にg・sinθの力が加わり、ボールが曲がります
これをソースに起こしてみましょう

public class Ball {
    final public static int G = 9800;    //重力加速度(mm/ss)
    final public static float u = 0.075f; //摩擦係数
    public Plot position = new Plot();   //位置
    public int speed; //並進速度(mm/s)
    public double angle; //進行方向(Radian)

    //移動処理(interval:経過時間(ms))
    public void move(long interval) {
        //摩擦による減速処理
        speed -= (u * G * interval) / 1000;
        //速度をXY成分に分割
        int xSpeed = (int)(speed * Math.cos(angle));
        int ySpeed = (int)(speed * Math.sin(angle));
        double xa = getXTilt(prev.x, prev.y); //X方向の傾斜角取得
        double ya = getYTilt(prev.x, prev.y); //Y方向の傾斜角取得
        xSpeed -= (G * Math.sin(xa) * interval) / 1000; //X方向に働く重力による加速
        ySpeed -= (G * Math.sin(ya) * interval) / 1000; //Y方向に働く重力による加速
        angle = getAngle(0f, 0f, xSpeed, ySpeed); //重力により曲がった進行方向を取得
        //XYの速度から位置を更新
        position.x += (xSpeed * interval) / 1000;
        position.y += (ySpeed * interval) / 1000;
    }
}
こんな感じでボールが転がる処理は完成

2015年6月10日水曜日

新作アプリ、パッティングゲームの製作(転がるボールのアルゴリズム)

以前の新作アプリのことを記事で書きましたが、もうだいぶ出来てきました
ベース部分はほぼEasy Basketballなのでかなり楽が出来ましたが、グリーン上を転がるボールのアルゴリズムを一から作る必要がありました
せっかくなので製作過程を書いていきます

まずは任意の初速で放たれたボールがグリーン上を転がり止まるという基本的な動きを考えます
なぜボールが止まるかというと当然地面から受ける摩擦で止まるので、摩擦係数がわかれば転がるボールのアルゴリズムが組み立てられると考えられます

調べてみるとグリーンの速さを測る道具にスティンプメータという滑り台のような道具があるようで、これでボールを射出すると初速1.83m/sで放たれどのくらい転がるかでグリーンの早さを測ることが出来ます
これで測った時の典型的な速さのグリーンの転がる距離が2.286mということなので、これを水平面上を摩擦を受けて並進する物体ということで、運動量保存の法則に入れてみます



m:ボールの重さ
v:初速(m/s)
μ:摩擦係数
g:重力加速度(m/s2)
d:移動距離(m)

ここから摩擦係数μ= 0.075が求められますね

ところが、よく調べてみるとこの計算は大間違いのようで
参考:蜂の子:グリーンの転がり摩擦係数μ
正しくは回転エネルギーを用いて計算せねばならず正しい摩擦係数(転がり摩擦係数)はμ= 0.02989715571ということです
しかしこれを使うとなると移動の計算に角速度を用いねばならず、ちょっとめんどくさいゲーム上では並進速度と摩擦係数μ= 0.075を用いた計算で特に支障はないのでこちらを使うことにします

public class Ball {
    final public static int G = 9800;    //重力加速度(mm/ss)
    final public static float u = 0.075f; //摩擦係数
    public Plot position = new Plot();   //位置
    public int speed; //並進速度(mm/s)
    public double angle; //進行方向(Radian)

    //移動処理(interval:経過時間(ms)
    public void move(long interval) {
        //摩擦による減速処理
        speed -= (u * G * interval) / 1000;
        //速度をXY成分に分割
        int xSpeed = (int)(speed * Math.cos(angle));
        int ySpeed = (int)(speed * Math.sin(angle));
        //XYの速度から位置を更新
        position.x += (xSpeed * interval) / 1000;
        position.y += (ySpeed * interval) / 1000;
    }
}

細かいことを言うとパットにはロフトがついていて打出し時にはボールは少し浮いているので、摩擦を受けない時間があったりするのですが、まあ細かいことはいいそれほどゲーム性に影響はないのでこれでよしとします

2015年6月4日木曜日

PCの突然の死!!!からの~NewPCとともに開発再開

昨年末長年使っていた開発用PCが突然電源がつかなくなってしまいました
まあ相当古いPCだったのでこれを機に新しいPCを組み直すことに
いろいろ考えてるうちに結局3月までかかってしまいました…
ケース以外全とっかえのNewPCの仕様はこちら

種別メーカーパーツ
CPUIntelCore i5 4690
メモリADATADDR3 4G*2
MBASUSH97-PRO
SSDCrucialBX100 256GB
HDDWDWD20EZRX 2TB
電源玄人志向SS600W/85
OSOSWindow7 64bit

そこそこがんばりました
前が前(Core2Duo)だっただけにめっちゃ早く感じます
これで前はきつかったAndroidStudioや重いソフトもキビキビ動くのでいろいろとやれる幅が広がりそうです
休業中に色々とアイデアもたまったので、いろいろと作っていこうかと思います

2014年10月21日火曜日

Android ADT 22.6.0以降はEclipse Heliosでは動かない

いやいやいや、いまだにHeliosHeliosて!
思われるでしょうが
6年物のCore2DuoのPCでがんばってる身としては、なるべく軽くて、枯れた環境でやっていたかったのです・・・

ADT 22.6.0(March 2014) Dependencies:
  • Java 1.6 or higher is required.
  • Eclipse Indigo (Version 3.7.2) or higher is required.
http://developer.android.com/tools/sdk/eclipse-adt.html 

今日からEclipse Keplerでがんばりたいと思います

2014年10月10日金曜日

AdMobメディエーションで日本だけNendを導入してみた結果

間取りー図に表示しているAdMobのクリック率、eCPMがいまいちだなぁと思って、6月末からAdMobのメディエーション機能を使って、日本だけNendを表示するようにしました
導入から3ヶ月たったので、成果をまとめてみます

7月、8月はNendのCTRがよく、もくろみ通りAdMobよりも高いeCPMを出していました
しかし9月に入りeCPMが激減、AdMobと逆転してしまいました

この3ヶ月の結果としては結局時期によって高かったり低かったりするという
ちっとも面白くない結果でした

しかしこれはメディエーションの良さを全く生かせてない
設定だったのです

今回やった設定は広告ネットワークの追加でNendを日本にだけeCPM $0.01で追加
としただけの物でした
結果上記の表のようにAdMobとNendのインプレッションはほぼ同数の表示となりました

しかしメディエーションの効果を上げるには


この設定が必要なのです
これによりAdMobのリアルタイムeCPM値と追加広告の設定eCPMを比較して
eCPMが高いほうの広告が表示されるのです

さらネットワークの最適化に対応している広告会社であれば、それぞれのリアルタイムeCPMを比較してより正確にeCPMが高いほうを表示してくれるのです

Google: 広告ネットワークの最適化と Live CPM について

現在(※2014/10/10)LiveCPMに対応している広告は
AdMob、Domob、InMobi、JumpTap、MobFox、MdotM、Nend

もっと早くこれをやっとけばよかった・・・

2014年10月9日木曜日

EasyBasketballの反省と新作アプリ企画

実に4ヶ月も間が空いてしまった・・・
本業が忙しかったり、色々技術的な模索をしてみたり、ネタを探してみたりと色々言い訳はあるが月1本リリースを目標としていただけに情けないことです
何とかここから巻き返したいところ

とりあえず色々思い出すために前作EasyBasketballの反省から


5ヶ月弱で1200ダウンロード、レビュー掲載 1本(※Androider)
というまあ惨敗でした

敗因はというとダウンロードにいたらない、レビューもされない
つまりはアプリからの請求力不足でしょう
まあユーザーに「これやりたい!」と思われないというところかなと思います

中身はいろいろとがんばったつもりでしたが、そもそもゲーム性のところで
作った本人も疑問を感じる出来だったというところで当然の結果だったのかもしれません

EasyBasketballでは自社広告の効果、海外レビュー依頼先など色々学んだ点もあったので
ブログでまとめたり、今後に生かしたいと思いマス

という流れで新作アプリの企画
その名も Easy Putting
画面イメージ

まるで成長していない・・・・・・
ホントにEasyBasketballの惨敗を反省してるのか?

とりあえずリハビリがてらこいつを作っていきたいと思います

2014年6月6日金曜日

間取りー図をアップデート サイズの編集をロックする機能を追加

間取りー図をアップデートしました
主な変更点は以下
・サイズの編集をロックする機能を追加
 ・オブジェクトの編集ボタンを隠す機能を追加
 
・How toを追加
 
以上です
サイズの編集をロックする機能はよくユーザーからの要望で上がってましたので、ようやくつけれてよかったです
"How to"については今までなかったのがおかしいのですが、間取りー図はかなり有効インスト率が低いなと感じるアプリで、それというのも信じられないことですが、操作の説明が一切ないというのも大きな一因と思ってました
今回のHow toの追加でこの辺に効果があったかどうか、一か月後くらいに報告したいと思います