2012年12月13日木曜日

アンドロイドでゲームを作り始めました

JavaScriptの本を注文したら、なかなか来なかったので先にまたandroidでゲームを作ることにしました。

今度のもアクションゲームです。


今回の制作テーマは、

1.背景スクロールを取り入れて、見栄えのよいゲームにする。
背景を頑張る。
 
 

2.いままでのアクションゲームよりもプレイ時間を長くする、作りこむ(あきない範囲で)

3.ネオンを使う。


以上で頑張って作ろうと思います。

gimp2のネオン機能を使って作った背景画像が以下です。




ネオンを使って画像を書いているので、書くのがへたくそでもある程度ましなものができます。
後、今までは背景画像でアニメーションしてなかったですが、今回はアニメーションも一応やってます。

後は、プログラムの部品と、絵を書きまくるだけです。
今月出せたらいいなと思ってます。

2012年10月22日月曜日

WebGL2DGame(part1)

せっかくwebglで2Dゲームを作りたいと色々調べてきたので、その過程を記録したいと思います。



1、わからないなりにも、とりあえず描画してみた。


3dのテクニックとかは色々乗っていますが、テクスチャを切り替えるとか、複数だすとか、
具体的にどうやってプログラムを書くのが効率がいいのかが、自分の探した範囲だと
あまりのっていないので、細かい部品を集めながら試していきました。


やっとテクスチャの切り出し方とか、テクスチャの切り替え方法が自分なりにできるようになったので、fpsがどれくらい出るのかをテストしてみたくなりテストしました。


まずは、fpsを表示するためにJavaScriptで時間をとる方法を調べる、これはすぐ終わってコンソール上に出せるようになる。


とりあえず画面に1000個のテクスチャを出しみることにしました。


 







for()でテクスチャのx座標をづらして、1000個描画しています。
テクスチャのサイズは32*32です。
fpsも60でているし、こりゃすげーぞ!なんでも作れるじゃんと興奮して、色々試していると、






あれ、おかしいぞ


gl.drawArrarys(gl.TRIANGLE_STRIP,0,テクスチャ最大数);


で描画していたので、ただつながって描画していただけなのでした。
ほんとアホだわ。
それじゃどうすればいいのかと考えた結果、分ければいいのか(当たり前)と気づいて
forでテクスチャの数だけ描画する方法に切り替えました。


具体的には、

    for(var i = 0; i < num; ++i) {
        gl.drawArrays(gl.TRIANGLE_STRIP, 4 * i, 4);
    }


で、4個ずつオフセットをずらしているので、つながりません。



すると、







重いので、テクスチャの数を200個にして描画しました。
fpsは50くらい、こりゃちょっと使えねーわ。どうしようもしかして時間の無駄だったのかと、
非常にあせるそして落ち込む、しかし考えると、

begininngAndroidGamesという初めてopenglを知った本で、同じように描画して高速描画できていたことに気づいて、そっちのやり方を見てみることにしました。



to be continue





 

2012年10月18日木曜日

WebGL(texutre切り取りとMultipleTexture)

たぶん久々の更新。

webglの勉強を続けていますが、やっとちょっと使い方がわかってきた。

FlagmentShaderとVertexShaderの使い方がだいたいわかった。
webglはopengles2.0と似ていました。

やり方がわからなくて悩んでいるところは、
MultipleTextureのやり方と画像範囲の切り取りとどうやって描画するのが、一番効率がいいのかで悩んでいた。

MultipleTextureのやり方はたぶん解決して、テクスチャの切り取りのやり方もできたから、
後はどうやって描画するのが正しいやり方なのかをわからないといけない。
そういうことが乗っているサイトが見つからないので、どうやって描画するのが正しいやりかたなのかがわからない。

fpsも試してないので、DrawImgaeと比べて早くなっているかもわからない、
というか最初からwebglでやる必要がなかったんじゃないかとも思っています。
かれこれ1ヶ月くらい取り組んでも何もゲーム的なものを作ってないから、全然楽しくないのです。

これで、webglで早く描画できれば取り組んだ意味があるんですが、


後は、最近はセガの本と数学と物理も勉強しています。
プログラマーのスキルを少しでも磨いて、今後に役立てたいです。

2012年10月6日土曜日

セガと私

最近は、webglの勉強とゲームプログラマーになる前に覚えて起きたい技術(以下セガ)を読んだりしています。

セガはchapter12の回す、伸ばす、動かすのところをやっています。
そうです、画像の回転とかをやっています。
じっくり理解しながら、そしてソースを読んだり実行したりしながらやっているので、進むのにやたらと時間がかかりますが、面白いです。

まだ中間地点くらいで、これから難しくなりそうなので、理解できるかどうか不安。
せっかく買ったんだから、理解してものにしないと意味がない。といいつつもう買ってから2年も経っているのに半分もすすんでない。
これだけ内容があったら、この値段は納得でございます。

とりあえず、今年中にはこの本を一通り読み終えてスキルアップができればと思います。


WebGLは2dのテクスチャを張るさいに、どうやったらうまく画像を切り取って貼り付けることができるのかを模索しながら、チュートリアルなどで色々勉強中。
3Dに特化したサイトは色々ありますが、2dテクスチャの扱い方について詳しく乗っているサイトが見つからないので、四苦八苦しています。
2dテクスチャの扱い方についていいサイトがあったら教えください。


早くつくらないと今年ももう少しで終わってしまうと落ち込んだ。

2012年9月27日木曜日

cocos2d-xをダウンロードして試した

