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

Project1

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

[已经解决] 关于ARPG连招快捷键的设定

[复制链接]

Lv1.梦旅人

梦石
0
星屑
131
在线时间
85 小时
注册时间
2013-7-24
帖子
219
跳转到指定楼层
1
发表于 2015-1-28 13:12:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
例如搓招,类似拳皇,七龙珠的大波都要正反各摇一下按A,我想问一下就是如何让玩家可以搓招,按一定顺序快速按下某些键(不是同时要不这个怎么办:↘ 踢 ↖拳),纯事件不求大篇章的事件(最好是放上来啦),求思路,若是脚本求使用方法且如何修改里面的按键设置
终于放假了,正在尝试肝出一款新游戏

Lv3.寻梦者

梦石
0
星屑
1244
在线时间
898 小时
注册时间
2014-12-4
帖子
379
2
发表于 2015-1-28 13:22:30 | 只看该作者
设置开关 按下方向键后打开某个开关 然后分歧设置间隔 几帧内 按下下一个键 触发招式 否则关闭开关  思路是这样的 估计你还要优化

点评

把所有的按键用条件分歧写到一个事件里 并行起来 一个并行就可以了 然后招数的起式键 打开 出来一个并行 就可以了  发表于 2015-1-28 17:18
我突然想到,不需要并行的 只需要一个循环 一个变量+一个开关就好了  发表于 2015-1-28 17:14
我说了要优化滴……  发表于 2015-1-28 14:10
另外补充一下“几帧内”这个概念在事件里要写成循环,事件还得是并行,运行效率会有较大的影响。  发表于 2015-1-28 14:03
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
131
在线时间
85 小时
注册时间
2013-7-24
帖子
219
3
 楼主| 发表于 2015-1-29 15:22:31 | 只看该作者
谢谢大家啦,不过谁能帮我做一个简单的范例……
终于放假了,正在尝试肝出一款新游戏
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2015-1-30 11:39:55 | 只看该作者
我的想法是用一个栈存放按键的序列。当按键序列符合某些规则时,发出技能并清空按键的序列。

怎么感觉就像一个 parser 一样

范例无。因为有一点麻烦,而且我自己用不到。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22948
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
5
发表于 2015-1-30 14:04:06 | 只看该作者
本帖最后由 tseyik 于 2015-1-30 14:17 编辑


