フルスクリーン・ショートカットキーのコマンド入力化

土曜日
記事: 21
登録日時: 2017年11月18日(土) 19:22

フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by 土曜日 » 2017年11月18日(土) 19:38

お世話になります。
以下の問題を解決できる方を探しております。

ツクールVXaceでは、フルスクリーンと通常画面表示を、「Alt+Enter」のショートカットキーで切り替えられます。


しかし、コントローラーで操作されているプレイヤー様に、わざわざキーボードに戻って頂くのは、大変申し訳なく思います。

そこで、わざわざキーボードのキーを押さずとも、メニューコマンドの中に、「画面サイズ切替」という項目を追加したいと思うのです。

この画面サイズ切替にカーソルを合わし、ボタンを押下するたびに、画面サイズが、通常と全画面を、切り替えられる、ようにしたいのですが、予想外に、このショートカットキーのスクリプトが見つかりません。


画面サイズ自体を変更するスクリプトは、何名かの方が公開しているのを存じておりますが、そこまで複雑にせず、ただ、この「AltプラスEnter」というショートカットキーさえ、コントローラー操作で押せれば良いのです。

どなたか、RGSS3にお詳しい方、ショートカットキーの押し方を、お教え願えませんか?

宜しくお願いします。

奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by 奏ねこま » 2017年11月18日(土) 22:27

私もRGSS3(Ruby)はあまり詳しくありませんが、
ちょっと調べて試してみた感じ、以下のスクリプトでそれっぽく動きました。

コード: 全て選択

api = Win32API.new('user32.dll',
                   'keybd_event',
                   %w(i i i i),
                   'v')
sleep(0.2)
api.call(18, 0, 0, 0)
sleep(0.1)
api.call(13, 0, 0, 0)
sleep(0.1)
api.call(13, 0, 2, 0)
sleep(0.1)
api.call(18, 0, 2, 0)

説明を軽くつけると、

コード: 全て選択

api = Win32API.new('user32.dll',
                   'keybd_event',
                   %w(i i i i),
                   'v')
sleep(0.2)              # 0.2秒待つ
api.call(18, 0, 0, 0)   # Altキーを押す
sleep(0.1)              # 0.1秒待つ
api.call(13, 0, 0, 0)   # Enterキーを押す
sleep(0.1)              # 0.1秒待つ
api.call(13, 0, 2, 0)   # Enterキーを離す
sleep(0.1)              # 0.1秒待つ
api.call(18, 0, 2, 0)   # Altキーを離す

こんな感じです。

とりあえず調べてわかった範囲でやってみたという程度のものなので、
もしかしたらもっと良い方法があるかも知れません。

ちなみに、18とか13とかは「仮想キーコード」です。
仮想キーコードを調べれば、他のキー入力の再現もできると思います。
アバター
ゴリラ⤴ゴリラ⤵
記事: 5
登録日時: 2017年10月28日(土) 12:19

Re: フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by ゴリラ⤴ゴリラ⤵ » 2017年11月18日(土) 22:32

メニューのコマンドに追加する方法はわかりませんが
フルスクリーンスクリプトのトリガーボタンをパッドに対応したものに変更すれば
パッドのボタン1つで変えられるのではないでしょうか。

http://cacaosoft.webcrow.jp/script/rgss3/wndsz.html

例えば↑のスクリプトならば36行目の :F7 を :X :Y :Z :L :R のどれかにすれば
パッドで変更できるようになります。(:A :B :C はデフォルトで使用されているボタンなので
使わない方がいいと思います)

私もスクリプトは殆どわかりませんので
どうしてもメニューのコマンドに追加したいとなるとお力になれそうもないです。すみません
土曜日
記事: 21
登録日時: 2017年11月18日(土) 19:22

Re: フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by 土曜日 » 2017年11月18日(土) 23:58

奏ねこま様

ありがとうございます。
お書きになられたコードを、イベントのスクリプトに記述してみたところ、無事、フルスクリーン化することができました。

ゴリラゴリラ 様

ご紹介ありがとうございます。こちらも検討させて頂こうかと思います。


ショートカットキーの押し方がわかったので、後はこれを組み入れたメニュー画面が出来ればいいのですが、最近はMVが主流のようで、VXaceのスクリプトを組める方がなかなかいらっしゃらないようです。

メニュー一覧に、ボタン押下で上記スクリプトが走るようにしたいものですが、難しいですね。
アバター
ゴリラ⤴ゴリラ⤵
記事: 5
登録日時: 2017年10月28日(土) 12:19

Re: フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by ゴリラ⤴ゴリラ⤵ » 2017年11月19日(日) 01:21

ヘルプにあるスクリプト入門の「あらすじ画面の作成」を元に

あらすじウィンドウを表示するスクリプトを消して、かわりに奏ねこま様が記載してくれていたコードを
貼り付けてみました。

コード: 全て選択

class Window_MenuCommand
  alias window_size_add_original_commands add_original_commands
  def add_original_commands
    window_size_add_original_commands
    add_command("画面サイズ", :window_size)
  end
end

class Scene_Menu
  alias window_size_create_command_window create_command_window
  def create_command_window
    window_size_create_command_window
    @command_window.set_handler(:window_size, method(:command_window_size))
  end
  def command_window_size
    SceneManager.call(Scene_Window_Size)
  end
end

class Scene_Window_Size < Scene_MenuBase
  def start
    super
    api = Win32API.new('user32.dll','keybd_event',%w(i i i i),'v')
    sleep(0.2)
    api.call(18, 0, 0, 0)
    sleep(0.1)
    api.call(13, 0, 0, 0)
    sleep(0.1)
    api.call(13, 0, 2, 0)
    sleep(0.1)
    api.call(18, 0, 2, 0)
    return_scene
  end
end


一応コマンドで画面サイズは変更できたのですが、なんだか一瞬ウィンドウが全て消えて
また表示されるみたいでちょっと見苦しいです……。

私はこのあたりが限界のようです。スクリプト難しいですよね :|
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by 奏ねこま » 2017年11月19日(日) 04:05

メニューコマンド増やすならこうですかね。

コード: 全て選択

class Window_MenuCommand
  alias :__add_original_commands add_original_commands
  def add_original_commands
    __add_original_commands
    add_command("全画面切替", :fullscreen, true)
  end
end

class Scene_Menu
  alias :__create_command_window create_command_window
  def create_command_window
    __create_command_window
    @command_window.set_handler(:fullscreen, method(:command_fullscreen))
  end

  def command_fullscreen
    api = Win32API.new("user32.dll", "keybd_event", %w(i i i i), "v")
    sleep(0.2)
    api.call(18, 0, 0, 0)
    sleep(0.1)
    api.call(13, 0, 0, 0)
    sleep(0.1)
    api.call(13, 0, 2, 0)
    sleep(0.1)
    api.call(18, 0, 2, 0)
    @command_window.activate
  end
end
土曜日
記事: 21
登録日時: 2017年11月18日(土) 19:22

Re: フルスクリーン・ショートカットキーのコマンド入力化

投稿記事by 土曜日 » 2017年11月20日(月) 00:22

皆様

ありがとうございます。
無事、作動しました。
お知恵を貸して頂き、とても感謝致します。

スクリプトは難しいですね。
こういうのに強い方がいてくれてらと思います。

今回はありがとうございました。

“VX / Ace:質問” へ戻る