Project1

标题: XP效果,箭头式指向光标 [打印本页]

作者: 趙雲    时间: 2008-2-13 00:32
标题: XP效果,箭头式指向光标

  1. #本脚本来自66RPG,作者趙雲,如需转载请保留本信息。
  2. #==============================================================================
  3. # ■ Arrow_Base
  4. #------------------------------------------------------------------------------
  5. #  在战斗画面使用的箭头光标的活动块。本类作为
  6. # Arrow_Enemy 类与 Arrow_Actor 类的超级类使用。
  7. #==============================================================================

  8. class Arrow_Base < Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :index                    # 光标位置
  13.   attr_reader   :help_window              # 帮助窗口
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化对像
  16.   #     viewport : 显示端口
  17.   #--------------------------------------------------------------------------
  18.   def initialize(viewport)
  19.     super(viewport)
  20.     self.bitmap = Cache.system("Arrow")
  21.     self.ox = 16
  22.     self.oy = 64
  23.     self.z = 2500
  24.     @blink_count = 0
  25.     @index = 0
  26.     @help_window = nil
  27.     update
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 设置光标位置
  31.   #     index : 新的光标位置
  32.   #--------------------------------------------------------------------------
  33.   def index=(index)
  34.     @index = index
  35.     update
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 设置帮助窗口
  39.   #     help_window : 新的帮助窗口
  40.   #--------------------------------------------------------------------------
  41.   def help_window=(help_window)
  42.     @help_window = help_window
  43.     # 刷新帮助文本 (update_help 定义了继承目标)
  44.     if @help_window != nil
  45.       update_help
  46.     end
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 刷新画面
  50.   #--------------------------------------------------------------------------
  51.   def update
  52.     # 刷新点灭记数
  53.     @blink_count = (@blink_count + 1) % 12
  54.     # 设置传送源矩形
  55.     if @blink_count < 6
  56.       self.src_rect.set(0, 0, 32, 32)
  57.     else
  58.       self.src_rect.set(32, 0, 32, 32)
  59.     end
  60.     # 刷新帮助文本 (update_help 定义了继承目标)
  61.     if @help_window != nil
  62.       update_help
  63.     end
  64.   end
  65. end
  66. #==============================================================================
  67. # ■ Arrow_Enemy
  68. #------------------------------------------------------------------------------
  69. #  选择敌人的箭头光标。本类继承 Arrow_Base
  70. # 类。
  71. #==============================================================================

  72. class Arrow_Enemy < Arrow_Base
  73.   #--------------------------------------------------------------------------
  74.   # ● 获取光标指向的敌人
  75.   #--------------------------------------------------------------------------
  76.   def enemy
  77.     return $game_troop.members[@index]
  78.   end
  79.   
  80.   def dispose
  81.     @enemy.loop_white_flash = false unless @enemy.nil?
  82.     super
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 刷新画面
  86.   #--------------------------------------------------------------------------
  87.   def update
  88.     super
  89.      if @enemy != enemy and enemy.exist?
  90.         @enemy.loop_white_flash = false unless @enemy.nil?
  91.         enemy.loop_white_flash = true
  92.         @enemy = enemy
  93.       end  
  94.    
  95.     # 如果指向不存在的敌人就离开
  96.     $game_troop.members.size.times do
  97.       break if self.enemy.exist?
  98.       @index += 1
  99.       @index %= $game_troop.members.size
  100.     end
  101.     # 光标右
  102.     if Input.repeat?(Input::RIGHT) or Input.repeat?(Input::DOWN)
  103.       Sound.play_cursor
  104.       $game_troop.members.size.times do
  105.         @index += 1
  106.         @index %= $game_troop.members.size
  107.         break if self.enemy.exist?
  108.       end
  109.     end
  110.     # 光标左
  111.     if Input.repeat?(Input::LEFT) or Input.repeat?(Input::UP)
  112.      Sound.play_cursor
  113.       $game_troop.members.size.times do
  114.         @index += $game_troop.members.size - 1
  115.         @index %= $game_troop.members.size
  116.         break if self.enemy.exist?
  117.       end
  118.     end
  119.     # 设置活动块坐标
  120.     if self.enemy != nil
  121.       self.x = self.enemy.screen_x
  122.       self.y = self.enemy.screen_y
  123.     end
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 刷新帮助文本
  127.   #--------------------------------------------------------------------------
  128.   def update_help
  129.     # 帮助窗口显示敌人的名字与状态
  130.     @help_window.set_enemy(self.enemy)
  131.   end
  132. end





  133. class Scene_Battle ##
  134.   
  135.   
  136.   #--------------------------------------------------------------------------
  137.   # ● 更新画面
  138.   #--------------------------------------------------------------------------
  139.   def update
  140.     super
  141.     update_basic(true)
  142.     update_info_viewport                  # 更新显示信息的视区
  143.     if $game_message.visible
  144.       @info_viewport.visible = false
  145.       @message_window.visible = true
  146.     end
  147.     unless $game_message.visible          # 在显示消息以外的情况
  148.       return if judge_win_loss            # 判断胜败
  149.       update_scene_change
  150.       if @enemy_arrow != nil
  151.         update_target_enemy_selection     # 选择敌方对象
  152.       elsif @target_actor_window != nil
  153.         update_target_actor_selection     # 选择对象角色
  154.       elsif @skill_window != nil
  155.         update_skill_selection            # 选择特技
  156.       elsif @item_window != nil
  157.         update_item_selection             # 选择物品
  158.       elsif @party_command_window.active
  159.         update_party_command_selection    # 选择同伴指令
  160.       elsif @actor_command_window.active
  161.         update_actor_command_selection    # 选择角色指令
  162.       else
  163.         process_battle_event              # 战斗处理
  164.         process_action                    # 战斗行动
  165.         process_battle_event              # 处理战斗事件
  166.       end
  167.     end
  168.   end
  169.   

  170.   
  171.   def set_window(visible)
  172.     if !@skill_window.nil?
  173.       @skill_window.visible = visible
  174.     elsif !@item_window.nil?
  175.       @item_window.visible = visible
  176.     end
  177.   end

  178.   #--------------------------------------------------------------------------
  179.   # ● 开始选择对象的敌方角色
  180.   #--------------------------------------------------------------------------
  181.   def start_target_enemy_selection
  182.     set_window(false)
  183.     @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport3)
  184.     @enemy_window = Window_Enemy.new(176,0)
  185.     @enemy_arrow.help_window = @enemy_window
  186.     @actor_command_window.active = false
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 选择对象敌方角色结束
  190.   #--------------------------------------------------------------------------
  191.   def end_target_enemy_selection
  192.     @enemy_arrow.dispose
  193.     @enemy_arrow = nil
  194.     @enemy_window.dispose
  195.     set_window(true)
  196.     if @actor_command_window.index == 0
  197.       @actor_command_window.active = true
  198.     end
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 更新选择对象敌方角色
  202.   #--------------------------------------------------------------------------
  203.   def update_target_enemy_selection
  204.      @enemy_arrow.update
  205.     if Input.trigger?(Input::B)
  206.       Sound.play_cancel
  207.       end_target_enemy_selection
  208.     elsif Input.trigger?(Input::C)
  209.       Sound.play_decision
  210.       @active_battler.action.target_index = @enemy_arrow.enemy.index
  211.       end_target_enemy_selection
  212.       end_skill_selection
  213.       end_item_selection
  214.       next_actor
  215.     end
  216.   end


  217. end


  218. class Spriteset_Battle ##
  219.   def viewport3
  220.     return @viewport3
  221.   end  
  222. end

  223. class Game_Battler
  224.   attr_accessor :loop_white_flash              # 循环白色闪烁标记
  225. end

  226. class Sprite_Battler ##
  227.   alias old_setup_new_effect setup_new_effect
  228.   def setup_new_effect
  229.     if @battler.loop_white_flash and @effect_duration == 0
  230.       @battler.white_flash = true
  231.     end
  232.     old_setup_new_effect
  233.   end
  234. end


  235. #==============================================================================
  236. # ■ Window_Enemy
  237. #------------------------------------------------------------------------------
  238. #  显示敌人信息的窗口,光标Arrow用。
  239. #==============================================================================

  240. class Window_Enemy < Window_Base
  241.   #--------------------------------------------------------------------------
  242.   # ● 初始化窗口
  243.   #     x : 窗口的X坐标
  244.   #     y : 窗口的Y坐标
  245.   #--------------------------------------------------------------------------
  246.   def initialize(x, y)
  247.     super(x, y, 288, WLH * 2 + 32)
  248. #~     self.opacity = 0
  249.   end

  250.   #--------------------------------------------------------------------------
  251.   # ● 设置文本
  252.   #     text  : 窗口显示的字符串
  253.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  254.   #--------------------------------------------------------------------------
  255.   def set_text(text, align = 0)
  256.     # 如果文本和对齐方式的至少一方与上次的不同
  257.     if text != @text or align != @align
  258.       # 再描绘文本
  259.       self.contents.clear
  260.       self.contents.font.color = normal_color
  261.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  262.       @text = text
  263.       @align = align
  264.       @actor = nil
  265.     end
  266.     self.visible = true
  267.   end
  268.   
  269.   
  270.   #--------------------------------------------------------------------------
  271.   # ● 设置敌人
  272.   #     enemy : 要显示名字和状态的敌人
  273.   #--------------------------------------------------------------------------
  274.   def set_enemy(enemy)
  275.     if @enemy != enemy
  276.     text = enemy.name
  277.     set_text(text)
  278.     w = enemy.states.size * 24
  279.     draw_actor_state(enemy, contents.width - w , 0, w)
  280.     draw_actor_hp(enemy, 0 , WLH  )
  281.     draw_actor_mp(enemy, contents.width - 120 , WLH )
  282.     @enemy = enemy
  283.     end
  284.   end
  285. end
