ページ 11

イライラ棒の障害物について

Posted: 2015年6月13日(土) 14:47
by falcon
初めまして。
今回、androidアプリ制作の一環として、イライラ棒を参考にさせてもらおうと思い、ソースを利用させて頂きました。
そこで、素人な質問になりますが、障害物をセットしたら、現状の値だと、実機では左上に小さく表示されていました。
数値を大きくして、最大にすると、エミュでは拡大表示みたいなことになり、見えなくなりました。
どの端末でも適当な表示方法にするにはどうすればいいのでしょうか?

また、別な質問になりますが、ゲーム要素を増やすため、ステージを増やしたいのですが、
スタート画面を作り、ステージ1、ステージ2、ステージ3とボタン等を配置して、タップしたら、そのステージが開始されるという流れにしたいのですが、
根本的にGameMgr.javaを3つ作り、起動ということでできるのでしょうか?

素人質問で申し訳ありません。
知っている方、詳しく教えていただけないでしょうか?

Re: イライラ棒の障害物について

Posted: 2015年6月13日(土) 15:27
by hide
まず、この掲示板で解凍してくれるのはサイトの管理人さんだけではなく、いろいろな方がいますので、
イライラ棒を参考にしました。 ではなく参考をちゃんとリンクしましょう。
Androidの館だとは思いますが、内容を把握している方は多くはないと思います。
http://dixq.net/Android/ ここの右側ですね。
また、リンク先を一々読ませるのもどうかと思いますので現状のコードなりを貼りましょう。

さて、サイズの件ですが、Androidの館では480*800で固定されているので、ここを画面サイズにあわせて調整すればいいです。
画面使っているSurfaceViewなどに画面サイズを取る方法があるので、調べてみてください。
取得した値の半分を描画位置に使えば中央になります。
ただし、Androidの仕様で、 0 が返ってきてしまう罠もあるので注意してください。
また、Canvasの方を拡大縮小することで、"取得した値の半分" といった計算をする必要がなくなるので、こちらも調べるといいです。

ステージを作る方法ですが、とりあえず、GameMgrをいくつも増やすのはおすすめできないです。
GameMgrは画面のFPSを制御するクラスを組み込んだはずです。それは一つで十分ですから、増やすとバグのもとです。
GameMgrの中にステージを切り替える方法を作るのがいいでしょう。

Re: イライラ棒の障害物について

Posted: 2015年6月13日(土) 17:57
by Dixq (管理人)
hideさんが既に回答していらっしゃいますが、その通りで、館では480*800固定なので、それを変換するutilクラスを作ればよいでしょう。
例えば館でx=240と言えば中央ですが、720*1280の端末では中央になりません。
そこで、x=240を渡すとx=360に変換してくれるconverterの役目をするutilクラスを通して座標をセットするようにすると楽です。
もちろんそのutilクラスは端末の横幅を取って来て測定します。
画面の横幅は

WindowManager wm = getWindowManager();
Display disp = wm.getDefaultDisplay();
int width = disp.getWidth();

で取得できます。
また、GgameMgrは名の通りGameをManageする人なのでその人が何人もいるのはおかしいです。
実質ゲームの内容を決定しているのはコンストラクタの中身だけなのでそこをステージによって変えるようにすればよいでしょう。