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

Project1

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

[有事请教] 我又跳出来了,关于双持【已解决】

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1957
在线时间
111 小时
注册时间
2017-9-5
帖子
194
跳转到指定楼层
1
发表于 2025-2-19 17:15:41 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 间桐樱 于 2025-3-3 22:35 编辑

已知双持武器和盾不可共存,准备将武器和盾替换成【主手】和【副手】,如何能在双持情况下既能双持武器,又能持有剑盾(不把盾放在武器类别里的情况下),而不是定死只能选一
又或者干脆按键切换,像扔道具或删技能那样,在装备栏里按个CTRL就能切换是否双持
已拿到三种方法,超出预期,感谢各位大佬

Lv3.寻梦者

梦石
0
星屑
1957
在线时间
111 小时
注册时间
2017-9-5
帖子
194
21
 楼主| 发表于 2025-2-26 16:54:00 | 只看该作者
本帖最后由 间桐樱 于 2025-2-26 17:50 编辑
魔法丶小肉包 发表于 2025-2-26 16:17
强制按两次才能触发切换
def process_change
    if Time.now - (@last_ctrl_time || Time.at(0)) < 1


肉包大佬,我想给道具丢弃也加个强制两次,统一一下,而且这个我按两次CTRL的时候第一次总是Sound.play_buzzer音
  #--------------------------------------------------------------------------
  # ● アイテム[捨てる]
  #--------------------------------------------------------------------------
  def on_item_dump
    if item_dumpable?
      Sound.play_ok
      if Time.now - (@last_ctrl_time || Time.at(0)) < 1
        Sound.play_ok
        @number_window.set(item, max_item)
        @number_window.show.activate
        @item_window.deactivate
        @last_ctrl_time = nil
      else
        @last_ctrl_time = Time.now
      end
    end
  end

点评

解决了(>^ω^<)  发表于 2025-2-26 18:25
看到if item_dumpable?了吗,在这个条件里加上else  发表于 2025-2-26 18:11
我想把Sound.play_buzzer再加上,但不知道怎么弄,两次按键呼出丢弃窗口都是ok音,不能丢弃的buzzer音  发表于 2025-2-26 18:08
很正常呀,因为你把Sound.play_buzzer删了呀  发表于 2025-2-26 18:04
又发现问题了,把Sound.play_buzzer删了以后,扔贵重品(无法丢弃)没有声  发表于 2025-2-26 18:00
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
323
在线时间
85 小时
注册时间
2024-4-13
帖子
27
20
发表于 2025-2-26 16:24:53 | 只看该作者
可能是因为sleep,把sleep删除再试试

点评

删掉了,成功了  发表于 2025-2-26 16:30
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6230
在线时间
1457 小时
注册时间
2015-7-25
帖子
617

极短25参与开拓者

19
发表于 2025-2-26 16:17:36 | 只看该作者
强制按两次才能触发切换
RUBY 代码复制
  1. def process_change
  2.     if Time.now - (@last_ctrl_time || Time.at(0)) < 1
  3.       Audio.se_play("Audio/SE/Equip1", 90, 100)
  4.       Input.update
  5.       activate
  6.       call_handler(:change)
  7.       @last_ctrl_time = nil
  8.     else
  9.       @last_ctrl_time = Time.now
  10.     end
  11.   end

点评