复制代码

使用方法 :
将脚本插入 main前面后


放在 Graphics\System 文件夹下。

效果

作者: 诡异の猫    时间: 2008-2-13 00:48
好神奇.
赵云兄的东西要顶..
只是..
我觉得把那把刀改成 ↙ 好点..
素材改下吧?
作者: superufo    时间: 2008-2-13 00:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: Beside    时间: 2008-2-13 00:50
好好玩的东西 支持
作者: 趙雲    时间: 2008-2-13 00:51
以下引用诡异の猫于2008-2-12 16:48:26的发言:

好神奇.
赵云兄的东西要顶..
只是..
我觉得把那把刀改成 ↙ 好点..
素材改下吧?

随便了,用PS把素材换个方向就行了。

这个脚本关联的东西挺多的~
作者: 叮当    时间: 2008-2-13 01:30
=V= 受受,帮我整合一下那个工程里的脚本啦… 飘
作者: 趙雲    时间: 2008-2-13 01:38
以下引用叮当于2008-2-12 17:30:06的发言:

=V= 受受,帮我整合一下那个工程里的脚本啦… 飘

整合啥? 貌似没有冲突嘛。
别叫偶受!
飘~
作者: 叮当    时间: 2008-2-13 01:41
别扭×啊~ =v= 那啥彩虹神剑会有冲突|| 使用方动画……|| =3= 原来想说算了,不过你有时间写东西的话… 嗯…
作者: 光郎    时间: 2008-2-13 01:42
恩^整合好我也要一份~
作者: 趙雲    时间: 2008-2-13 01:46
以下引用叮当于2008-2-12 17:41:29的发言:

别扭×啊~ =v= 那啥彩虹神剑会有冲突|| 使用方动画……|| =3= 原来想说算了,不过你有时间写东西的话… 嗯…


没时间接大修改,明天就上课去了。{/hx}
你给的工程有彩虹神剑么?
不会是说我游戏里的吧{/fd} ,那个单独拿出来几乎不可能……

作者: 叮当    时间: 2008-2-13 01:51
囧 那… 那就算了…
作者: 小鼠标    时间: 2008-2-13 01:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-2-13 03:28
多些云 了....原来那个简直就是死板
作者: 趙雲    时间: 2008-2-13 04:07
以下引用暴动冲锋于2008-2-12 19:34:14的发言:

1楼的脚本就相当不错了……没啥改头……


没看懂你的意思……{/fd}
作者: 御灵    时间: 2008-2-22 19:21
发布完毕。
http://rpg.blue/web/htm/news979.htm
vip+2
作者: 龙轩    时间: 2008-8-28 16:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 龙轩    时间: 2008-8-28 16:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: 龙轩    时间: 2008-8-31 20:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: 黑之翅膀    时间: 2009-10-31 20:24
图片名字改为:Arrow.png
作者: 旎若渝    时间: 2009-11-13 10:53
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1