タイトル通りcocos2d-xというandroidやiphoneなどマルチプラットフォームで動かせるゲームエンジンを動かしてみました。

ダウンロードは以下

http://www.cocos2d-x.org/projects/cocos2d-x/news

セットアップは以下を見てやりました。

http://www.jesusbosch.com/2012/06/how-to-set-up-android-and-win32-cocos2d.html

http://www.raywenderlich.com/11283/cocos2d-x-for-ios-and-android-getting-started


セットアップして動かしてみた感想はとても面倒くさいです。

まず、andoridでやる場合はandroid-ndkが必要なので今までは、javaでプログラムを組んでいましたが、C++で組まないといけないので別途勉強が必要。
また、jniについても勉強しないといけないのでndkをはじめて使ってプログラムする自分みたいな人間には、色々やることが多くて敷居が高いです。


そして、さらに困ったのは公式?のチュートリアルのソースを実行しても動かない場合があることです。

具体的には、chapter5とchapter7はそのままソースを入力しても動かないので、ネットで原因を調べてから実行しました。

chapter5に使用するCCMutableArrayは自分がダウンロードしたversionには存在しないため、
c++のlistかvectorを使うか、自作するしかないようです。
自分はlistを使いました。

chapter7もソースを入力してもエラーがでて実行できません。
stackoverflowを見て直してから実行しました。


こんな感じで、想定以上に時間がかかりイライラしたため、気になっていたwebGlを調べ始めて今はそれを使ってなにか作ろうとしています。

調べたら、html5でdrawimage関数で描画するよりもかなり描画が早くなるならしいです。
後webglのサンプルを見たら、どれもすごくてこれは使いこなしたいと思いました。
とりあえず、2dで高速描画を試してみたいです。

cocos2d-xはせっかくセットアップして、苦労してtutorialまでやったのでなんか作りたいと思ってますが、またつまずくと思うと気がのらないっす。


2012年9月17日月曜日

html5でゲーム作った

一週間くらい前にhtml5で簡単なアクションゲームを作ったのでアップしたいと思います。
自分のhtmlべた書きの素人ホームページにアップしました。どうせスキルなんかございません。


↓顔文字の冒険(踏み潰しアクションゲーム)

http://www.geocities.jp/shenronkixs/html5/Kaomoji/kaomoji.html

↓サザエバード(box2dを使用したゲーム、反応を楽しめるだけ)

http://www.geocities.jp/shenronkixs/html5/Sazae/sazae.html


今回物理エンジンを使ったゲームを作るのが目標でしたが、大体使い方が理解でしました。
途中くだらないところでつまずいたりしましたが、とりあえず使えるようになってよかった。


今回使ったBox2dのライブラリーが古かったようで、最新のライブラリーは新しい関数が追加されていたり、初期化とかオブジェクトの作り方とかも随分違うようなので、またやらなければいけないでしょう。


せっかく物理エンジンがとりあえず使えるようになったので、
今度はandoridの物理エンジンの使えるゲームエンジンを利用してandroidのゲームを作りたいと思います。


具体的なエンジンはcocos2dかandengineを使ってみたいと思います。


期間目標は9月いっぱいにしよう、なにもなければいけそうですが、
忙しかったら無理だなー、つまずかないことを祈る。




2012年9月11日火曜日

物理エンジンと格闘

物理エンジンと格闘してます。 わかったことがあったので残しておきます。


□物理エンジンの種類

○Box2dJs

現在のBox2DFlashと比べて古いversionを扱っている。
Exploer9でも実行できる


○Box2dWeb

2011年に更新されていて、新しいversionのBox2DFlashを使用している。
欠点として、exploer9で起動できない。 これはでかい

□html5のエディター

○VS Express for web

よく考えたら当たり前のことですが、Exploer環境でしかdebug機能が有効になりません。

○AptanaStudio

こちらは、FireFoxでのデバックが可能みたいです。
メッセージに今のところFireFoxのデバックしか対応してませんとでていました。


そんな色々な制約があって、肝心なプログラム実験に方になかなか集中して取り組めていません。 だんだん概要がわかってきた感じです。


はじめからわかっていたことだけど、多くのことを理解するのは相当大変そう。
自分で作ることのできる知識と知恵があったらどれだけいいことか、この分野は敷居が高いです。


とりあえず今はいろいろあって、Box2djsのほうで色々試しています。 まだJavaScriptの方も細かいルールとかわかってないです、使い慣れている人のcodeを見ると新しい発見があって面白いなあ。


2012年9月7日金曜日

javascript物理エンジンを調べて、試した。

html5のアクションゲームが一応完成したので、次のステップとして物理エンジンについて調べる&試してみました。

物理エンジンの種類については、

box2djs

box2dWeb

などがあるみたいです。

ネット上にサンプルが豊富そうなので、Box2dWebの方をダウンロードして、解説のサイトを見ていたのですが、サンプルプログラムのexampe.htmlが実行できなくて、デバックを使って調べてみたら
Box2DWebのソースでエラーが起きていました。
原因をネットで調べてみたら、最新のversion2.1.a.3はインターネットエクスプローラーに対応していないみたいです。

実際GoogleChromeで起動したら問題なくできました。
これはいまのところ駄目じゃないのか、そのうち対応すると書いてありました。

なので使うのは、box2djsになりそうです。


flash用のbox2dをjavascriptに移植したエンジンのようなので、他のチュートリアルでも大丈夫なのかはこれから調べます。
たぶん大丈夫でしょう。


