ラベル Andengine の投稿を表示しています。 すべての投稿を表示
ラベル Andengine の投稿を表示しています。 すべての投稿を表示
2015年3月12日木曜日

制作中のAndroid用アクションRPGゲーム



久しぶりの投稿です。

最近はAndEngine講座動画は放置気味でアクションゲームを作っています。
完成には程遠いですが、ひと段落ついたのでプレイ動画をアップしてみました。

今のところ動画に含まれているのはステージ選択と戦闘場面ですね。


ステージ選択画面です。動画にありますがスワイプで左右に場面を切り替えることができます。左右のアニメーションを滑らかにするのに苦労しました。
画像素材は仮のものです。

で、四角いボタンをタッチして戦闘場面に移行します。



戦闘場面では剣を持ったキャラクターを左右ボタンで操作して敵に突進させます。
主人公キャラクターは前方へ自動で加速するので、向きを変えると慣性でドリフトします。
この操作感がゲームの売りになればなぁ。と思っています。

時間経過で敵キャラが沸き、一定数の敵を撃破すればステージクリアになります。

ちなみに敵キャラは、移動、待機、攻撃などの行動を選択して動くようにしています。緑色のスライムは攻撃行動をとっていることを表しています。

敵キャラクターは動画ではスライムだけですが、他にも追加する予定です。

犬か猫かよくわからない生物(仮)等の素材も作っています。

ステージ追加やキャラの成長要素などのゲームの骨格はもちろん、グラフィックやサウンドなど、完成までに必要な要素はまだまだあります。完成度は5~10%程度です。

・・・完成するのか?



2015年1月13日火曜日

AndEngineのEntityModifier一覧


AndEngineで画像や文字の座標や拡大率などを、一定時間かけて変化させるのにEntityModifierというものを使います。
結構種類があって、覚え切れないものもあるので、一覧にまとめました。

AndEngineのEntityModifier一覧 (ほっぽこ開発 Andengine講座):

まだ、調べ切れていないものもありますが、一応全てのEntityModifierを挙げたつもりです。

詳細などは、また今後充実させていこうと思います。

個人的に一番の収穫は現在の値からの相対的な変化量だけ指定することが出来る○○ByModifierの存在です。
2014年12月26日金曜日

AndEngineのGLES2でClipEntityを使う

講座の方で記事を書きました。

Entityのうち四角い領域を切り出す(クリップ)機能を持つClipEntityの使い方です。
AndEngineのGLES2AnchorCenterでしか使えなかったものですが、GLES2でも使える方法があったので調べてみました。
詳しくはClipEntityで四角を切り出して表示 - ほっぽこ開発Andengine講座: にて。
2014年12月20日土曜日

AndEngine講座はじめました。

AndEngineの使い方とかを紹介するページを作りました。

ほっぽこ開発Andengine講座

今後内容を増やせていけたらと思います。

また、講座内容を動画にもしてみました。


AndEngineの知名度、あがればいいなあ。
2014年12月7日日曜日

新作アプリ「無限もぐら」リリースしました!

前作「ゆっくり崩し」のリリースから約5ヶ月。ほっぽこ開発が贈るAndroidゲームアプリ第2弾!
無限もぐら
をリリースしました!


本作はもぐら叩き風のゲームとなっています。

もぐらを叩いて、レベルを上げて、より大量のもぐらを叩く。という暇つぶしゲームです。
通常のもぐら叩きとは違い、制限時間や反射神経の要素が全くありません。
どちらかというと梱包材のプチプチを一気に潰すような、そんな爽快感があふれるゲームです。

スクリーンショット


開発に関して

本作も、前作「ゆっくり崩し」と同様に、Andengineを使って開発しました。OpenGLの機能を使った高速な描画がなければ、この大量のもぐらは表現出来なかったと思います。色々工夫はしましたが、2012年の端末でも1000匹以上のもぐらを40fpsで描画できたので、やはりAndengineも、もっと広く知られるべきだと思いました。

パフォーマンス的な部分では色々工夫はしましたが、開発の大部分は前作と共通の作業だった気がします。思い出したり調べなおしたりする作業が結構あったので、その部分をあらかじめまとめることで、もっと早い開発ができたらいいなぁ。と思いました。

