8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RPGツクールMVAdvent Calendar 2015

Day 21

RPGツクールMVでデバイスのセンサを使う

Last updated at Posted at 2015-12-21

この記事は、RPGツクールMV Advent Calendar 2015の21日目の記事です。

RPGツクールMVでは、HTMLとJavaScriptで構成されているため、基本的にウェブでできる機能が簡単に扱えるのが魅力です。1

この記事では、デバイスのセンサを使って条件分岐を行うゲームを作ってみます。注意事項として、センサーの種類によってはデバイスによって動かないことがあり、重要なところで使うとゲームとして成り立たなくなってしまうので注意が必要です。

デバイスの傾きセンサを使う

HTML5では、devicemotionイベントを使うことにより、デバイスの傾き情報を取得することが可能です。

前述のとおり、通常のWebフロントでの実装とそこまで変わりがありません。

今回は、傾きセンサを使って、特定の条件(デバイスをひっくり返した時に)、下のマップのAからBに移動するといった目的を達成したいと思います。
TestProject.png

プラグインの作成

プラグインについては、既にいろんな記事でも書かれていますし、サンプルで幾つかのプラグインが入っているので、JavaScriptが読める人であればそこまで難しくないです。

注意事項として、JSのコメントにツクールMVのメーカーで表示される、また、変更できるパラメータの情報を記述します。

他にも$gameVariablesでゲーム内の変数の操作ができたり、Game_Interpreter.prototype.pluginCommandでプラグインコマンドをフックできます。

今回はデバイスのセンサを使った以下のコードをライブラリとして追加しました。
お試し程度で作りましたが、傾きの閾値もパラメータで指定できるとで良いですね。

ReverseDetect.js
//=============================================================================
// ReverseDetect.js
//=============================================================================

/*:ja
 * @plugindesc デバイスをひっくり返したことを検知します
 * @author miyukki
 *
 * @param variableId
 * @desc 変数ID
 * @default 0001
 *
 * @param detectEnabled
 * @desc 有効にするかどうか(プラグインコマンドでも有効にできます)
 * @default 0
 *
 * @help
 *
 * プラグインコマンド:
 *   ReverseDetect enable
 */

(function() {
  var parameters = PluginManager.parameters('TestPlugin');
  var variableId = Number(parameters['variableId']);
  var detectEnabled = Number(parameters['detectEnabled']) != 0;

  if (!window.DeviceMotionEvent) {
    alert("DeviceMotionEvent does not supported!");
  }

  window.addEventListener("devicemotion", function(e) {
    var z = e.accelerationIncludingGravity.z;
    if (z < -9.8 && detectEnabled) {
      $gameVariables.setValue(variableId, 1);
    }
  }, false);

  // Hook command
  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function(command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === 'ReverseDetect') {
      if (args[0] == 'enable') {
        detectEnabled = true;
      }
    }
  }
})()

プラグインの追加と設定

「ツール」→「プラグイン管理」をクリックしてプラグインを追加していきます。
今回はどこでもイベントを検知するようdetectEnabled1にしておきます。
傾きを検知すると、ここで指定したvariableIdに値1が代入されます。
image

イベントの追加

マップ上のイベントを追加したい箇所に、イベントを追加していきます。
今回は全部で4ページ分のイベントを追加しました。4ページ使ったのは、センサの変数の反転を用意するためです。
(イベントの出現条件の変数がLarger Than以外もできるようになるといいなぁ…)

1. ひっくり返し検知(反転)を1にする

image

2. ひっくり返し検知が1の場合、ひっくり返し検知(反転)を0にする

image

3. ひっくり返し検知(反転)が1の場合、エラーメッセージを表示する

image

4. ひっくり返し検知が1の場合、目的の動きをする(ここでは場所移動)

image

実際の挙動

実際にどのような挙動になるのかを、動画にとってみました。
https://www.youtube.com/watch?v=RkkI5QFEqpw

まとめ

今回、ツクールシリーズを初めて使ってみたのですが、MVからはJavaScriptでプラグインを書けるということもあり、簡単に複雑な動作やセンサを扱えるのがすごい便利な印象でした。

  1. この記事を書く際に、ビデオやオーディオデバイスを使う事を試みたのですが、デスクトップ版では動く動きませんでした。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?