自己找個計時脚本
記下開始時間,完成選擇後用時間判定成功与否
  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.       http://kaisou-ryouiki.sakura.ne.jp/material/manual/img/choice_manual.png
  32.       ====================================================================
  33.       
  34.       ver1.00

  35.       Last Update : 2014/01/07
  36.       01/07 : 新規
  37.       
  38.       ろかん   http://kaisou-ryouiki.sakura.ne.jp/
  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.   def refresh
  101.     self.bitmap.dispose if self.bitmap
  102.     self.bitmap = @base_bitmap.dup
  103.     if $game_message.choices[@index] && !$game_message.choices[@index].empty?
  104.       self.visible = true
  105.       self.bitmap.draw_text(0, 1, 170, 22, $game_message.choices[@index], 1)
  106.     else
  107.       self.visible = false
  108.     end
  109.     self.opacity = 0
  110.     self.zoom_x = 1
  111.     self.zoom_y = 1
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 解放
  115.   #--------------------------------------------------------------------------
  116.   def dispose
  117.     @base_bitmap.dispose
  118.     self.bitmap.dispose if self.bitmap
  119.     super
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● フレーム更新
  123.   #--------------------------------------------------------------------------
  124.   def update
  125.     super
  126.     if @parent.active
  127.       self.opacity += 28
  128.     else
  129.       unless self.opacity.zero?
  130.         if @parent.index == @index
  131.           self.zoom_x += 0.08
  132.           self.zoom_y += 0.03
  133.           self.opacity -= 13
  134.         else
  135.           self.opacity -= 28
  136.         end
  137.       end
  138.     end
  139.   end
  140. end

  141. class Spriteset_DirectionChoice
  142.   #--------------------------------------------------------------------------
  143.   # ● 公開インスタンス変数
  144.   #--------------------------------------------------------------------------
  145.   attr_reader   :active
  146.   attr_reader   :index
  147.   #--------------------------------------------------------------------------
  148.   # ● オブジェクト初期化
  149.   #--------------------------------------------------------------------------
  150.   def initialize
  151.     @active = false
  152.     @index = -1
  153.     create_sprites
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 選択肢スプライトの作成
  157.   #--------------------------------------------------------------------------
  158.   def create_sprites
  159.     @command_sprites = []
  160.     4.times{|i| @command_sprites << Sprite_ChoiceItem.new(i, self)}
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 入力処理の開始
  164.   #--------------------------------------------------------------------------
  165.   def start
  166.     @active = true
  167.     @index = -1
  168.     @command_sprites.each{|sprite| sprite.refresh}
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 入力処理の終了
  172.   #--------------------------------------------------------------------------
  173.   def terminate
  174.     @active = false
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 選択肢が完全に閉じているか
  178.   #--------------------------------------------------------------------------
  179.   def close?
  180.     @command_sprites.all?{|sprite| sprite.opacity.zero?}
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 解放
  184.   #--------------------------------------------------------------------------
  185.   def dispose
  186.     @command_sprites.each{|sprite| sprite.dispose}
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● キャンセル処理の有効状態を取得
  190.   #--------------------------------------------------------------------------
  191.   def cancel_enabled?
  192.     $game_message.choice_cancel_type > 0
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 選択肢の有効判定
  196.   #--------------------------------------------------------------------------
  197.   def active_choice?(i)
  198.     $game_message.choices[i] && !$game_message.choices[i].empty?
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 選択肢の選択後処理
  202.   #--------------------------------------------------------------------------
  203.   def choiced_process(index)
  204.     @index = index
  205.     $game_message.choice_proc.call(index)
  206.     @command_sprites[index].flash(Color.new(255, 255, 255, 200), 35)
  207.     Sound.play_ok
  208.     Input.update
  209.     terminate
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● フレーム更新
  213.   #--------------------------------------------------------------------------
  214.   def update
  215.     @command_sprites.each{|sprite| sprite.update}
  216.     if @active
  217.       if cancel_enabled? && Input.trigger?(:B)
  218.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  219.         Sound.play_cancel
  220.         Input.update
  221.         terminate
  222.       else
  223.         if Input.trigger?(:DOWN)
  224.           choiced_process(3) if active_choice?(3)
  225.         elsif Input.trigger?(:LEFT)
  226.           choiced_process(0) if active_choice?(0)
  227.         elsif Input.trigger?(:RIGHT)
  228.           choiced_process(1) if active_choice?(1)
  229.         elsif Input.trigger?(:UP)
  230.           choiced_process(2) if active_choice?(2)
  231.         end
  232.       end
  233.     end
  234.   end
  235. end

  236. class Window_Message < Window_Base
  237.   #--------------------------------------------------------------------------
  238.   # ● 全ウィンドウの作成
  239.   #--------------------------------------------------------------------------
  240.   alias _create_all_windows_recreate_choice create_all_windows
  241.   def create_all_windows
  242.     _create_all_windows_recreate_choice
  243.     @choice_window.dispose
  244.     @choice_window = Spriteset_DirectionChoice.new
  245.   end
  246. end
复制代码

点评

這選章可做単一選項,連繢的選項就可做成連招効果,不過時間方面要另想方法  发表于 2015-1-30 15:07
怎么看都觉得你发的脚本和楼主的提问不沾边。。。  发表于 2015-1-30 14:11
无关吧?  发表于 2015-1-30 14:11
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21626
在线时间
9413 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

6
发表于 2015-1-30 15:03:52 | 只看该作者
本帖最后由 喵呜喵5 于 2015-1-30 16:53 编辑