お借りした素材

前作の効果音はすべてSofTalkで作成したゆっくりボイスでしたが、本作では効果音素材を以下のサイトからお借りしました。高音質で使いやすい効果音が沢山あります。

効果音ラボ - フリー、商用無料、報告不用の効果音素材をダウンロード:
2014年12月5日金曜日

大量のEntityをGenericPoolを使って再利用する

シューティングゲームの弾幕や、アクションゲームで敵を倒した際に敵に重なるように表示される得点のような、「表示する機会は多いけど、すぐに画面から消えるオブジェクト」を考えます。

Andengineでは画像を表示するならSprite、テキストならTextクラスのオブジェクトを生成します。

ですが、オブジェクトの生成は重くなるので、大量のオブジェクトを「必要になったら生成。不必要になったら削除。」といった処理で利用しているとFPSが落ちてしまいます。

このようなオブジェクトはAndengineのGenericPoolを使って再利用することで処理を軽くすることができます。

GenericPoolのイメージ

「Pool」とは泳ぐプールの他に「蓄える」といった意味があります。つまりGenericPoolはオブジェクトを蓄えておくのに利用するクラスということです。

ここでは、Spriteをシューティングゲームの弾として使っている場合を考えます。
シューティングゲームの弾は画面上に沢山現れますが、その全てはすぐに画面外に出て行ったり、キャラクターに当たったりして画面から消えます。
このようなゲームでは弾のSpriteをGenericPoolで再利用する場合、以下のような処理になります。

  1. 弾を画面上から消す際に、そのSpriteのオブジェクトを削除せずに、GenericPoolに格納する。
  2. 次に、新しいが必要になった際に、新しいSpriteオブジェクトを生成せずに、GenericPoolに格納されているSpriteを取り出す。
  3. GenericPoolが空の時に弾が必要な場合は、GenericPoolにSpriteオブジェクトを作らせる。
ここで、プールに格納することをRecycle。プールから取り出すことをObtain。新しくオブジェクトを作ることをAllocateといいます。

GenericPoolでの弾の再利用のイメージ

2014年12月1日月曜日

Andengineで透明度指定が上手く行かない場合の対処方法

AndengineでTextをフェードアウトする処理が上手く行かないことがあり調べたところ、解決方法が見つかったので残しておきます。

症状

Textの透明度をsetAlpha()で指定しても、「完全に透明」か「完全に不透明」にしかなりませんでした。
setAlpha(0)で完全に透明になり、それ以外の値では、値にかかわらず完全に不透明になってしまいます。「半透明にできない」とも言えますね。図はInkscapeで作成したイメージです。
Textが半透明にできない!
stackoverflowでの質問と、その質問記事でリンクされている公式フォーラムに原因と解決方法がありました。

2014年11月29日土曜日

TouchAreaBindingとは

Sceneには
public void setTouchAreaBindingOnActionDownEnabled(final boolean pTouchAreaBindingOnActionDownEnabled)
と
public void setTouchAreaBindingOnActionMoveEnabled(final boolean pTouchAreaBindingOnActionMoveEnabled)
というメソッドがあります。

ソースには
Enable or disable the binding of TouchAreas to PointerIDs (fingers).
という説明があります。訳すと
「タッチ領域のポインタID(指)への束縛を有効化、無効化する」 という感じでしょうか。
いまいちよく分からないので調べてみました。

タッチ領域の束縛とは

通常、タッチ領域(SpriteとかRectangleとか)に指を触れ、領域外までドラッグするとその領域のイベントは実行されなくなります。
しかし、タッチ領域がポインタIDに束縛されると、指をドラッグしてタッチ領域の外に出ても、指を離すまで、その領域のタッチイベントが実行され続けます。
これがタッチ領域の束縛です。

そして、この束縛が領域のタッチ時に行われるようにするのが
setTouchAreaBindingOnActionDownEnabled(true)
で、束縛が、領域外から指をドラッグして領域内に入った時に行われるようにするのが
setTouchAreaBindingOnActionMoveEnabled(true)
というわけです。
タッチ領域の束縛