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

Project1

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

[已经解决] 帮忙改下这个VA的战斗指针脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
帖子
13
跳转到指定楼层
1
发表于 2017-4-17 15:41:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 小汰酱 于 2017-4-17 15:43 编辑

已经亲自用空白新工程测试过了,对己方单位使用物品就会出错



此外, 战斗中已经死了的敌人还是能被指针选到。这也是个BUG
哪位大佬帮帮忙改改,感激不尽
脚本在下面
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Sprite_BattleArrow
  3. #==============================================================================
  4.  
  5. class Sprite_BattleArrow < Sprite
  6.   #--------------------------------------------------------------------------
  7.   # ● 定义实例变量
  8.   #--------------------------------------------------------------------------
  9.   attr_reader   :index
  10.   attr_accessor :select_all
  11.   attr_accessor :can_select_all
  12.   attr_accessor :members
  13.   attr_accessor :add_x
  14.   attr_accessor :on_ok_method
  15.   attr_accessor :on_cancel_method
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化对像
  18.   #--------------------------------------------------------------------------
  19.   def initialize(type, viewport, can_select_all = false)
  20.     super(viewport)
  21.     self.bitmap = Cache.system("BattleArrow")
  22.     @type = type
  23.     case @type
  24.     when :enemy
  25.       self.ox = 0
  26.       src_rect.set(32, 0-35, 32, 32+50)
  27.       @members = $game_troop.members
  28.       @add_x = 30-10
  29.     when :actor
  30.       self.ox = 32
  31.       src_rect.set(0, 0-35, 32, 32+50)
  32.       @members = $game_party.battle_members
  33.       @add_x = -30
  34.     else
  35.       self.ox = 16
  36.       src_rect.set(0, 0, 32, 32)
  37.       @members = []
  38.       @add_x = 0
  39.     end
  40.     self.oy = 32
  41.     self.z = 2500
  42.     self.visible = false
  43.     @index = 0
  44.     @old_index = @index
  45.     @select_all = false
  46.     @can_select_all = can_select_all
  47.     update
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 设置
  51.   #--------------------------------------------------------------------------
  52.   def setup(can_select_all)
  53.     @can_select_all = can_select_all
  54.     @select_all = false
  55.     @index = @old_index
  56.     case @type
  57.     when :actor
  58.       @members = $game_party.battle_members
  59.     when :enemy
  60.       @members = $game_troop.members
  61.     else
  62.       @members = []
  63.     end
  64.     self.visible = true
  65.     update
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 获取光标指向的战斗者
  69.   #--------------------------------------------------------------------------
  70.   def battler
  71.     return members[index]
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 设置光标位置
  75.   #--------------------------------------------------------------------------
  76.   def index=(index)
  77.     @index = index
  78.     update
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 刷新画面
  82.   #--------------------------------------------------------------------------
  83.   def update
  84.     super
  85.     return unless visible
  86.     if Input.trigger?(13)
  87.       Sound.play_ok
  88.       on_ok_method.call if on_ok_method
  89.       return
  90.     end
  91.     if Input.trigger?(12)
  92.       Sound.play_cancel
  93.       on_cancel_method.call if on_cancel_method
  94.       return
  95.     end
  96.     if Input.trigger?(4) or Input.trigger?(6)
  97.       if @select_all
  98.         @select_all = false
  99.         @index = @old_index
  100.       else
  101.         if @can_select_all
  102.           @select_all = true
  103.           @old_index = @index
  104.         end
  105.       end
  106.     end
  107.     case @type
  108.     when :actor
  109.       update_actor
  110.     when :enemy
  111.       update_enemy
  112.     end
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 刷新选择角色
  116.   #--------------------------------------------------------------------------
  117.   def update_actor
  118.     if @select_all
  119.       @index += 1
  120.       @index %= members.size
  121.     else
  122.       old_index = @index
  123.       for i in 0..members.size
  124.         @index = i
  125.         if @index == members.size
  126.           @index = old_index
  127.           break
  128.         end
  129.         next unless battler
  130.         self_x = battler.fscreen_x + add_x
  131.         self_y = battler.fscreen_y
  132.       end
  133.       if Input.repeat?(2)
  134.         Sound.play_cursor
  135.         @index += 1
  136.         @index %= members.size
  137.       end
  138.       if Input.repeat?(8)
  139.         Sound.play_cursor
  140.         @index += members.size - 1
  141.         @index %= members.size
  142.       end
  143.     end
  144.     if battler
  145.       self.x = battler.fscreen_x + add_x
  146.       self.y = battler.fscreen_y
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 刷新选择敌人
  151.   #--------------------------------------------------------------------------
  152.   def update_enemy
  153.     if @select_all
  154.       members.size.times do
  155.         @index += 1
  156.         @index %= members.size
  157.         break if not battler.hidden?
  158.       end
  159.     else
  160.       members.size.times do
  161.         break if not battler.hidden?
  162.         @index += 1
  163.         @index %= members.size
  164.       end
  165.       old_index = @index
  166.       for i in 0..members.size
  167.         @index = i
  168.         if @index == members.size
  169.           @index = old_index
  170.           break
  171.         end
  172.         next if battler.hidden?
  173.         self_x = battler.screen_x + add_x
  174.         self_y = battler.screen_y
  175.       end
  176.       if Input.repeat?(2)
  177.         Sound.play_cursor
  178.         members.size.times do
  179.           @index += 1
  180.           @index %= members.size
  181.           break if not battler.hidden?
  182.         end
  183.       end
  184.       if Input.repeat?(8)
  185.         Sound.play_cursor
  186.         members.size.times do
  187.           @index += members.size - 1
  188.           @index %= members.size
  189.           break if not battler.hidden?
  190.         end
  191.       end
  192.     end
  193.     if battler != nil
  194.       self.x = battler.screen_x + add_x
  195.       self.y = battler.screen_y
  196.     end
  197.   end
  198. end
  199. #==============================================================================
  200. # ■ Scene_Battle
  201. #==============================================================================
  202.  
  203. class Scene_Battle < Scene_Base
  204.   #--------------------------------------------------------------------------
  205.   # ● 结束处理
  206.   #--------------------------------------------------------------------------
  207.   alias hzhj_terminate_battle_arrow terminate
  208.   def terminate
  209.     @actor_arrow.dispose
  210.     @enemy_arrow.dispose
  211.     hzhj_terminate_battle_arrow
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 刷新所有窗口
  215.   #--------------------------------------------------------------------------
  216.   alias hzhj_update_all_windows_battle_arrow update_all_windows
  217.   def update_all_windows
  218.     hzhj_update_all_windows_battle_arrow
  219.     @actor_arrow.update
  220.     @enemy_arrow.update
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 生成角色窗口
  224.   #--------------------------------------------------------------------------
  225.   def create_actor_window
  226.     viewport = @viewport #@spriteset.viewport1
  227.     @actor_arrow = Sprite_BattleArrow.new(:actor, viewport, false)
  228.     @actor_arrow.on_ok_method = method(:on_actor_ok)
  229.     @actor_arrow.on_cancel_method = method(:on_actor_cancel)
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 生成敌人窗口
  233.   #--------------------------------------------------------------------------
  234.   def create_enemy_window
  235.     viewport = @viewport #@spriteset.viewport1
  236.     @enemy_arrow = Sprite_BattleArrow.new(:enemy, viewport, false)
  237.     @enemy_arrow.on_ok_method = method(:on_enemy_ok)
  238.     @enemy_arrow.on_cancel_method = method(:on_enemy_cancel)
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 开始选择队友
  242.   #--------------------------------------------------------------------------
  243.   def select_actor_selection(can_select_all = false)
  244.     @actor_arrow.setup(can_select_all)
  245.     @skill_window.hide
  246.     @item_window.hide
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 角色“确定”
  250.   #--------------------------------------------------------------------------
  251.   def on_actor_ok
  252.     target_index = @actor_arrow.select_all ? 65535 : @actor_arrow.index
  253.     BattleManager.actor.input.target_index = target_index
  254.     @skill_window.hide
  255.     @item_window.hide
  256.     @actor_arrow.visible = false
  257.     next_command
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 角色“取消”
  261.   #--------------------------------------------------------------------------
  262.   def on_actor_cancel
  263.     case @actor_command_window.current_symbol
  264.     when :skill
  265.       @skill_window.show.activate
  266.     when :item
  267.       @item_window.show.activate
  268.     end
  269.     @actor_arrow.visible = false
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 开始选择敌人
  273.   #--------------------------------------------------------------------------
  274.   def select_enemy_selection(can_select_all = false)
  275.     @enemy_arrow.setup(can_select_all)
  276. #    @actor_command_window.hide
  277.     @skill_window.hide
  278.     @item_window.hide
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 敌人“确定”
  282.   #--------------------------------------------------------------------------
  283.   def on_enemy_ok
  284.     target_index = @enemy_arrow.select_all ? 65535 : @enemy_arrow.index
  285.     BattleManager.actor.input.target_index = target_index
  286.     @skill_window.hide
  287.     @item_window.hide
  288.     @enemy_arrow.visible = false
  289.     next_command
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ● 敌人“取消”
  293.   #--------------------------------------------------------------------------
  294.   def on_enemy_cancel
  295.     case @actor_command_window.current_symbol
  296.     when :attack
  297.       @actor_command_window.show.activate
  298.     when :skill
  299.       @skill_window.show.activate
  300.     when :status
  301.       @actor_command_window.show.activate
  302.     when :item
  303.       @item_window.show.activate
  304.     end
  305.     @enemy_arrow.visible = false
  306.   end
  307. end

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
帖子
13
2
 楼主| 发表于 2017-4-17 15:55:47 | 只看该作者