現状は、サンプルを実行して少しいじってみただけです。
忙しくなければ来週中までになんか簡単なのを作ってみたいです。
物理エンジンは動きが楽しい、作った人はすごいわー

2012年9月1日土曜日

Microsoft Visual Studio Express 2012 RC for Webをダウンロードした。

html5のエディタ環境を整えるために、Microsoft Visual Studio Express 2012 RC for Webをダウンロードしました。expressなので無料です。
他にもいろいろhtml5用のエディターがあるみたいですが、窓の安定感を求めてこれにしました。

自分の編集の仕方は

1メニュー画面から

2ファイル

3ファイルを開く(任意のhtmlのファイル)

で開いてhtml5のコードを書いています。


コーディング機能としては、ifなどの補完や定義された関数を呼び出すときに、
関数名がでてくるなどの機能があるので、メモ帳で書くよりもはるかに効率がいいです。
(当たり前か)


しかし、定義していない関数をコードに書いたり、定義していない変数に間違えて値を代入したりしても、エラーがエディタ上にでないのでわかりません。

デバックして、そんなものはない、ということがはじめてわかるので、大規模なものを作るときは
相当大変だと思いました。

普段androidとexlipseという恵まれた環境の中でやっていたのでこれはつらいです。

そして、canvasは思ってよりも重い感じです、でもこれは書き方でかわるかもしれない
まだはじめたばかりなのでなにもわからない、とりあえずなんか形になるものを作るという目標でやってます。


あーごちゃごちゃ

2012年8月25日土曜日

顔文字の冒険をandroidマーケットに出した

顔文字の冒険をandroidマーケットに登録しました。
マリオ風のアクションゲームです。

たしか6月頃から作っていたので、2ヶ月以上かかってしまった。
その間もほかの事はやってましたが、なんでこんなにかかってしまったんだろうか、
目標は2ヶ月でした。


今回スキルアップした点は、

1.androidでopengl1.0が使えるようになったこと。

2.admobを途中で消したりだとか、uiのスレッド操作ができるようになった。

3.人のフレームワークを使ってゲーム作りをした。

4.アクションゲームの当たりとか拡張しやすいように変更した。

そんな感じです。


admobはoncreateとか、そういう関数の中でしか操作できないと思っていたんですが、
admobを動かしているスレッドと同期すれば、自由に広告を消したり、出したりができるんだということを調べて知りました。

英語のページでしたが、やり方がのっていました。探すのに苦労した。

まだこのゲームは色々追加したいと思っているので、徐々にやる予定です。



やっと顔文字の冒険が一段楽したので、次はHTML5を使って簡単なゲームを作りたいと思っています。

HTMLはかじった程度で、javascriptもcssもやったことないので時間がかかると思いますが、
楽しそうなので頑張りたいです。
目標は2週間くらいで形にすることです。


で、今早速やっていて描画とかキーボードの操作とかできるようになった感じです。

javascriptはcとかjava系の書き方なので、すんなりはいっていけます。
変数とforとifさえあればそれでいいんです。
ただvarですべての型がまかなわれるというのには、慣れないです。

色々新しく覚えることがあって大変で、これからも大変でしょう。
本は買わないで、ネットで調べて全部やる予定です。

2012年8月15日水曜日

glTexParameterfで多少解決

前にテクスチャがうまく表示されないということを書きましたが、
テクスチャをロードをするときに以下の関数を入れると多少解決しました。

gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, minFilter);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, magFilter);
// 以下新しく追加
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S,GL11.GL_CLAMP_TO_EDGE); // s座標の1を超える端処理をループにしない
      
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,GL11.GL_CLAMP_TO_EDGE); // t座標の1を超える端処理をループにしない

テクスチャを読み込むときの設定を変えることで多少緩和しました
一回は完璧に直ったと思ったのですが、画面を良く見るとなぜか4を描画したときのみ端に黒いくすみのようなものが見えます。

offsetはちゃんとしているので、原因がわからない。
でも、前よりはきれいに描画できたので、また先に進めます。

2012年8月5日日曜日

棘のマップを作った+OPENGLで困った

棘のマップ(触れると即死亡)を作りました。

判定は四角と四角との接触判定で、触れたらDeadという判定にしました。

なので?マップチップに当たったら即死亡です。

後、Openglの描画で困ったことが起きました。
数字がちゃんと描画されません。
どこか一部分が抜けてしまいます。

ちゃんと小数点で割り切れて範囲を切り出しているのに、うまくびょうがされない。
しかも、描画位置によってうまく描画されたりされなかったりと意味がまったくわかりません。

元の画像を640*480に変換しているから悪いんだろうかと思ったけれども、
 canvasではたぶんちゃんと切り出して描画できているから、ちゃんと描画できるはず、
なんか問題があるんだろうけど、どこがいけないのかがわかりません。

たぶん直すには描画環境を一からいじらないと駄目なんだろうと思うと、いままでやってきた意味はなんだったのかとへこむ。

opengles2.0を試したいけど、また時間がかかると思うのでいったんリリースして、
html5でなんか作った後にまたやりたいと思います。

ちなみに、ソースはbegining android gamesという本の描画ソースを中身をそのまま使っているので、それじゃ駄目なのかもしれないし、自分のソースがなにか抜けているのかもしれません。

最初に試しておくべきだった。
openglのプロの方教えてください。

2012年7月28日土曜日

乗れるだけの床(他に判定なし)

乗るだけの床(他に判定なし)を作った。

