设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1674|回复: 1
打印 上一主题 下一主题

[已经解决] 【快速 选项 脚本】通过按某一键盘选择选项的脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
429
在线时间
175 小时
注册时间
2013-11-2
帖子
131
跳转到指定楼层
1
发表于 2015-4-19 00:24:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
举例:
选项:答应她,拒绝她
按下键盘按钮“A”=选择选项“答应她”
按下键盘按钮“B”=选择选项“拒绝她”
就是 通过按某个按钮 进行 选项 的脚本。
希望能在脚本内部自定义四个快捷按钮。
搜索是一件比发帖容易的事,因此我绝对是搜不到满意答案才来发帖的。

Lv5.捕梦者

梦石
0
星屑
22461
在线时间
8598 小时
注册时间
2011-12-31
帖子
3364
2
发表于 2015-4-19 02:10:26 | 只看该作者
方向キー入力型選択肢
  1. =begin
  2.       RGSS3
  3.       
  4.       ★ 方向キー入力型選択肢 ★

  5.       選択肢の形式をコマンド選択型から方向キー入力型に変更します。
  6.       決定キーは使用せず、選択肢のある方向に対応した方向キーを入力することで、
  7.       選択肢を選びます。
  8.       
  9.       あまり長い文字列がある選択肢には向かない・・
  10.       
  11.       ● 機能と使用法 ●==================================================
  12.       使用方法はデフォルトのイベントコマンド「選択肢の表示」とほぼ同じです。
  13.       --------------------------------------------------------------------
  14.       [デフォルトと異なる点]
  15.       デフォルトでは例えば2択の選択肢を作りたい場合、
  16.       イベントコマンド「選択肢の表示」で選択肢1と選択肢2の欄に文字列を設定します。
  17.       
  18.       このスクリプトを導入して同じことを実現しようとした場合、
  19.       「選択肢1と選択肢3の欄を使う」「選択肢3と選択肢4の欄を使う」といったことが
  20.       可能になります。
  21.       選択肢の1~4の欄は、選択肢が表示される位置を意味するようになり、
  22.       何も入力されていない欄は選択肢として判定されません。
  23.       --------------------------------------------------------------------
  24.       選択肢1~4の位置関係は以下のとおりです。
  25.        選択肢 1 : 左に選択肢が表示されます。
  26.        選択肢 2 : 右に選択肢が表示されます。
  27.        選択肢 3 : 上に選択肢が表示されます。
  28.        選択肢 4 : 下に選択肢が表示されます。
  29.       --------------------------------------------------------------------
  30.       ↓ 即席:設定例の図
  31.       [url]http://kaisou-ryouiki.sakura.ne.jp/material/manual/img/choice_manual.png[/url]
  32.       ====================================================================
  33.       
  34.       ver1.00

  35.       Last Update : 2014/01/07
  36.       01/07 : 新規
  37.       
  38.       ろかん   [url]http://kaisou-ryouiki.sakura.ne.jp/[/url]
  39. =end

  40. $rsi ||= {}
  41. $rsi["方向キー入力型選択肢"] = true

  42. class Sprite_ChoiceItem < Sprite
  43.   #--------------------------------------------------------------------------
  44.   # ● オブジェクト初期化
  45.   #--------------------------------------------------------------------------
  46.   def initialize(index, parent)
  47.     super(nil)
  48.     @index = index
  49.     @parent = parent
  50.     setup
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 初期設定
  54.   #--------------------------------------------------------------------------
  55.   def setup
  56.     create_basebitmep
  57.     self.z = 500
  58.     self.ox = @base_bitmap.width / 2
  59.     self.oy = @base_bitmap.height / 2
  60.     self.visible = false
  61.     case @index
  62.     when 0
  63.       self.x = Graphics.width / 4 - 10
  64.       self.y = Graphics.height / 2
  65.     when 1
  66.       self.x = Graphics.width / 4 * 3 + 10
  67.       self.y = Graphics.height / 2
  68.     when 2
  69.       self.x = Graphics.width / 2
  70.       self.y = Graphics.height / 4 - 10
  71.     when 3
  72.       self.x = Graphics.width / 2
  73.       self.y = Graphics.height / 4 * 3 + 10
  74.     end
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● ベースビットマップの作成
  78.   #--------------------------------------------------------------------------
  79.   def create_basebitmep
  80.     @base_bitmap = Bitmap.new(170, 22)
  81.     @base_bitmap.gradient_fill_rect(0, 0, 85, 22, gradient_color2, gradient_color1)
  82.     @base_bitmap.gradient_fill_rect(85, 0, 85, 22, gradient_color1, gradient_color2)
  83.     @base_bitmap.font.size = 20
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 背景グラデーションカラーの取得1
  87.   #--------------------------------------------------------------------------
  88.   def gradient_color1
  89.     Color.new(0, 0, 80, 180)
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 背景グラデーションカラーの取得2
  93.   #--------------------------------------------------------------------------
  94.   def gradient_color2
  95.     Color.new(0, 0, 80, 20)
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 进行控制符的事前变换
  99.   #    在实际绘制前、将控制符替换为实际的内容。
  100.   #    为了减少歧异,文字「\」会被首先替换为转义符(\e)。
  101.   #--------------------------------------------------------------------------
  102.   def convert_escape_characters(text)
  103.     result = text.to_s.clone
  104.     result.gsub!(/\\/)            { "\e" }
  105.     result.gsub!(/\e\e/)          { "\\" }
  106.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  107.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  108.     result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
  109.     result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
  110.     result.gsub!(/\eG/i)          { Vocab::currency_unit }
  111.     result
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 获取第 n 号角色的名字
  115.   #--------------------------------------------------------------------------
  116.   def actor_name(n)
  117.     actor = n >= 1 ? $game_actors[n] : nil
  118.     actor ? actor.name : ""
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 获取第 n 号队伍成员的名字
  122.   #--------------------------------------------------------------------------
  123.   def party_member_name(n)
  124.     actor = n >= 1 ? $game_party.members[n - 1] : nil
  125.     actor ? actor.name : ""
  126.   end

  127.   #--------------------------------------------------------------------------
  128.   # ● リフレッシュ
  129.   #--------------------------------------------------------------------------
  130.   def refresh
  131.     self.bitmap.dispose if self.bitmap
  132.     self.bitmap = @base_bitmap.dup
  133.     if $game_message.choices[@index] && !$game_message.choices[@index].empty?
  134.       self.visible = true
  135.       self.bitmap.draw_text(0, 1, 170, 22, convert_escape_characters($game_message.choices[@index]), 1)
  136.     else
  137.       self.visible = false
  138.     end
  139.     self.opacity = 0
  140.     self.zoom_x = 1
  141.     self.zoom_y = 1
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 解放
  145.   #--------------------------------------------------------------------------
  146.   def dispose
  147.     @base_bitmap.dispose
  148.     self.bitmap.dispose if self.bitmap
  149.     super
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● フレーム更新
  153.   #--------------------------------------------------------------------------
  154.   def update
  155.     super
  156.     if @parent.active
  157.       self.opacity += 28
  158.     else
  159.       unless self.opacity.zero?
  160.         if @parent.index == @index
  161.           self.zoom_x += 0.08
  162.           self.zoom_y += 0.03
  163.           self.opacity -= 13
  164.         else
  165.           self.opacity -= 28
  166.         end
  167.       end
  168.     end
  169.   end
  170. end

  171. class Spriteset_DirectionChoice
  172.   #--------------------------------------------------------------------------
  173.   # ● 公開インスタンス変数
  174.   #--------------------------------------------------------------------------
  175.   attr_reader   :active
  176.   attr_reader   :index
  177.   #--------------------------------------------------------------------------
  178.   # ● オブジェクト初期化
  179.   #--------------------------------------------------------------------------
  180.   def initialize
  181.     @active = false
  182.     @index = -1
  183.     create_sprites
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 選択肢スプライトの作成
  187.   #--------------------------------------------------------------------------
  188.   def create_sprites
  189.     @command_sprites = []
  190.     4.times{|i| @command_sprites << Sprite_ChoiceItem.new(i, self)}
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 入力処理の開始
  194.   #--------------------------------------------------------------------------
  195.   def start
  196.     @active = true
  197.     @index = -1
  198.     @command_sprites.each{|sprite| sprite.refresh}
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 入力処理の終了
  202.   #--------------------------------------------------------------------------
  203.   def terminate
  204.     @active = false
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 選択肢が完全に閉じているか
  208.   #--------------------------------------------------------------------------
  209.   def close?
  210.     @command_sprites.all?{|sprite| sprite.opacity.zero?}
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 解放
  214.   #--------------------------------------------------------------------------
  215.   def dispose
  216.     @command_sprites.each{|sprite| sprite.dispose}
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● キャンセル処理の有効状態を取得
  220.   #--------------------------------------------------------------------------
  221.   def cancel_enabled?
  222.     $game_message.choice_cancel_type > 0
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 選択肢の有効判定
  226.   #--------------------------------------------------------------------------
  227.   def active_choice?(i)
  228.     $game_message.choices[i] && !$game_message.choices[i].empty?
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 選択肢の選択後処理
  232.   #--------------------------------------------------------------------------
  233.   def choiced_process(index)
  234.     @index = index
  235.     $game_message.choice_proc.call(index)
  236.     @command_sprites[index].flash(Color.new(255, 255, 255, 200), 35)
  237.     Sound.play_ok
  238.     Input.update
  239.     terminate
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● フレーム更新
  243.   #--------------------------------------------------------------------------
  244.   def update
  245.     @command_sprites.each{|sprite| sprite.update}
  246.     if @active
  247.       if cancel_enabled? && Input.trigger?(:B)
  248.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  249.         Sound.play_cancel
  250.         Input.update
  251.         terminate
  252.       else
  253.         if Input.trigger?(:DOWN)
  254.           choiced_process(3) if active_choice?(3)
  255.         elsif Input.trigger?(:LEFT)
  256.           choiced_process(0) if active_choice?(0)
  257.         elsif Input.trigger?(:RIGHT)
  258.           choiced_process(1) if active_choice?(1)
  259.         elsif Input.trigger?(:UP)
  260.           choiced_process(2) if active_choice?(2)
  261.         end
  262.       end
  263.     end
  264.   end
  265. end

  266. class Window_Message < Window_Base
  267.   #--------------------------------------------------------------------------
  268.   # ● 全ウィンドウの作成
  269.   #--------------------------------------------------------------------------
  270.   alias _create_all_windows_recreate_choice create_all_windows
  271.   def create_all_windows
  272.     _create_all_windows_recreate_choice
  273.     @choice_window.dispose
  274.     @choice_window = Spriteset_DirectionChoice.new
  275.   end
  276. end
复制代码

点评

可以不改变选项窗口的的形状吗?  发表于 2015-6-11 22:07
面白いwww  发表于 2015-4-19 15:58

评分

参与人数 1星屑 +200 收起 理由
taroxd + 200 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-7-19 09:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表