还尝试了站里的MOG那个指针脚本,然而那个脚本用起来很奇怪,放技能用物品选目标的时候窗口不会关闭,光标都被窗口挡在后面了。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2017-4-17 18:40:24 | 只看该作者
把130,131行的fscreen中的f去掉。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
帖子
13
4
 楼主| 发表于 2017-4-17 19:56:40 | 只看该作者
guoxiaomi 发表于 2017-4-17 18:40
把130,131行的fscreen中的f去掉。

还是一样,提示130行blablabla。。。。
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

5
发表于 2017-4-17 20:35:52 | 只看该作者
虽然不知道原本的效果是如何,总之,只能强行定义一下fscreen_x和fscreen_y了
把这个作为插件脚本放在原脚本的下方
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   attr_accessor :fscreen_x
  3.   attr_accessor :fscreen_y
  4.   def initialize(actor_id)
  5.     super()
  6.     setup(actor_id)
  7.     @last_skill = Game_BaseItem.new
  8.     @fscreen_x = 0
  9.     @fscreen_y = 0
  10.   end
  11. end
  12. class Game_Party < Game_Unit
  13.   def setup_battle_test_members
  14.     $data_system.test_battlers.each do |battler|
  15.       actor = $game_actors[battler.actor_id]
  16.       actor.change_level(battler.level, false)
  17.       actor.init_equips(battler.equips)
  18.       actor.recover_all
  19.       actor.fscreen_x = 100
  20.       actor.fscreen_y = 276+battler.actor_id*24
  21.       p battler.actor_id
  22.       add_actor(actor.id)
  23.     end
  24.   end
  25. end
笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

6
发表于 2017-4-18 01:25:49 | 只看该作者
小汰酱 发表于 2017-4-17 19:56
还是一样,提示130行blablabla。。。。

别偷懒啊,提示什么发上来啊。

以及后面的都是 screen_x,就这里是 fscreen_x,很可能是笔误
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
帖子
13
7
 楼主| 发表于 2017-4-18 13:23:31 | 只看该作者
魔法丶小肉包 发表于 2017-4-17 20:35
虽然不知道原本的效果是如何,总之,只能强行定义一下fscreen_x和fscreen_y了
把这个作为插件脚本放在原脚 ...

{:2_253:}不会报错了,感谢,那么另外一个问题:已经死了的敌人还是能被指针选到,有没有办法解决呢?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

8
发表于 2017-4-18 16:09:33 | 只看该作者
小汰酱 发表于 2017-4-18 13:23
不会报错了,感谢,那么另外一个问题:已经死了的敌人还是能被指针选到,有没有办法解决呢? ...

同样,作为插件脚本在此脚本下方使用
RUBY 代码复制
  1. class Sprite_BattleArrow < Sprite
  2.   def update_enemy
  3.     if @select_all
  4.       members.size.times do
  5.         @index += 1
  6.         @index %= members.size
  7.         break if not battler.hidden? || battler.dead?
  8.       end
  9.     else
  10.       members.size.times do
  11.         break if not battler.hidden? || battler.dead?
  12.         @index += 1
  13.         @index %= members.size
  14.       end
  15.       old_index = @index
  16.       for i in 0..members.size
  17.         @index = i
  18.         if @index == members.size
  19.           @index = old_index
  20.           break
  21.         end
  22.         next if battler.hidden? || battler.dead?
  23.         self_x = battler.screen_x + add_x
  24.         self_y = battler.screen_y
  25.       end
  26.       if Input.repeat?(2)
  27.         Sound.play_cursor
  28.         members.size.times do
  29.           @index += 1
  30.           @index %= members.size
  31.           break if not battler.hidden? || battler.dead?
  32.         end
  33.       end
  34.       if Input.repeat?(8)
  35.         Sound.play_cursor
  36.         members.size.times do
  37.           @index += members.size - 1
  38.           @index %= members.size
  39.           break if not battler.hidden? || battler.dead?
  40.         end
  41.       end
  42.     end
  43.     if battler != nil
  44.       self.x = battler.screen_x + add_x
  45.       self.y = battler.screen_y
  46.     end
  47.   end
  48. end

评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 认可答案

查看全部评分

笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
帖子
13
9
 楼主| 发表于 2017-4-18 16:35:19 | 只看该作者
魔法丶小肉包 发表于 2017-4-18 16:09
同样,作为插件脚本在此脚本下方使用
class Sprite_BattleArrow < Sprite
  def update_enemy

可以了!万分感谢!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 11:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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