RUBY 代码复制
  1. =begin
  2. ===============================================================================
  3.   搓招 By喵呜喵5
  4. ===============================================================================
  5.  
  6. 【说明】
  7.  
  8.   在地图上按照特定的顺序按键的话对应变量的值就会发生改变
  9.  
  10.   通过这个脚本搭配事件可以实现搓招的效果
  11.  
  12. =end
  13. $m5script ||= {};$m5script[:M5IC20150130] = 20150130
  14. module M5IC20150130
  15. #==============================================================================
  16. # 设定部分
  17. #==============================================================================
  18.  
  19.   COMMAND = {
  20.  
  21.     [:LEFT,:RIGHT,:A] => 1,  
  22.     [:DOWN,:DOWN,:A] => 2,
  23.     [:DOWN,:UP,:A] => 3,   
  24.     [:C,:C,:A] => 4,
  25.     [:DOWN,:LEFT,:UP,:UP,:A] => 5,
  26.     [:DOWN,:LEFT,:UP,:RIGHT,:A] => 6,   
  27.     [:UP,:UP,:RIGHT,:LEFT,:A] => 7,
  28.  
  29.   # 搓招列表设置格式:
  30.   # [ 按键列表(逗号隔开) ] => 数字 ,
  31.  
  32.   }  
  33.  
  34.   VAR = 1
  35.  
  36.   # 变量ID,成功搓招后对应ID的变量数值会变成搓招列表上设置的数字
  37.  
  38.   TIME = 45
  39.  
  40.   # 搓招速度,数字越小要求搓招速度越快
  41.  
  42.   SWI = 1
  43.  
  44.   # 开关ID,对应ID的开关打开后脚本失效
  45.  
  46. #==============================================================================
  47. # 设定结束
  48. #==============================================================================  
  49. end
  50. class Scene_Map
  51.   alias m5_20150130_start start
  52.   def start
  53.     m5_20150130_start
  54.     @m5ic20150130 = {
  55.       :command => M5IC20150130::COMMAND,
  56.       :list => M5IC20150130::COMMAND.keys,
  57.       :input => M5IC20150130::COMMAND.keys,
  58.       :index => -1,:time => 0,
  59.     }
  60.     max_size = 0
  61.     @m5ic20150130[:list].each { |key| max_size = [max_size,key.size].max }
  62.     @m5ic20150130[:size] = max_size
  63.   end
  64.   alias m5_20150130_update update
  65.   def update
  66.     m5_20150130_update
  67.     return if $game_switches[M5IC20150130::SWI]
  68.     update_20150130_input   
  69.     if Graphics.frame_count - @m5ic20150130[:time] > M5IC20150130::TIME
  70.       clear_20150130_input
  71.     end
  72.   end
  73.   def clear_20150130_input   
  74.     data = @m5ic20150130
  75.     return if data[:time] == 0
  76.     data[:time] = 0
  77.     data[:index] = -1
  78.     data[:input] = data[:list].clone
  79.   end
  80.   def update_20150130_input
  81.     list = [:DOWN, :LEFT, :RIGHT, :UP, :A, :B, :C, :X, :Y, :Z, :L,
  82.       :R, :SHIFT, :CTRL, :ALT]
  83.     data = @m5ic20150130
  84.     list.each do |key|
  85.       if Input.trigger?(key)
  86.         data[:time] = Graphics.frame_count
  87.         data[:index] += 1
  88.         data[:input].reject!{|c_list| c_list[data[:index]] != key }        
  89.         if data[:input].size == 1 && data[:input][0].size == data[:index] + 1
  90.           $game_variables[M5IC20150130::VAR] = data[:command][data[:input][0]]
  91.           clear_20150130_input
  92.           return
  93.         elsif data[:input].size == 0
  94.           clear_20150130_input
  95.           return
  96.         end
  97.         return        
  98.       end
  99.     end
  100.   end
  101. end

点评

我觉得层主主好神奇啊  发表于 2015-2-2 15:18

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 搓澡•﹏•

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
131
在线时间
85 小时
注册时间
2013-7-24
帖子
219
7
 楼主| 发表于 2015-2-1 10:57:46 | 只看该作者
谢谢大家啦,版主结贴吧
终于放假了,正在尝试肝出一款新游戏
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 21:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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