バックキー押下2013/12/06

今までのサンプルでは、Androidのバックキーを押すと有無を言わせずアプリが終了します。
ゲームなんかだと前の画面に戻ったりメニューを出したりしたいので、native側でバックキーの処理を行えるようにします。


java側の処理です。
BaseActivity.java
	public final static int		KEY_BACK	= 1;		// バックキー
	protected static int		key_status;						// キー入力状態
	/********************
	    バックキー入力
	 ********************/
	@Override
	public void		onBackPressed()
	{
		key_status = KEY_BACK;
	}
						{
							int		_key = key_status;

							key_status = 0;
							if ( !updateNative(touch_status, _key) ) {		// native部稼働
								finish();
								break;
							}
							else if ( phase != 1 ) {
								break;
							}
						}

onBackPressed()でバックキーの押下を検知して、updateNative()で native側に状態を送る…だけです。


native側です。
SysMain.cpp
/**********
    稼働
 **********/
JNIEXPORT jboolean JNICALL	Java_sys_BaseActivity_updateNative(JNIEnv* env, jobject, jbyteArray touch, jint key)
{
	Renderer::update();							// 描画前処理
	SoundManager::update();						// サウンド処理
	key_status = key;							// キー入力状態

java側から受け取ったバックキーの状態を sys::key_statusにセットする…だけです。やっぱり。

common.h
// キー種類
enum
{
	KEY_BACK	= 1,			// バックキー
};

バックキー押下時の sys::key_statusの値はこちらで定義しています。


サンプルです。
AppMain.cpp
/******************************
    稼働
		戻り値	アプリ続行か
 ******************************/
Bool	update_app(void)
{
	sprite[SPR_PHOTO].draw(0.0f, 0.0f);					// 背景
	for (int i = 0; i < 4; i++) {						// ビー玉
		int		t = ((cnt + i*15) % 60) - 30;

		sprite[SPR_BALL_BLUE + i].draw(((i*180 + cnt*4) % 720) - 360, 400 - (30*30 - t*t)/2);
	}
	cnt++;

	if ( end_cnt == 0 ) {
		if ( sys::key_status == sys::KEY_BACK ) {		// バックキー
			sys::SoundManager::play(0, "se.ogg", sys::SoundPlayer::FILE_ASSET);
			sys::Renderer::fade_out(60);
			end_cnt = 60;
		}
	}
	else if ( --end_cnt == 0 ) {
		return	FALSE;									// アプリ終了
	}

	return	TRUE;
}

バックキーが押されると、
・サウンド se.oggを再生
・60フレームかけてフェードアウトの後、アプリ終了
という処理になっています。


プロジェクト一式はこちらから。

ルパン三世vs名探偵コナン THE MOVIE2013/12/08

見てきました。なかなか面白かったです。

これから見ようとする方は、先にTV版のスペシャルを見ておくことをお勧めします。


それでは、ここからネタバレを含む感想です。


自分はルパンはあらかた観ているけど、コナンの方は土曜にたまたまテレビをつけたらやっていたから見た…という程度です。

今回はコナンの世界にルパンがやってきたという話なので、コナン側の登場人物がよく出ます。その代り、前半は活躍したけど後半にはさっぱりという人も多いです。銭形警部も含めて。
映画オリジナルキャラのエミリオとかも結局は前半だけなので、
・前半 コナン風の話
・後半 ルパン風の話
と分けられているような感じです。


さて、タイトルに"VS"とはありますが、本当に対決になっていたのか?

ルパンが裏でいろいろ画策していて、それをコナンが推理で見抜くという構図はあるんですが、ルパンの目的はTV版でも出た鉱石の流出を止めるということらしいので、それ自体はコナンが妨害することでもないんですよね。むしろコナンに協力してもらっても良いくらい。
ルパンは人助けになるのは嫌で、コナンは殺し合いはさせたくないと利害が一致しない部分もありますが、結局はルパンの「コナンと対決してみたい」という遊び心で対決みたいな形にもっていったということなのでしょうか?

前半で、盗んだ宝石を返すというルパンのおかしな行動を銭形警部が「遊びでそういうことをする奴」みたいなことを言っていましたが、それが伏線なのかもしれません。あれも銭形ならば「あいつの行動には必ず計算がある。ムダに動く奴じゃねェ……」と、疑いそうなものなんですが。

まんがタイム 1月号2013/12/09

秘書の仕事じゃありません
部下ちゃんの口は▽より△の方がいいな、やはり。
テーブルの上の者を落とさずにあれだけ動けるとは大した性能だ。

はこいり良品
このネットの時代で、百科事典や子供の名づけ辞典を売らなきゃいけないとは、古本屋も大変だ。

天子様が来る!
洞窟はハンパで廃墟はハンパじゃないというのは、どういう基準なんだろう。
周囲1km無人じゃ、怖い以前に生きていけないな。

誰がつけたか 俺の名は(答えは番組後半で)2013/12/10

東映特撮 YouTube Officialで、昔懐かし「星雲仮面マシンマン」の配信が始まりました。

主人公が地球にやってきた理由は卒業論文のレポートのためだとか、悪の組織はボスの科学者が子供嫌いなため世界征服ではなく子供に嫌がらせをしているとか、ちょっと変わった特撮ヒーローものです。

マシンマンの特徴的な技は「カタルシスウェーブ」。人から悪の心を取り除いてしまう光線で、くらった人間はまるで別人のように変わっていましたから、ある意味非常に恐ろしい技です。

第一話では、敵の首領プロフェッサーKが「子供達から教育を奪ってしまえ!」と、教科書を白紙にするという作戦を展開していました。
秘密保護法の曲解のような、タイムリーなネタです。


【送料無料】星雲仮面マシンマン VOL.1 【DVD】

【送料無料】星雲仮面マシンマン VOL.1 【DVD】
価格:8,232円(税込、送料込)


わざわざ透明なマントなんかつけるから、「ビニール風呂敷」とか言われるんじゃなかろうか。