1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

プラグイン制作/技術|雑談

リューイ2017-05-08に開始した「プラグイン制作・技術」の中の討論

  1. くらむぼん

    くらむぼん モデレーター スタッフ モデレーター

    ツクールの動作対象範囲内で言うと、
    iOS Safari 8(つまりiOS8)では残念ながらclassは使えないみたいです…
    そこをご自分のゲームの動作対象にするかどうかで決めるのがおすすめです!
     
    #41
    神無月サスケ, しぐれん, 印度一好色他1人 がいいね!しています
  2. しぐれん

    しぐれん ユーザー

    >くらむぼんさん
    safariが対応外ですか。スマホ対応時にこれは痛いですね。
    手が空いた時に、旧来の書き方に修正することを検討します。
    ただ、iOS8は古いから切ってもいいという話もあり、難しいですね。
     
    最後に編集: 2017-07-02
    #42
    印度一好色, 尾角つの神無月サスケ がいいね!しています
  3. しぐれん

    しぐれん ユーザー

    最近はJavadocコメントを追加するようにしたのですが、とても便利ですね。
    入力補完がいい感じに仕事してくれます。
    本体にも欲しいですが、難しいでしょうね。
     
    #43
    印度一好色神無月サスケ がいいね!しています
  4. ツミオ

    ツミオ ユーザー

    いつもお世話になっております。
    マウスを使ったスクロールに関して疑問が出てたので、お力を貸していただければなと思います。

    【知りたいこと】
    Shiftキーを押しながらマウスホイールをスクロールさせた場合のホイール量を取得したいと思っています。

    【調べたこと】
    現在マウスのスクロール判定にTouchInput.wheelYを使っているのですが、Shiftキーを押しながらマウスをスクロールさせると、このTouchInput.wheelYの値が常に0になります。
    「何かキーを押しながらスクロールさせると0になるのかな?」と思ってShiftキーではなく他のキー(例えばCtrlキーなど)に変更してみたところ、確認できた範囲ではShiftキーだけがこの挙動を示しました。
    つまりShiftキー以外を押している場合、マウスのホイールを回転させるとTouchInput.wheelYの値もホイール量に合わせて通常通り変更されました。

    【まとめ】
    Shiftキーを押しているときのマウスのスクロールを判定したい場合、どのようなコードを書けばよいでしょうか?
    また、Shiftキーを押すとなぜTouchInput.wheelYの値が0になるのかも教えていただければ幸いです。

    以上、よろしくお願いいたします。
     
    #44
    神無月サスケ がいいね!しました
  5. トリアコンタン

    トリアコンタン モデレーター スタッフ モデレーター

    こんにちは!
    onWheelイベントが発生したときに、引数にマウスホイールの変化量が渡されます。(event.deltaY)
    このときShiftキーが押下されていると、たとえホイールを回していても渡される値が-0で固定されてしまうようです。

    この現象は現行のChrome(もしくはFirefox)では発生しません。おそらくChromeのバグもしくは不適切な実装として修正されたものと思われます。よってコアスクリプト側での対処は難しいです。

    唯一の対処法としてNW.js(ローカル実行のエンジン)を最新版に更新する方法があります。(自己責任で下記をご参照ください)
    http://b.dlsite.net/RG26890/archives/upgrading_nwjs_within_rpgmakermv

    この方法でならShiftキーを押しながらでもホイールの変化量が正しく渡されることを確認しました。
    よろしければお試しください。

    追記
    上に回転させたか、下に回転させたか、および回転速度を意識しなくて良いのなら、onWheelイベント自体は発生しているのでTouchInput._onWheelを再定義してフラグを立てる方法もあります。
     
    最後に編集: 2017-11-04
    #45
    神無月サスケツミオ がいいね!しています
  6. ビービー

    ビービー ユーザー

    こんにちは

    ブラウザなどでShiftキーを押しながらマウスホイールをスクロールすると
    画面が左右にスクロールするのでツクールでもそうなのかなと思い
    並列処理のイベントに条件分岐のスクリプトでTouchInput.wheelX > 5とやってみたところ
    条件内のイベントコマンドが実行されたのでおそらくShiftキーを押しながらマウスホイールをスクロールした場合
    TouchInput.wheelXが変動するのだと思います。

    なのでShiftキーを押しているときのマウスのスクロールを判定したい場合は
    TouchInput.wheelXで取得できるようです。
    なぜこういう仕様なのかはわかりませんがとりあえず参考までにお知らせさせていただきました。
     
    #46
    神無月サスケ, トリアコンタンツミオ がいいね!しています
  7. ツミオ

    ツミオ ユーザー

    トリアコンタンさん、ビービーさん。
    お二人ともありがとうございます。

    トリアコンタンさんへの返信:
    環境によって動作が変わってしまうのですね。
    勉強になります。
    NW.jsの更新はしたことがなかったので、視野に入れてみます。

    こちらも検討してみます。
    ありがとうございます。

    ビービーさんへの返信:
    こちらでもTouchInput.wheelXの値が変動していることを確認しました。
    ただし値は100か-100かのいずれかでしたが、上のスクロールなのか下のスクロールなのかの判定には使えそうでした。
    参考になる情報ありがとうございます。


    とりあえず今回は別のキーを割り当てて代用しようかなと思います。
    大変勉強になりました。
    解決済みといたします。
     
    #47
    神無月サスケ がいいね!しました
  8. シトラス

    シトラス ユーザー

    メモ欄を書き間違えたときに「間違っています」という例外を投げて
    ゲームを停止させたいです。
    プラグインエラーでゲームが停止するのはびっくりするかもしれませんが
    間違っていることがはっきりわかるという意味では便利ですし
    プログラミングを上達させるコツは「エラーメッセージを恐れないこと」だと聞いたからでもあります。

    それはともかく、ダメージ計算系のプラグインを作っているのですが単に例外を投げるだけでは
    コンソールに「Uncaught Error(エラーをキャッチできない)」と表示できるだけになってしまいます。

    別のところ、例えば「スクリプト」などからエラーを投げると
    ちゃんと(?)ゲームが停止します。この違いは、どこにあるのでしょうか?
     
    #48
    神無月サスケ がいいね!しました
  9. トリアコンタン

    トリアコンタン モデレーター スタッフ モデレーター

    こんばんは!
    ツクールMVのゲーム中に発生したエラーは次の2種類の方法で捕捉されています。

    1. SceneManager.runのtry-catch
    2. SceneManager.setupErrorHandlersで登録したSceneManager.onError関数

    このうちイベントコマンド「スクリプト」で発生したエラーを含めた大半のエラーが1で捕捉されます。
    2は少し難しいですが、非同期処理(ファイル読み込みなど)のコールバック関数で発生したエラーなどを捕捉しています。
    これらに捕捉されるとゲームの処理が中断されます。

    上記のいずれの場合も捕捉できないのは「上記の1.2.の処理が実行される前に発生したエラー」です。
    例えばプラグインを読み込んだ直後に実行する処理でエラーが起きた場合、コンソールに出力されるだけでエラーは捕捉できません。

    ・捕捉されないエラーの例
    PHP:
    (function() {
        
    'use strict';

        
    SceneManager.requestUpdate = function() {
            throw new 
    Error('このエラーはプラグインを読み込んだ直後に実行されるわけではないので捕捉できます。');
        };

        throw new 
    Error('このエラーはプラグインを読み込んだ直後に実行されるので捕捉できません。');
    })();
     
    #49
    シトラス, くろうど神無月サスケ がいいね!しています
  10. shun

    shun ユーザー

    こんばんは!

    アクションRPG的なものを作ろうとコモンイベントを駆使していたのですが、
    変数の管理の煩雑さやスクリプトの行数制限などでコモンイベントだけで実現するのは限界を感じています。

    汎用的に使用したい関数をプラグインとしてまとめて運用しようかと考えているのですが。
    javascriptやツクールの作法的に問題ないのかなと気になりました。

    例としてプレイヤーの正面1マス先のイベントを設定する関数を作りました。
    さらにイベントトリガーを取得して決定キーなら攻撃しないといった処理をするつもりです。

    コード:
    function setFrontEventID(value) {
    'use strict';
    var x = $gamePlayer.x;
    var y = $gamePlayer.y;
    
    var directionSwitch = {
    2: function(){
    y += 1;
    },
    4: function(){
    x -= 1;
    },
    6: function(){
    x += 1;
    },
    8: function(){
    y -= 1;
    }
    }
    var func = directionSwitch[$gamePlayer._direction];
    func();
    
    $gameVariables.setValue(value, $gameMap.eventIdXy(x, y));
    }
    
    アドバイスいただけると嬉しいです!
     
    #50
    神無月サスケ がいいね!しました
  11. 神無月サスケ

    神無月サスケ ユーザー

    どうも、shunさん。
    目の前のイベントIDを取得する関数ですが、
    関数の内容自体はこれでいいと思います。
    ※ただ、関数の引数の value は関数内のどこにも使われていないので省略したほうが
    分かりやすいかもしれません。

    これをプラグイン化する場合、例えば、Game_Mapの関数にしてはいかがですか。
    理由は、Game_Mapが、マップのイベント関係の処理を司っているからです。
    つまり、関数名を、Game_Map.prototype.setFrontEventID にして、
    呼び出すときは、var eventId = $gameMap.setFrontEventID(); みたいにすれば
    いいんじゃないかな、と思います。

    なお、その場合、1行目は、
    Game_Map.prototype.setFrontEventID = function() {
    最後は、
    };
    のように、セミコロンを付ける形式にしてください。
    (無名関数を、グローバル変数に代入する形式。コアスクリプトのイディオム)
     
    #51
    shun がいいね!しました
  12. shun

    shun ユーザー

    神無月サスケさん
    お返事ありがとうございます!

    なんとなーくではありますがjavascriptにも慣れてきたような気がしています。
    Game_Mapを拡張する形で実装を進めようと思います。

    またよろしくお願いします。
     
    #52
    神無月サスケ がいいね!しました
  13. ガルゴロン

    ガルゴロン ユーザー

    FTKR_ExBattleCommandを使って自作戦闘システムでスキルをアクターコマンドに直接して魔法(本来のスキルタイプではなく魔法という名前のスキル)を選択して、イベント発動するスキルでスキルの表示をONOFFによって変更。
    ここまではよかったが、キャンセルボタン押してスキルの表示をONOFFにする方法がない。
    111_PartyCommandSkipで、ふと「キャンセルボタン押したとき(戦う・逃げる)にコモンイベント発動と、キャンセルボタン押したときに戦う・逃げるにならずアクターコマンドに戻る」というものがあればと調べたけど、

    var _Scene_Battle_endCommandSelection =
    Scene_Battle.prototype.endCommandSelection;
    Scene_Battle.prototype.endCommandSelection = function() {
    _Scene_Battle_endCommandSelection.call(this);
    this.hasAlreadyInputStart = false;
    };

    })();

    なんとなく、ここを改変できれば可能だと思うけど、どう改変すればいいか分からない。
     
    #53
  14. ガルゴロン

    ガルゴロン ユーザー

    間違っていたのか・・・。
    コメントアウト(//)を使って調べたら
    this.hasAlreadyInputStart = true;
    が、キャンセルボタン押すと戦う・逃げるに戻る仕様だった。YEP_BattleEngineCoreの方が優先的に働くから別の方法を探さないといけない。
    で、YEP_BattleEngineCoreで戦う・逃げるを表示しないようにするには

    Yanfly.BEC.Scene_Battle_selectPreviousCommand =
    Scene_Battle.prototype.selectPreviousCommand;
    Scene_Battle.prototype.selectPreviousCommand = function() {
    if (this.isStartActorCommand()) {
    BattleManager.selectPreviousCommand();
    if (BattleManager.isInputting() && BattleManager.actor()) {
    this.startActorCommandSelection();
    } else {
    // Yanfly.BEC.Scene_Battle_startPartyCommandSelection.call(this);
    }
    } else {
    Yanfly.BEC.Scene_Battle_selectPreviousCommand.call(this);
    }
    };

    になっていた。
    ここのどこかにキャンセルボタン押したときにコモンイベント発動するものを組み込めばいいけど、どうすればいいかだよな。
     
    #54
  15. kuro

    kuro フォーラムスタッフ

    おつかれさまです。
    ピンポイントな相談で恐縮です。

    CharacterGraphicExtend.js 1.10.2
    MOG_CharPoses.js v2.1
    MOG_CharPoses_Customize.js

    上記の組み合わせの場合、CharacterGraphicExtend.jsの機能CGピクチャが機能しないことを確認しました。

    記述例<CGピクチャ:A,test>
    1.jpg

    正常な場合
    2.jpg

    こちらを解決頂くことは可能でしょうか。

    以下に新規プロジェクトをベースにした再現環境を用意しました。
    https://drive.google.com/open?id=1tGifSCH_fUi9CmRqY4FOr2NMi-hViVsc

    お力添え頂けますと幸いです。
     
    #55
  16. アストラル

    アストラル ユーザー

    > kuroさん
    こんばんは。
    取り急ぎプラグイン登録の順番を以下に変更することで、正常に動作するようです。
    MOG_CharPoses.js v2.1
    CharacterGraphicExtend.js 1.10.2

    追記
    どうやら原因は、characters画像として表示されたため、画像幅が通常のイベント画像と同じく1/12サイズ幅になっていました。
    他のイベント画像変更プラグインと併用する場合も、CharacterGraphicExtend.jsを下にした方が良さそうです。
    下にしたものが新しく、同一メソッドの場合最初に実行されていくためです。
     
    最後に編集: 2019-03-07
    #56
    トリアコンタン, kuro, 神無月サスケ他1人 がいいね!しています
  17. kuro

    kuro フォーラムスタッフ

    >アストラルさん
    こんばんは。
    早速ありがとうございました。

    ご指摘の順序で解決することができました。
    他の画像描画系にも影響を与えうるとのこと、注意してみます。

    以前ご提供くださったプラグインやスクリプトのコードも大変助かっております。
    いつも本当にありがとうございます。
     
    #57
    アストラル神無月サスケ がいいね!しています

このページを共有