これだけじゃ意味がわからないと思うので説明しますと、

水色のマップがそれで、そのマップ内に当たり判定はないけれど上に載ることができるという種類のものを作りました。

乗る判定のプログラムは、キャラクターが落下中でその前のフレームで水色のマップに接していないことを条件に上に乗せるようにしました。

床が移動するわけじゃないので、これで大丈夫だと思う。

めんどくさいのは、ひとつ新しい処理を導入するとそれを敵にも処理を追加しなければならないことです。

今のところステージの1-2が完成しそうです。
ステージ1が完成したら、一旦マーケットに出して違うことをちょっとやろうと考えています。
なにしろ予想よりも時間がかかっているので、
やることが多くて、進むスピードが遅いです。

2012年7月21日土曜日

as3sfxrで効果音を作った

as3sfxrというサイト?ツールで効果音を作りました。

↓url

http://superflashbros.net/as3sfxr/

これはフラッシュで作られたツールっぽいです。
パソコンにインストールしないで、ブラウザ上で効果音を作れるところがveryniceです。
左の一覧から作りたい効果音名をクリックするだけで簡単に作れて、
wave形式で保存できます。

大変便利です。

一つ学んだことは、waveファイルは圧縮されていないためデーターの量が重くて、そのかわり
音質がいいということです。
データ量を少なくするには、oggとかに変換しないと駄目みたい。
いままで全然気にしてなかったです。

後は、ステージのBGMとかも自分で作ろうと思って、dominoというツールをインストールしたんですが、一つの曲を作るにはめちゃくちゃ時間がかかりそう、いつかは作ってみたいです。
音が作れるようになったら、一人ですべてができるようになりますが、中途半端になっちゃうかなー
プログラムスキルを磨いていきたい。

2012年7月14日土曜日

java時間のとり方(1秒)

今回のゲームでは制限時間を取り入れることにしました。
なので、やり方を書いておきます。

  // 変数
 public long m_BeforeTime;
 public long m_NowTime;

// 処理をする前に取る
public void FirstCount(){
  m_BeforeTime = System.currentTimeMillis();  // 時間を取る
  m_NowTime = m_BeforeTime;
}

// ループの中で
public void Count(){
  m_NowTime = System.currentTimeMillis();
   // 1秒経過
   if(m_NowTime - m_BeforeTime >= 1000)
  {
     BforeTime = m_NowTime;
  }
}

ポイントは1000で1秒ということですね。

問題はぴったりと一秒はとれないことか、ループの処理があるからぴったり一秒で処理
することは不可能なんですかね。

肝心なゲームの方は、だんだん進んできてステージ1-1が完成しました。
後は、1-2と1-3を作っていくという感じです。
システムのほうは大体できているので、後はもうステージ作りをひたすらやっていくという感じ。

ただステージを作るのに結構時間がかかります。敵の配置とか、マップの配置をうまい具合に
面白くおいていきたいと考えると2時間以上はかかりますかね。

最近はHTML5を使ってgameやら何かを作ってみたいと思っているので、途中で中断してそっちに移ろうかなと思ってます。
作業がマンネリ化してきてつまらなくなってきてしまった。
これは駄目な展開。

2012年7月4日水曜日

gimp2でpngで保存

普段絵を描く時はpaint.netという無料のソフトを使っていたのですが、色々エフェクトとかを使ってみたいと思い、gimp2というpaintソフトをインストールしました。

使い方を見たら、色々エフェクト作りに便利な機能が色々ついています、使い方はわかりませんが。
それで、画像を作り終えていざpng形式で保存しようと思って名前をつけて保存をクリックしても、
保存の拡張子が一つだけで、pngやjpgなどの拡張子で保存できません。

まさか別のルートで変換するのかと思ったら、

メニュー欄 → ファイル → エキスポート

でpngなどの拡張子を選んで保存できるようになってました。
これができるまで30分以上かかりました、調べたら一発だった。

名前をつけて保存でも拡張子を選べるようにしてほしいです。
今まで使っていたソフトではできていたので、
レイヤーが消えないように親切に設計されているということですかね。

2012年7月2日月曜日

ボス作りました(BigHat)

まだステージ1すら完成していませんが、気分転換で先に1面のボスを作りました。


作ってみて思ったのは、でかいだけでかなり迫力がでるということです。
でかいということはすごいことなのか。

後、困った点はボスを踏みつける処理です。

踏みつける条件は敵の頭を踏むことですが、当然毎フレームの移動量が頭にぴったりと
重なることはないので、ある程度頭より下のY座標で設定するんですが、
それだとジャンプで上昇しているとき、敵の頭のところに当たってしまっても、
踏みつけ判定が成立してしまいます。

それで、ジャンプ上昇中は踏み付けをしないように判定しようと思ったのですが、
それだと、ボスがジャンプしている時に踏みつけ判定が行われないので、
やっぱり駄目です。

となるとジャンプ中に移動量を細かく分けて、極めて上の部分で判定するようにするのか、
処理は重くなるけど、対象が10,20くらいなら重くならないのか。

そこらへんは、とりあえずおいといてボスの動きはそれなりに作りました。
後は、ステージ1を完成させたいと思います。

物理エンジンを作ってみたい。

2012年6月24日日曜日

なかなか進まない

色々な処理をするのにどうやったら効率が良く進められるのか、ということを考えながらやっているとなかなかゲーム作りが進みません。
IQ200くらいの天才に、「ここはさあーこうやればいいじゃん」とか言われながら、「あーなるほどね」とうなづきながら進めてみたいです。