是sleep的问题,删掉后成功了  发表于 2025-2-26 16:28
换个干净的工程测试  发表于 2025-2-26 16:26
无法触发,按多少次都没有反应  发表于 2025-2-26 16:23
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.3.8.1 (游戏文件已上传更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
旅途的最终目标~ ???(保密~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
323
在线时间
85 小时
注册时间
2024-4-13
帖子
27
18
发表于 2025-2-26 15:35:47 | 只看该作者
本帖最后由 chen12311 于 2025-2-26 16:22 编辑

这样子
这个是你的忘掉技能的插件
  1.   def on_item_del
  2.     if !item.nil?
  3.       skill_id = item.id
  4.       @actor.forget_skill(skill_id)
  5.       @item_window.refresh
  6.       sleep(1)
  7.     end
  8.   end
复制代码

切换装备的
  1.   def on_item_change
  2.     if [email protected]
  3.       @actor.switch_open
  4.     elsif @actor.switch
  5.       @actor.switch_closs
  6.     end
  7.     @slot_window.refresh
  8.     sleep(1)
  9.   end
复制代码

替换掉就行

点评

确实有问题,这个是武器切换速度,不是切换后的冷却速度......  发表于 2025-2-26 15:54
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
323
在线时间
85 小时
注册时间
2024-4-13
帖子
27
17
发表于 2025-2-26 10:34:36 | 只看该作者
本帖最后由 chen12311 于 2025-2-26 11:35 编辑
间桐樱 发表于 2025-2-26 10:26
这个就是道具丢弃的脚本,和遗忘脚本一样都是两次CTRL,但不知道为什么不冲突
#======================== ...


因为所用到的地方不一样
一个是Scene_Equip
另一个是Scene_Item
#好吧,放错了,实际上还得看新手教程
放错了,我的问题
再根据游戏设置,这是所对应的,还有就是不要整与其产生冲突的键位,比如上下左右确认取消键
esc不行是因为他对应的键位为B,而b是取消
在Window_Selectable有写
  1.   #--------------------------------------------------------------------------
  2.   # ● “确定”和“取消”的处理
  3.   #--------------------------------------------------------------------------
  4.   def process_handling
  5.     return unless open? && active
  6.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  7.     return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  8.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  9.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
  10.   end
复制代码

1.png (88.08 KB, 下载次数: 10)

1.png

2.png (7.06 KB, 下载次数: 10)

2.png

点评

大佬,我再多问一句,切换完成后添加个冷却一秒要怎么做,技能遗忘和双持切换都有这个问题,需要连续两次按键触发,但后续继续按都会连上  发表于 2025-2-26 14:56
谢谢大佬,我把切换放到ALT键上了,这下舒服了  发表于 2025-2-26 11:36
Esc我也试过,不知道为什么不成功  发表于 2025-2-26 11:26
我把技能遗忘扔到del键失败,是不是要加那个全键位脚本,不知道怎么用  发表于 2025-2-26 11:10
只能改键位了吗,va的键位本来就少......  发表于 2025-2-26 11:05
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1957
在线时间
111 小时
注册时间
2017-9-5
帖子
194
16
 楼主| 发表于 2025-2-26 10:26:53 | 只看该作者
chen12311 发表于 2025-2-26 08:01
#已更新
你那个道具丢出的插件我能看看吗

这个就是道具丢弃的脚本,和遗忘脚本一样都是两次CTRL,但不知道为什么不冲突
#==============================================================================
# ■ Window_ItemList
#==============================================================================
class Window_ItemList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 決定やキャンセルなどのハンドリング処理
  #--------------------------------------------------------------------------
  def process_handling
    return unless open? && active
    return call_handler(:append_ctrl) if handle?(:append_ctrl) && Input.trigger?(:CTRL)
    super
  end
end
#==============================================================================
# ■ Window_ItemNumber
#==============================================================================
class Window_ItemNumber < Window_ShopNumber
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :number                   # 入力された個数
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    x = (Graphics.width - window_width) / 2
    super(x, 200, line_height * 2 + 32)
    @item = nil
    @Max = 1
    @number = 1
  end
  #--------------------------------------------------------------------------
  # ● アイテム、最大個数の設定
  #--------------------------------------------------------------------------
  def set(item, max)
    @item = item
    @max = max
    @number = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    contents.draw_text(0, 0, 200, line_height, "捨てる数:")
    draw_item_name(@item, 4, line_height)
    draw_number
  end
  #--------------------------------------------------------------------------
  # ● アイテム名表示行の Y 座標
  #--------------------------------------------------------------------------
  def item_y
    line_height
  end
end
#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias start_dump start
  def start
    start_dump
    create_item_dump_window
  end
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_item_window_dump create_item_window
  def create_item_window
    create_item_window_dump
    @item_window.set_handler(:append_ctrl, method(:on_item_dump))
  end
  #--------------------------------------------------------------------------
  # ● アイテム数選択ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_dump_window
    @number_window = Window_ItemNumber.new
    @number_window.viewport = @viewport
    @number_window.hide
    @number_window.set_handler(:ok,     method(:on_number_ok))
    @number_window.set_handler(:cancel, method(:on_number_cancel))
  end
  #--------------------------------------------------------------------------
  # ● アイテム[捨てる]
  #--------------------------------------------------------------------------
  def on_item_dump
    if item_dumpable?
      Sound.play_ok
      if Time.now - (@last_ctrl_time || Time.at(0)) < 1
        Sound.play_ok
        @number_window.set(item, max_item)
        @number_window.show.activate
        @item_window.deactivate
      else
        Sound.play_buzzer
      end
    end
    @last_ctrl_time = Time.now
  end
  #--------------------------------------------------------------------------
  # ● 個数入力[決定]
  #--------------------------------------------------------------------------
  def on_number_ok
    Sound.play_ok
    do_item_dump(@number_window.number)
    @number_window.hide
    activate_item_window
  end
  #--------------------------------------------------------------------------
  # ● 個数入力[キャンセル]
  #--------------------------------------------------------------------------
  def on_number_cancel
    Sound.play_cancel
    @number_window.hide
    activate_item_window
  end
  #--------------------------------------------------------------------------
  # ● 捨てるの実行
  #--------------------------------------------------------------------------
  def do_item_dump(number)
    $game_party.lose_item(item, number)
  end
  #--------------------------------------------------------------------------
  # ● アイテムを捨てる判定
  #--------------------------------------------------------------------------
  def item_dumpable?
    item.is_a?(RPG::Item) ? !item.key_item? : (!item.nil?)
  end
  #--------------------------------------------------------------------------
  # ● 所持数の取得
  #--------------------------------------------------------------------------
  def max_item
    $game_party.item_number(item)
  end
end
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1957
在线时间
111 小时
注册时间
2017-9-5
帖子
194
15
 楼主| 发表于 2025-2-26 09:36:34 | 只看该作者
本帖最后由 间桐樱 于 2025-2-26 09:40 编辑


还是只按一次就切换武器,不过我找到问题所在了,出在技能遗忘脚本,不知道冲突原因在哪儿,这两个都是按两次CTRL生效,删掉技能遗忘脚本,装备切换就变成正常两次生效,但我又不可能删
#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_window
    wx = 0
    wy = @status_window.y + @status_window.height
    ww = Graphics.width
    wh = Graphics.height - wy
    @item_window = Window_SkillList.new(wx, wy, ww, wh)
    @item_window.actor = @actor
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @item_window.set_handler(:CTRL,   method(:on_item_del))
    @command_window.skill_window = @item_window
  end
  #--------------------------------------------------------------------------
  # ● スキルを忘れる
  #--------------------------------------------------------------------------
  def on_item_del
    if !item.nil?
      skill_id = item.id
      @actor.forget_skill(skill_id)
      @item_window.refresh
    end
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルを忘れる
  #--------------------------------------------------------------------------
  alias _forget_skill_copy forget_skill
  def forget_skill(skill_id)
    _forget_skill_copy(skill_id)
    @copy_skills.delete(skill_id)
  end
end
#==============================================================================
# ■ Window_Selectable
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  # ● 決定やキャンセルなどのハンドリング処理
  #--------------------------------------------------------------------------
  def process_handling
    return unless open? && active
    return process_ok       if ok_enabled?        && Input.trigger?(:C)
    return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
    return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
    return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
    return process_ctrl     if Input.trigger?(:CTRL)
  end
  #--------------------------------------------------------------------------
  # ● CTRL ボタン(CTRL)が押されたときの処理
  #--------------------------------------------------------------------------
  def process_ctrl
    Sound.play_ok
    if Time.now - (@last_ctrl_time || Time.at(0)) < 1
      Sound.play_ok
      Input.update
      call_handler(:CTRL)
    end
    @last_ctrl_time = Time.now
  end
end
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
323
在线时间
85 小时
注册时间
2024-4-13
帖子
27
14
发表于 2025-2-26 08:01:29 | 只看该作者
本帖最后由 chen12311 于 2025-2-26 09:50 编辑
  1.   def process_change
  2.     if Time.now - (@last_ctrl_time || Time.at(0)) < 1
  3.       Audio.se_play("Audio/SE/Equip1", 90, 100)
  4.       Input.update
  5.       activate
  6.       call_handler(:change)
  7.     end
  8.     @last_ctrl_time = Time.now
  9.   end
复制代码

#已更新
你那个道具丢出的插件我能看看吗

点评

但是我还加了两次CTRL键呼出道具扔掉的脚本,这个跟遗忘技能脚本就没冲突QAQ  发表于 2025-2-26 09:47
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1957
在线时间
111 小时
注册时间
2017-9-5
帖子
194
13
 楼主| 发表于 2025-2-25 21:21:09 | 只看该作者
chen12311 发表于 2025-2-25 20:10
class Game_BattlerBase
  attr_accessor :equip_switch
  def switch

大佬,有时间能帮我改一下连续按两次CTRL再切换武器风格吗?
下边这个是我之前请教遗忘技能的时候,某位大佬写的脚本,一秒内按两次CTRL才触发
我试着改了一下加到切换装备里,然而没成功
  def process_ctrl
    Sound.play_ok
    if Time.now - (@last_ctrl_time || Time.at(0)) < 1
      Sound.play_ok
      Input.update
      call_handler(:CTRL)
    end
    @last_ctrl_time = Time.now
  end
end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-7 16:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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