AndEngine で ClipEntity を実装する

 拙作アプリ「形か色をタップせよ!」の中で、メニューから「遊び方」ボタンを押すと
device-2014-08-16-234348
このような画面となります。
 開いたダイアログボックスの中で、遊び方を説明している画像がスワイプによって次の画像に切り替わるようになっています。ダイアログボックス内で画像がスライドして切り替わります。えぇい説明が面倒だわい。インストールして見てください。見終わったらアンインストールしていただいて結構です。
 
 この処理は ClipEntity を使っています。

			// ダイアログより少し小さめの ClipEntity を作る
			ClipEntity clipEntity = new ClipEntity(x, y, width, height);
			// ダイアログ内に配置
			clipEntity.setPosition(px, py);
			dialogEntity.attachChild(clipEntity);

			// 説明画像を貼り付ける幅広の Entity。
			Entity entity = new Entity(width + width/2, height/2, width*3, height){
				float startX;
				@Override
				public boolean onAreaTouched(final TouchEvent pAreaTouchEvent, final float x, final float y){
					if(pAreaTouchEvent.getAction() == TouchEvent.ACTION_DOWN){
						startX = x;
					}
					else if(pAreaTouchEvent.getAction() == TouchEvent.ACTION_MOVE){
					}
					else if(pAreaTouchEvent.getAction() == TouchEvent.ACTION_UP){
						float moveX = x - startX;
						float time = 0.5f;
						float curX = this.getX();
						// 左方向にスワイプしたら、次の画像に MoveXModifier で移動
						if(curX > width/2 - width && moveX < 0){
							index++; // 別の箇所で定義済み
							addressSprite.setCurrentTileIndex(index);
							MoveXModifier moveModifier = new MoveXModifier(time, curX, curX - width, EaseCircularOut.getInstance());
							moveModifier.setAutoUnregisterWhenFinished(true);
							this.registerEntityModifier(moveModifier);
						}
						// 右方向にスワイプしたら、前の画像に MoveXModifier で移動
						else if(curX < width/2 + width && moveX > 0){
							index--;
							addressSprite.setCurrentTileIndex(index);
							MoveXModifier moveModifier = new MoveXModifier(time, curX, curX + width, EaseCircularOut.getInstance());
							moveModifier.setAutoUnregisterWhenFinished(true);
							this.registerEntityModifier(moveModifier);
						}
					}
					return true;
				}
			};
			// 3枚の画像を entity に貼り付ける
			Sprite e01 = new Sprite(width/2, height/2, resourcesManager.e01_region, vbom);
			entity.attachChild(e01);
			Sprite e02 = new Sprite(width/2 + width, height/2, resourcesManager.e02_region, vbom);
			entity.attachChild(e02);
			Sprite e03 = new Sprite(width/2 + width + width, height/2, resourcesManager.e03_region, vbom);
			entity.attachChild(e03);
			// entity を clipEntity に貼り付ける
			clipEntity.attachChild(entity);
			// entity のタッチイベント取得は hud に登録
			hud.registerTouchArea(entity);

 指にくっついてくるヌルヌルとした動きではないのですが、簡易なページめくりでよいなら、ぜひ活用してください。
 適当な画像3枚を用意して、以前掲載したサンプルプロジェクトに実装して確かめてみるとよいかも知れません。

RPG風迷路ゲーム改めパズルゲーム

 次のゲームは、タイトルのようなゲームを作ろうとドット絵を作成し始めました。
princesses
 一応 Tiled Map Editor でマップ作りしているのですが、36×24 の限定的なダンジョン=迷路なので、AndEngine で TMXTiledMap の Extention を利用するか微妙なところです。
 
 7月24日の記事に書いた「上下2画面」仕様はヤメとしました。手間の割には効果がないと事前に気付いたのです。おぉ、進歩。

密かに時間を計測する

 今日「アプリをホームボタンで終了した後も時間を計測するにはどうするの?」という質問メールをいただきました。
 
 私は、作るアプリに必要な機能をその都度調べては行き当たりばったり実装しているので、質問のような機能は使ったこともなく実装方法もわかりません。冷たいなあ。
 
 でも、何となくわかる範囲で適当に答えると・・。
 
 まず、質問にある機能は AndEngine の実装とは別物ですね。AndEngine はゲームエンジン(フレームワーク)だから、描画とかシーン変遷とかリソース管理を簡単にしようとするもの。
 純然たる Android の範疇です。
 バックグラウンドで時間を計測し、何かをしようとするなら、Android のサービスを利用するのでしょう。この辺りはまったくもって知識がないので間違っていたら、賢者の方コメントお願いします。コメント開放中です。
 
で、上記の「何かをしようとするなら」というのが重要で、時間を計測するだけで「何もしないのなら」アプリ Activity のonPause() 内で時刻を取得・保存しておき、onResume() 内で現在時刻と保存時刻との差分を計算すればよろしかろ、と思います。
 時刻取得は、Google先生に聞いてみよう。 
 
 以上、個別にメールを差し上げるには知識もなく、ブログを御覧いただいている方々の御協力をアテにしての返事でした。
 
 
 閑話休題。
 昨夜のこと、Huluで「UNDER THE DOOM」の最新話を見て、次のアプリの作成に入ろうとブラウザを閉じかけた、その時、「SATURDAY NIGHT LIVE」配信バナーが目に飛び込んだ。見なくては!見らいでか!
 シーズン39第1話を見て午前3時になってしまったので、とても眠いです。
 
 さあ、第2話見ようっと。

新作アプリ「形か色をタップせよ!」を公開しました

 7月24日から作り始めて15日間で完成しました。
device-2014-08-01-003914
 今回のアプリは、画面の指示に従って同じ形(または色)の図形をタップするカジュアルゲームです。
 ビートを刻む中タイミングよくタップしてください。
 序盤は「コンボの誘惑」と「ステージクリアするために残すべき図形」に悩みつつ、後半は徐々に速くなるビートに間に合うよう瞬時の判断力を発揮してください。
 
 短期間で作った割には、ようやく 一般受けしそう なアプリの予感。
 デザインは、あいかわらず・・そう、スタイリッシュですが・・。
 
 ランキング対応です。
 現在のところ、14150点で私がトップ。参加者ひとり。
ic_launcher-web QRcode

アンドロイダーで「秘密のスライドパズル」のレビューが掲載されました

 「秘密のスライドパズル」がアンドロイダーの公認アプリとなり、レビューが掲載されました。
 
 ということは、このアプリ Android 2.3 以上でも動くのか?
 アンドロイダーさんは、本当に試したのか?
 Android 4.x でも動くのか?
 動くのか?
 
 動くのか?
 
 
 タイトルのスタイルを「子持ち主婦でもできる!無料で簡単Androidアプリ開発」さんの真似をしてしまいました。ごめんなさい。