進んだところは、壊れる床を作ったり、ゲームパッドに機能を追加したりしました。
後は、ゲームの遷移の部分をどうすれば効率がよくて見やすいのかを考えながら作ってます。
進むのが遅い。

2012年6月14日木曜日

勉強(ゲームプログラマになる前に覚えておきたい技術)

ゲームを作っていても、プログラム的には上達する部分が少ないと思うので、
結構前に買ってちょっとしかやっていなかった
「ゲームプログラマになる前に覚えておきたい技術」という本で勉強しようと思います。

今は、アンドロイドで作っているし,言語はjavaだし、Openglだしと
つながっている部分はゲームプログラムという点しかないけれど、すこしでも上達すればという思いでやろうと思います。


チャプター1からチャプター27まであるんですが、前に2まではやってあったので3からスタートすることにしました。


しかし、しばらくC++とvisualstdioを触っていなかったので使いにくいし、C++も結構忘れている、
コードを書こうとするとjavaの書き方になってしまってなかなか進まないこともあり大変です。
C++は難しいというか使いこなすのが大変。


さらに勉強している途中で早速つまずきました。サンプルプログラムを実行してもゲームを動かすことができないんです。
ゲームを起動することはできるんですが、絵画面がでたままキー入力を受け付けずずっと更新状態のままで、おかしいなと思ってネットで探すも同じようなのはでてきません。

止まっていたのはNimotsuKunImageの以下の部分↓

cin >> input;

このcinはiostreamのcinではなくて、gamelibというオリジナルのライブラリーの関数でした。
その関数の中身を見てみると、

//StandardInput
StandardInput cin;
StandardInput::StandardInput() : mPrevEnterOn( false ){
}

StandardInput& StandardInput::operator>>( char& a ){
 a = '\0'; //初期値
 bool entered = false;
 while ( true ){ //無限ループ
  //スペース
  if ( GetAsyncKeyState( VK_SPACE ) & 0x8000 ){
   a = ' ';
   entered = true;
  }
  //0-9
  for ( char i = '0'; i <= '9'; ++i ){
   if ( GetAsyncKeyState( i ) & 0x8000 ){
    a = i;
    entered = true;
   }
  }
  //a-z
  for ( char i = 'A'; i <= 'Z'; ++i ){
   if ( GetAsyncKeyState( i ) & 0x8000 ){
    if ( GetAsyncKeyState( VK_SHIFT ) & 0x8000 ){
     a = i;
    }else{
     a = 'a' + ( i - 'A' );
    }
    entered = true;
   }
  }
  bool enterOn = ( ( GetAsyncKeyState( VK_RETURN ) & 0x8000 ) != 0 );
  if ( entered && enterOn && !mPrevEnterOn ){
   mPrevEnterOn = enterOn;
   break;
  }
  //ウィンドウから終了要請を受けているようなら抜ける
  bool alt = ( ( GetAsyncKeyState( VK_MENU ) & 0x8000 ) != 0 );
  bool f4 = ( ( GetAsyncKeyState( VK_F4 ) & 0x8000 ) != 0 );
  if ( alt && f4 ){
   Framework().requestEnd();
   break;
  }
  mPrevEnterOn = enterOn;
 }
 return *this;
}

となっており、よく見るとリターンキーを押さないと入力を受け付けないようになっていた。
さらにwhileで入力待ちになっていたから、更新されたままの状態になってしまっていた。

ということで、キーを入力した後にリターンキーを押せばちゃんと動かすことができました。
これを直すのに理解するのに時間がかかったし、これでとまったのは自分だけでしょう。
あーあ



2012年6月12日火曜日

絵を描いた(リス君とハット)

新しく敵の絵を描いて処理を実装して、暫定的な主人公の絵を描きました。
リス君とハットと名づけました。


リス君が主人公で、ハットはピョンピョン飛ぶことが役割の敵です。
本当はもっと進める予定でしたが、PCのセキュリティソフトが原因でPCがおかしかったりで思ったより先に進めませんでした。

2000円くらいのセキュリティソフトをインストールしていたんですが、
ソフトを入れたときからなんとなく動作が遅くて、メールが読み取れなかったり他にも色々おかしかったりで、このソフトが原因で一回OSの再インストールをしたくらいです。

それで今回は、ソフトのアップデートがあるので再インストールをしてくださいというメッセージが出たので、英語のサイトにいってソフトをダウンロードして再インストールしなおしました。
そしたら、購入した証拠となるキーを入力してくださいと出たので、入力しようとしたらキーの入力桁数が自分のものと違うのでカスタマーセンターに電話したら、
それは同じ製品の違う会社のものなので、また再インストールし直してくださいといわれたので
またCDROMからインストールし直しました。

さらに今度は、ソフトのファイヤーウォールが有効にならず、ファイヤーウォールを有効にするというボタンをクリックしてもまったく反応しません。
またカスタマーセンターに電話してもどうせまた再インストールし直してくださいといわれるだけだと思ったんで、ウィンドウズのセキュリティソフトに切り替えました。

ただただ時間を奪われた、時間を返せー金返せーヽ(`Д´)ノ

2012年6月7日木曜日

失敗した

自キャラの絵でも書こうと思い実際に書いてみて、変だけどまあまあかなどんな感じかなと思い実機で出してみたらどうしようもない感じになってしまった。


まず絵が汚いです。んでへたくそです。
これを書くのに一時間くらいかかりました。
時間がもったいない、ほかの事やればよかったと思いました。
でも、こうやって少しづつ上達していくんだと信じてがんばります。

マルチタッチをいじくった。

いままで使っていて大丈夫と思っていたマルチタッチのプログラムにだめなところが見つかったので、
色々と考えて修正しました。
今度は大丈夫そうです。
つまらない時期を越えて最近は作るのがちょっと楽しくなってきた。
アイデアも少しわいてきた。

2012年6月4日月曜日

アクションゲーム敵の処理

敵の処理を入れました。

左のが敵で歩くのみが役割の敵。

当たり判定を新しくしたのと、canvas描画からopenglに変えたので、
プログラムの中身を少し変更しました。

とりあえず、敵のプログラムの方針が決まったので後はどんどん作りこむだけ。
でも、肝心なゲームの中身がなかなか浮んでこないので、なかなか進まないです。
がんばろう

2012年5月30日水曜日

アクションゲーム、当たり判定、斜めの地面

作業がマンネリ化してきて退屈になってきたので、新しい要素として斜めの床の処理を実装してみた
と同時に今までスーパースクロールアクションで使っていた当たり判定を少しいじって、機能が拡張しやすいように変更しました。


斜めに移動できるようにしています。

やり方は、xの移動量に対してのyの移動量を角度に応じて増やすだけです。

ですが、当たり判定を変更した事や今までのやり方に合わせるなどしていたら、
思ったよりも時間がかかってしまいました。

こういう試行錯誤を繰り返して少しずつ向上していくんだと考えることにして、自分の頭の回転が悪いとは思わないことにします。

たぶん頭のいい人は、あらゆる可能性を考えた上で当たりの判定のプログラムを書いて、
時間がかかるけれども相対的に見たらかかる時間が少なくなるような行動をとるんだろうなー
一方自分はそんなこと考える余裕はないです。

次は、やることはなんだろう。
あーお絵かきかー。
誰か絵かいてくれないかなー

おしまい。

2012年5月24日木曜日

openglで透過して描画(android)

引き続き本で勉強しながら、アクションゲームを作っています。

透過処理をいれてopenglで描画できるように取り組んでアルファをいれた描画を実装しました。
以下結果です。

コントローラの部分とボタンの部分に透過処理をして、背景が透けて見えるようにしました。

前に、透過のやり方が本に載っていないと書いたんですが、やりかたが書いてありましたすいません。サンプルゲームには使用していないと思います。

やり方(本のソースに沿う場合)

SpriteBatcherクラスをいじります。

コンストラクタで,

 // コンストラクタ
    public SpriteBatcher(GLGraphics glGraphics, int maxSprites) {
        // 8 = color(4) + position(2) + u,v(2)(色を入れない場合は4*4になる)                
        this.verticesBuffer = new float[maxSprites*4*8];
        // colorフラグをオン(colorの要素もメモリに追加する)
        this.vertices = new Vertices(glGraphics, maxSprites*4, maxSprites*6,true,true);
        this.bufferIndex = 0;
        this.numSprites = 0;
               
        short[] indices = new short[maxSprites*6];
        int len = indices.length;
        short j = 0;
        // 三角形生成
        for (int i = 0; i < len; i += 6, j += 4) {
                indices[i + 0] = (short)(j + 0);
                indices[i + 1] = (short)(j + 1);
                indices[i + 2] = (short)(j + 2);
                indices[i + 3] = (short)(j + 2);
                indices[i + 4] = (short)(j + 3);
                indices[i + 5] = (short)(j + 0);
        }
        vertices.setIndices(indices, 0, indices.length);               
    }

そして、drawSpriteメソッドで、

    public void DrawSprite(float x, float y, float width, float height, TextureRegion region,float r,
    float g,float b,float a) {
        float x2 = x + width;
        float y2 = y + height;
        // color部分を追加する
        verticesBuffer[bufferIndex++] = x;
        verticesBuffer[bufferIndex++] = y;
        verticesBuffer[bufferIndex++] = r;
        verticesBuffer[bufferIndex++] = g;
        verticesBuffer[bufferIndex++] = b;
        verticesBuffer[bufferIndex++] = a;
        verticesBuffer[bufferIndex++] = region.u1;
        verticesBuffer[bufferIndex++] = region.v2;
        ..以下同じ

    }

これで透過ができました。
ただ容量を食うので、やりすぎると重いです。

しかし、拡張しにくいソースだなー、
後はひたすら絵を書いてプログラムを書きまくるだけなんで、6月に完成できるようにがんばりたいです。

後は、ソースコードがコピペしにくいので、ソースを乗っけるのが大変、
なんかうまくやるブロガーの機能があるんだろうなー。
調べるのが......

がんばろう






2012年5月23日水曜日

beginning android games (マルチタッチ)

beginning android gamesという本で、勉強しながらゲームを作っています。
次の段階ということで必須であろうマルチタッチの実装にかかりました。

本では、マルチタッチのクラスは実装してあるものの、うまい使い方は書いていません。
サンプルゲームでも、タッチの回数だけで、タッチされている場合の処理とか必須であろう部分の
解説はないです。

なので、自分なりに実装するべく色々取り組みました。

そうした結果一応できましたが、効率的なクラスにまとめるというよりは、その場しのぎ
のプログラムになってしまいました。

先に進みたいので、とりあえずできたということで放置して次に進みます。
後、タッチ部分のボタンなどの絵を描いて描画してみました。


左下がコントローラー部分です。
マップはふざけてます。おふざけ路線で作ろうかと思ってます。

後とりあえず、実装する部分は、アルファをかけての描画ですね。
でもこれはたぶん本にかかれてなかったので、調べないとだめですね。

とりあえず、この本の2Dの部分は全部読み終えたので本の勉強は終わりです。
3Dは使わないので、使うときにまた本を開きます。
なんか全然上達した気がしない、自分が悪いのか。

やることがありすぎて、めんどくさくなってしまったーーーー

2012年5月18日金曜日

Beginning Android Gamesで描画してみました。

Beginning Android Gamesを使って勉強ならびに、アクションゲームを作っています。
描画のテストをしてみました。
以下


640*480の画面サイズで、マップチップが32*32です。
なので、全部で300個+主人公きゃらで=301個描画しました。

あんまり期待してなかったのですが、60Fps出ています。
よかった使えそう。

後は、使いやすいようにライブラリー的なものを作って、実装という感じです。
いったん手をつけたものを自分用に使いやすくするのは、自分にとっては難しい。

ちなみに、本ではopengl1.0を使っているのですが、自分はopengl1.1を使いました。
ただopengl11にキャストするだけでいいみたいです。

これからも色々大変そう、完成目標は6月です。面白いのつくるぞー

2012年5月14日月曜日

Beginning android games

アンドロイドのゲーム作りの勉強として、Beginning Android Gamesという本で勉強しています。


洋書で3300円くらいで買いました。
日本語版もでているみたいですが、値段が5000円近く(たぶん)するので、安いほうにしました。


内容は、基本的なゲームのフレームワークを作ってから、opengl1.0の2dと3dをゲームを作りながら
プログラムの解説をしていくという感じです。

読者対象としては、中途半端でよくわかりません。
前提として、javaを知らない人は絶対に無理、androidをまったく知らない人もきついかもしれない。
多少のゲーム作りの経験がないとちょっときついかも。
でもある程度ゲーム作りの経験がある程度ある人には物足りないし、「知っているよ」ということが多くてあんまり意味ないかも、自分もこっち側でした。

とはいえ今までは独りよがりのコードでゲームを作ってきたので、他人のソースを見て、やることは
なんか勉強になるはずと思って、これを参考にしつつ新しいアクションゲームをつくっていきたいと思っています。

本の中身は、説明が丁寧、やたらと長い(600page以上)、欧米人的な感じ(パッケージがbadlogicとか、書いてある文章とか、日本のプログラムの本ではあまり見られない)、そして時々崖から突き落とす。

ソースもダウンロードできます。途中サンプルのゲームを作りながら進んでいくんですが、
2Dのゲームはちょっとひどいです。
解像度も画面幅いっぱいに使ってないですし、それ以前に説明していた当たり判定の方法も使ってなくて、読者の宿題みたいな形にしています。
解像度いっぱいに使ってなくて、端末によっては60近いFPSがでるといっても意味を感じないです。
このゲームから、色々追加していくのは厳しいと思います。

いい点は、説明が丁寧な点です。他にもあるはず忘れましたが。


今回挑戦するテーマは......

1.canvasじゃなくてopenglを使う(1.1)。

2/他人のゲームフレームワークを利用して、javaでのゲーム作りの勉強をする。

という感じです。

でもなかなか、作られたコードの中で新たに追加していくというのは、難しい。
オブジェクト指向じゃないんじゃないか。本を読んでいくと何でこういう使い方するんだろうとか思うことが多いんですよね。なんか無駄なところがたくさんある気がする。
自分で作っていると、無駄なとこはないなと思うんですが、実際そんなことはないんだろうなー。

しかし、canvasでも十分早いし、openglを使う必要があるのか、普段の方法で作ったら
多分半分以下の時間でしあげられるんだけど、やっぱり勉強も必要だと思うのでがんばってやってみたいと思います。
意味あんのかなー・・・・・・・・
わからない。

2012年5月5日土曜日

Freefallをリリース

Freefallというパズルゲームをアンドロイドマーケットにリリースしました。
内容はテトリス+コンボです。
テトリスで消した後に、続けて消すと、コンボになったら面白いのになーと思い作りました。

○タイトル画面

ネットランクはついてないがランキングつき















○ランキング画面

5番まで記録できます。















○ゲーム画面

ブロックを右下の時間内に消すとコンボになり、
点数がさらに増加します。

ちゃっちゃっと作りたかったのですが、
レイアウトとか色々考えながら、作っていると想像以上に時間が
かかってしまいました。

そのうちのプログラムの時間は半分以下になると思います。
ほとんどが絵とか、レイアウトを考えたりする時間になってしまいました。

効率が悪いです。

適当ですが、作るのに2250分以上かかりました。
たぶん遅いんだろうなー。


androidマーケットへのリンクを張るので、よかったら応援してください。
次は、アクションゲームを6月いっぱいを目標に作っていきたいと思います。
そして、いままではcanvasを使って描画していたんですが、今度はopenglを使ってみたいと思います。
canvasでも描画速度が変わらないんで、変更する意味はないんですが、opengl2.0でシェーダーを
触ってみたいんで、その練習にopenglに慣れたいと思います。
勉強過程も書く予定。
いやどうでもいいですね。

↓アンドロイドマーケットへのリンク

https://play.google.com/store/apps/details?id=jp.freefall&feature=more_from_developer#?t=W251bGwsMSwxLDEwMiwianAuZnJlZWZhbGwiXQ..

2012年4月27日金曜日

こわいこわい

先日、計算クエストという暗算アプリを出しました。
数日たって思ったよりもダウンロードされないんですが、
この間デベロッパー画面を見てみたら、評価に一つ星がついてました。
その次の日のアプリダウンロード数はゼロ。
こわいこわいこわい、

ちなみにリリースして、1ヶ月位経過しましたが、ダウンロード数は100件くらいで、
アクティブユーザーは半分くらいです。

そして、収入は1ドル未満というひどい状態。
完成させるのに結構時間がかかって、色々画面デザインとかも工夫したのに
この結果とは、これは落ち込みました。

以下でダウンロードできるので、よかったら一つ星アプリを応援してください。

https://play.google.com/store/apps/details?id=jp.Keisan&feature=more_from_developer#?t=W251bGwsMSwxLDEwMiwianAuS2Vpc2FuIl0.

2012年4月24日火曜日

Admobでクラッシュした

admobを使って作ったアプリでアクティビティをすぐに切り替えるとクラッシュしていたので、
そのことを書きたいと思います。

ゲームの構成は、

タイトル画面に戻れるように、タイトル画面の用のアクティビティ(1とします)は常に生きている状態

タイトル画面のSTARTをクリックすると他のゲーム用のActivity(2とします)が起動するという感じです。
この後戻るボタンでタイトルに戻るとこのゲームアクティビティのDestroyが呼ばれるという構成です。

で、戻るボタンを押して、すぐにスタートをタッチすると、死んだはずの(2)のonStopが呼ばれずにアクティビティが生きたままになってしまうので、落ちてしまう。(原因はわかりません)

なので、解決方法は、
public class game extends Activity{

    private FrameLayout frameLayout;        // レイアウトを持つ
    private AdView m_Ad;
    @Override
 public void onPause(){
  super.onPause();
  // 広告をviewから切り離す
  frameLayout.removeView(m_Ad);          
 }

 @Override
 public void onRestart(){
  super.onRestart();
  frameLayout.addView(m_Ad);      // レイアウトに貼り付ける
 }

これで、アクティビティをすぐに切り替えても落ちなくなった。

アクティビティを切り替えるようにはできてますが、
一つのアクティビティでゲームを作ったほうがいいのかもと思いました。
個人的メモでした。

2012年4月21日土曜日

admobの広告を画面下に設置する

広告を張らないと無料アプリでは儲からないということで、
admobの導入方法を書きたいと思います。
admobのサインインとかは省略して、導入だけやります(eclipse)。

1.まず、広告を取り入れるプロジェクトのプロパティ→javaのビルドパス→外部jarの追加を選んで、
ダウンロードしたadmobのjarを選択。

2.実行するプロジェクトのAndroidManifest.xml
に以下を追加

<activity
           android:name="com.google.ads.AdActivity"
   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|
                 smallestScreenSize">
</activity> 

ちなみにandroid:configChangeの項目は、android3.2以上?のバージョンでないと実行できません。
なので、プロジェクトのandroidビルドターゲットのバージョンをそれ以上にセットしてください。
自分は4.0にしました。
後、それだと低いバージョンのosに対して実行できないんじゃないかというのがありますが、
古いバージョンで実行できていれば大丈夫なので、気にする必要はありません。
後、このconfigChangesの設定を入れないと広告が表示されないので必須?です。


3.ソースに広告を乗っけるコードを書く。

自分はゲームを作っているので、activityのソースに直接書きます。
アクティビティを継承したクラスで、

 private GameView view;    // ゲームに使うview
 private AdView m_Ad;      // admobclassをインポートする必要ありatarimae

@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  Window window = getWindow();
  window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  view = new GameView(this);
  // ad生成
  m_Ad = new AdView(this,AdSize.BANNER,ID);      // IDにはアプリ登録番号を入れる
  RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams   ( RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
  lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);    // 下にセットするようにする
  m_Ad.setLayoutParams(lp);
  
  RelativeLayout layout = new RelativeLayout(this);
  layout.addView(view);
  layout.addView(m_Ad);
  m_Ad.loadAd(new AdRequest());    // 広告の表示
  
  setContentView(layout);
 
  // 広告がタッチされたなどの条件を取ります。
  m_Ad.setAdListener(new AdListener(){
         @Override
         public void onDismissScreen(Ad arg0) {
          // TODO Auto-generated method stub
         }
         @Override
            public void onLeaveApplication(Ad arg0) {
        // TODO Auto-generated method stub
       }
       @Override
       public void onPresentScreen(Ad arg0) {
        // TODO Auto-generated method stub
       }
       @Override
       public void onReceiveAd(Ad arg0) {
        // TODO Auto-generated method stub
       }
   @Override
   public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
    // TODO 自動生成されたメソッド・スタブ  
   }
        });
    }

// 消しておく
 @Override
 public void onDestroy(){
  super.onDestroy();
  m_Ad.destroy();
 m_Ad = null;
 }

以上でadmobの広告画面の一番下に表示されると思います。

いままで、admobを使ってみて、最高で1クリック5セントくらいです。
20クリックで1ドル.......(ToT)

おしまい。

2012年4月17日火曜日

パズル作ってます

今テトリスに追加要素を加えたパズルゲームを作っています。
リリース目標は来週の土日まで、前に作ったアプリがぜんぜんだめなので、
今回は少しでも、ダウンロードされるようにがんばりたいです。

最初

個人でandroidアプリを作っています。
androidの収入で食えるくらいまで収益が上がるようにがんばる過程を書きたいと思います。
androidがなくなるまでがんばる予定。