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

Project1

 找回密码
 注册会员
搜索

(1000经验)★如何将SailCat的透视脚本放到自己画的窗口里?

查看数: 2040 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2009-11-20 14:52

正文摘要:

本帖最后由 夏季冰川 于 2009-11-20 15:14 编辑 就是SailCat的探查技能: 我认为它的效果不错: 但我不想用那个显示文章的对话框,为了方便调整坐标,请问如何把这些内容转到自己 画的窗口里呢? 以下是脚本部分:# ...

回复

后知后觉 发表于 2009-11-21 14:19:42
抛开SailCat的脚本不说
核心就是个给你一个敌人.
你要通过这个敌人获取到他的资料
然后把这个敌人的资料描绘到窗口上去

我以前开始自己试着写脚本的启蒙教程修复了
不知道你有没看过.没看过的话就先看看吧.和制作窗口有关的
http://rpg.blue/htm/Topic_25371.htm
夏季冰川 发表于 2009-11-21 14:06:06
谢谢前辈.
我先研究一下.呃,好复杂.
后知后觉 发表于 2009-11-21 13:46:33
你先看看他这个脚本
先是获取数据库里所有属性的名字
    element_name = $data_system.elements
然后让你设置了个自然属性的数值
     # 自然元素属性数目
     element_nature = 8
真正获取被看的人的属性是这个
     for i in element_nature + 1..element_name.size - 1

       if self.element_rate(i) >= 150

然而我们是把 self(被看的人)整个传递给了一个全局变量.
比如这个全局变量叫 $chakan
那么我们在窗口类里获取他的这个属性的时候就不能再用self了
要这样
$chakan.element_rate(i)

那么把他脚本里属性那一段白到窗口里去的话应该就是这样
  1.      # 敌人属性存放数组
  2.      element_name = $data_system.elements
  3.      # 自然元素属性数目
  4.      element_nature = 8
  5.      # 敌人类型判断,以遇到的第一个有效类型为准,没有的话为空
  6.      for i in element_nature + 1..element_name.size - 1
  7.        if $chakan.element_rate(i) >= 150
  8.          self.contents.draw_text(0, 64, 640, 32,
  9.          "Special: " + element_name[i] + " creature type")
  10.          break
  11.        end
  12.      end
  13.      # 敌人属性抵抗判断
  14.      self.contents.draw_text(0,96,640,32,"Elemental Resistances:")
  15.      textx = 0
  16.      for i in 1..element_nature
  17.        case $chakan.element_rate(i)
  18.        # 等于100的情况,正常,设为白色
  19.        when 100
  20.          self.contents.font.color = normal_color
  21.        # 大于101小于200的情况,弱点属性,设为红色
  22.        when 101..200
  23.          self.contents.font.color = Color.new(210,210,210,255)
  24.        # 大于1小于99的情况,抵抗属性,设为黄色
  25.        when 1..99
  26.          self.contents.font.color = Color.new(210,210,210,255)
  27.        # 等于0的情况,无效属性,设为灰色
  28.        when 0
  29.          self.contents.font.color = Color.new(210,210,210,255)
  30.        # 负值的情况,吸收属性,设为绿色
  31.        when -100..-1
  32.          self.contents.font.color = Color.new(210,210,210,255)
  33.        end
  34.        self.contents.draw_text(textx,128,48,32,element_name[i])
  35.        textx += 48
  36.      end
复制代码
把这段插入到我上面帖的脚本里就是

  1. class Game_Battler
  2.   alias sailcat_skill_effect skill_effect
  3.   def skill_effect(user, skill)
  4.     result = sailcat_skill_effect(user,skill)
  5.     # 探查效果
  6.     if skill.name == "chakan"
  7.       # 设置伤害字符串为空
  8.       self.damage = ""
  9.       # 设置被查看的人
  10.       $chakan = self
  11.     end
  12.     return result
  13.   end
  14. end

  15. class Window_Kan < Window_Base
  16.   def initialize
  17.     super(0, 0, 640, 480)
  18.     self.contents = Bitmap.new(width - 32, height - 32)
  19.     self.visible = false
  20.     self.z = 6000
  21.   end
  22.   
  23.   def update
  24.     super
  25.     refresh if $chakan
  26.     if self.visible and Input.trigger?(13)
  27.       self.visible = false
  28.     end
  29.   end
  30.   
  31.   def refresh
  32.     self.contents.clear
  33.     self.contents.font.color = normal_color
  34.     self.contents.draw_text(4, 0, 632, 32, $chakan.name)
  35.     self.contents.font.color = Color.new(50, 255, 120, 255)
  36.     self.contents.draw_text(4, 32, 128, 32, $data_system.words.hp)
  37.     #  …………
  38.     element_name = $data_system.elements
  39.    
  40.      # 敌人属性存放数组
  41.      element_name = $data_system.elements
  42.      # 自然元素属性数目
  43.      element_nature = 8
  44.      # 敌人类型判断,以遇到的第一个有效类型为准,没有的话为空
  45.      for i in element_nature + 1..element_name.size - 1
  46.        if $chakan.element_rate(i) >= 150
  47.          self.contents.draw_text(0, 64, 640, 32,
  48.          "Special: " + element_name[i] + " creature type")
  49.          break
  50.        end
  51.      end
  52.      # 敌人属性抵抗判断
  53.      self.contents.draw_text(0,96,640,32,"Elemental Resistances:")
  54.      textx = 0
  55.      for i in 1..element_nature
  56.        case $chakan.element_rate(i)
  57.        # 等于100的情况,正常,设为白色
  58.        when 100
  59.          self.contents.font.color = normal_color
  60.        # 大于101小于200的情况,弱点属性,设为红色
  61.        when 101..200
  62.          self.contents.font.color = Color.new(210,210,210,255)
  63.        # 大于1小于99的情况,抵抗属性,设为黄色
  64.        when 1..99
  65.          self.contents.font.color = Color.new(210,210,210,255)
  66.        # 等于0的情况,无效属性,设为灰色
  67.        when 0
  68.          self.contents.font.color = Color.new(210,210,210,255)
  69.        # 负值的情况,吸收属性,设为绿色
  70.        when -100..-1
  71.          self.contents.font.color = Color.new(210,210,210,255)
  72.        end
  73.        self.contents.draw_text(textx,128,48,32,element_name[i])
  74.        textx += 48
  75.      end
  76.    
  77.     self.visible = true
  78.     $chakan = nil
  79.   end
  80. end

  81. class Scene_Battle
  82.   
  83.   alias oldmain main
  84.   def main
  85. #★★★★★★★★★★★★★★★★★★★★★★★★★
  86.     @kan_window = Window_Kan.new
  87. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  88.     oldmain
  89. #★★★★★★★★★★★★★★★★★★★★★★★★★
  90.     @kan_window.dispose
  91. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  92.   end
  93.    
  94.   def update
  95.     # 执行战斗事件中的情况下
  96.     if $game_system.battle_interpreter.running?
  97.       # 刷新解释器
  98.       $game_system.battle_interpreter.update
  99.       # 强制行动的战斗者不存在的情况下
  100.       if $game_temp.forcing_battler == nil
  101.         # 执行战斗事件结束的情况下
  102.         unless $game_system.battle_interpreter.running?
  103.           # 继续战斗的情况下、再执行战斗事件的设置
  104.           unless judge
  105.             setup_battle_event
  106.           end
  107.         end
  108.         # 如果不是结束战斗回合的情况下
  109.         if @phase != 5
  110.           # 刷新状态窗口
  111.           @status_window.refresh
  112.         end
  113.       end
  114.     end
  115.     # 系统 (计时器)、刷新画面
  116.     $game_system.update
  117.     $game_screen.update
  118.     # 计时器为 0 的情况下
  119.     if $game_system.timer_working and $game_system.timer == 0
  120.       # 中断战斗
  121.       $game_temp.battle_abort = true
  122.     end
  123.     # 刷新窗口
  124.     @help_window.update
  125.     @party_command_window.update
  126.     @actor_command_window.update
  127.     @status_window.update
  128.     @message_window.update
  129. #★★★★★★★★★★★★★★★★★★★★★★★★★
  130.     @kan_window.update
  131. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  132.     # 刷新活动块
  133.     @spriteset.update
  134.     # 处理过渡中的情况下
  135.     if $game_temp.transition_processing
  136.       # 清除处理过渡中标志
  137.       $game_temp.transition_processing = false
  138.       # 执行过渡
  139.       if $game_temp.transition_name == ""
  140.         Graphics.transition(20)
  141.       else
  142.         Graphics.transition(40, "Graphics/Transitions/" +
  143.           $game_temp.transition_name)
  144.       end
  145.     end
  146.     # 显示信息窗口中的情况下
  147.     if $game_temp.message_window_showing
  148.       return
  149.     end
  150. #★★★★★★★★★★★★★★★★★★★★★★★★★
  151.     if @kan_window.visible
  152.       return
  153.     end
  154. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  155.     # 显示效果中的情况下
  156.     if @spriteset.effect?
  157.       return
  158.     end
  159.     # 游戏结束的情况下
  160.     if $game_temp.gameover
  161.       # 切换到游戏结束画面
  162.       $scene = Scene_Gameover.new
  163.       return
  164.     end
  165.     # 返回标题画面的情况下
  166.     if $game_temp.to_title
  167.       # 切换到标题画面
  168.       $scene = Scene_Title.new
  169.       return
  170.     end
  171.     # 中断战斗的情况下
  172.     if $game_temp.battle_abort
  173.       # 还原为战斗前的 BGM
  174.       $game_system.bgm_play($game_temp.map_bgm)
  175.       # 战斗结束
  176.       battle_end(1)
  177.       return
  178.     end
  179.     # 等待中的情况下
  180.     if @wait_count > 0
  181.       # 减少等待计数
  182.       @wait_count -= 1
  183.       return
  184.     end
  185.     # 强制行动的角色存在、
  186.     # 并且战斗事件正在执行的情况下
  187.     if $game_temp.forcing_battler == nil and
  188.        $game_system.battle_interpreter.running?
  189.       return
  190.     end
  191.     # 回合分支
  192.     case @phase
  193.     when 1  # 自由战斗回合
  194.       update_phase1
  195.     when 2  # 同伴命令回合
  196.       update_phase2
  197.     when 3  # 角色命令回合
  198.       update_phase3
  199.     when 4  # 主回合
  200.       update_phase4
  201.     when 5  # 战斗结束回合
  202.       update_phase5
  203.     end
  204.   end
  205. end
复制代码
HP和SP你自己补上吧 还有颜色
夏季冰川 发表于 2009-11-21 11:28:45
只是为了调整坐标的话,用
@message_window.x = XXX
@message_window.y = YYY 可行么?
Tabris_Air 发表于 2009-11-21 10:09

不,我是想把里边的内容放到不同的位置,不是直接调整窗口的坐标.
Tabris_Air 发表于 2009-11-21 10:09:30
只是为了调整坐标的话,用
@message_window.x = XXX
@message_window.y = YYY 可行么?
夏季冰川 发表于 2009-11-21 02:47:02
先谢谢前辈一下,花时间为我写这个脚本.
最后问问:为什么element显示没有了?其实核心就是要显示element啊.
后知后觉 发表于 2009-11-20 17:34:07
:lol
后知后觉咋变男的了?以前不是MM的头像么?都认不得了。
奶油Da蛋糕 发表于 2009-11-20 17:28

我看论坛里的MM头太多了:lol
感觉有点阴盛阳衰就换了:lol
奶油Da蛋糕 发表于 2009-11-20 17:28:22
后知后觉咋变男的了?以前不是MM的头像么?都认不得了。
后知后觉 发表于 2009-11-20 16:57:55
本帖最后由 后知后觉 于 2009-11-20 17:39 编辑

大概就是这样
你说的element我没有写到窗口里去
【对象】就是中间的桥梁
SailCat的脚本里的self就是战斗者(被看的人)
你只需要把战斗者传递给窗口
通过战斗者你就能调用属于他的方法获取信息
我这里用的传递的东西是一个新的全局变量 $chakan
刷新新的窗口.判断这个全局变量当这个全局变量不是nil的时候
就调用refresh方法描绘窗口.描绘的内容就对$chakan调用方法获取
描绘完了后把窗口的visible为TRUE可见.再把$chakan弄成nil
然后再加点东西把窗口还原回复正常游戏运行
其实这都是默认系统的@message_window的做法
我只是依葫芦画瓢罢了
PS:那个技能的名字被我改了
技能效果方法里多了个result
这个是原来方法的返回值true/false
SailCat给弄掉了...
  1. class Game_Battler
  2.   alias sailcat_skill_effect skill_effect
  3.   def skill_effect(user, skill)
  4.     result = sailcat_skill_effect(user,skill)
  5.     # 探查效果
  6.     if skill.name == "chakan"
  7.       # 设置伤害字符串为空
  8.       self.damage = ""
  9.       # 设置被查看的人
  10.       $chakan = self
  11.     end
  12.     return result
  13.   end
  14. end

  15. class Window_Kan < Window_Base
  16.   def initialize
  17.     super(0, 0, 640, 480)
  18.     self.contents = Bitmap.new(width - 32, height - 32)
  19.     self.visible = false
  20.     self.z = 6000
  21.   end
  22.   
  23.   def update
  24.     super
  25.     refresh if $chakan
  26.     if self.visible and Input.trigger?(13)
  27.       self.visible = false
  28.     end
  29.   end
  30.   
  31.   def refresh
  32.     self.contents.clear
  33.     self.contents.font.color = normal_color
  34.     self.contents.draw_text(4, 0, 632, 32, $chakan.name)
  35.     self.contents.font.color = Color.new(50, 255, 120, 255)
  36.     self.contents.draw_text(4, 32, 128, 32, $data_system.words.hp)
  37.     #  …………
  38.    
  39.     self.visible = true
  40.     $chakan = nil
  41.   end
  42. end

  43. class Scene_Battle
  44.   
  45.   alias oldmain main
  46.   def main
  47. #★★★★★★★★★★★★★★★★★★★★★★★★★
  48.     @kan_window = Window_Kan.new
  49. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  50.     oldmain
  51. #★★★★★★★★★★★★★★★★★★★★★★★★★
  52.     @kan_window.dispose
  53. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  54.   end
  55.    
  56.   def update
  57.     # 执行战斗事件中的情况下
  58.     if $game_system.battle_interpreter.running?
  59.       # 刷新解释器
  60.       $game_system.battle_interpreter.update
  61.       # 强制行动的战斗者不存在的情况下
  62.       if $game_temp.forcing_battler == nil
  63.         # 执行战斗事件结束的情况下
  64.         unless $game_system.battle_interpreter.running?
  65.           # 继续战斗的情况下、再执行战斗事件的设置
  66.           unless judge
  67.             setup_battle_event
  68.           end
  69.         end
  70.         # 如果不是结束战斗回合的情况下
  71.         if @phase != 5
  72.           # 刷新状态窗口
  73.           @status_window.refresh
  74.         end
  75.       end
  76.     end
  77.     # 系统 (计时器)、刷新画面
  78.     $game_system.update
  79.     $game_screen.update
  80.     # 计时器为 0 的情况下
  81.     if $game_system.timer_working and $game_system.timer == 0
  82.       # 中断战斗
  83.       $game_temp.battle_abort = true
  84.     end
  85.     # 刷新窗口
  86.     @help_window.update
  87.     @party_command_window.update
  88.     @actor_command_window.update
  89.     @status_window.update
  90.     @message_window.update
  91. #★★★★★★★★★★★★★★★★★★★★★★★★★
  92.     @kan_window.update
  93. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  94.     # 刷新活动块
  95.     @spriteset.update
  96.     # 处理过渡中的情况下
  97.     if $game_temp.transition_processing
  98.       # 清除处理过渡中标志
  99.       $game_temp.transition_processing = false
  100.       # 执行过渡
  101.       if $game_temp.transition_name == ""
  102.         Graphics.transition(20)
  103.       else
  104.         Graphics.transition(40, "Graphics/Transitions/" +
  105.           $game_temp.transition_name)
  106.       end
  107.     end
  108.     # 显示信息窗口中的情况下
  109.     if $game_temp.message_window_showing
  110.       return
  111.     end
  112. #★★★★★★★★★★★★★★★★★★★★★★★★★
  113.     if @kan_window.visible
  114.       return
  115.     end
  116. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  117.     # 显示效果中的情况下
  118.     if @spriteset.effect?
  119.       return
  120.     end
  121.     # 游戏结束的情况下
  122.     if $game_temp.gameover
  123.       # 切换到游戏结束画面
  124.       $scene = Scene_Gameover.new
  125.       return
  126.     end
  127.     # 返回标题画面的情况下
  128.     if $game_temp.to_title
  129.       # 切换到标题画面
  130.       $scene = Scene_Title.new
  131.       return
  132.     end
  133.     # 中断战斗的情况下
  134.     if $game_temp.battle_abort
  135.       # 还原为战斗前的 BGM
  136.       $game_system.bgm_play($game_temp.map_bgm)
  137.       # 战斗结束
  138.       battle_end(1)
  139.       return
  140.     end
  141.     # 等待中的情况下
  142.     if @wait_count > 0
  143.       # 减少等待计数
  144.       @wait_count -= 1
  145.       return
  146.     end
  147.     # 强制行动的角色存在、
  148.     # 并且战斗事件正在执行的情况下
  149.     if $game_temp.forcing_battler == nil and
  150.        $game_system.battle_interpreter.running?
  151.       return
  152.     end
  153.     # 回合分支
  154.     case @phase
  155.     when 1  # 自由战斗回合
  156.       update_phase1
  157.     when 2  # 同伴命令回合
  158.       update_phase2
  159.     when 3  # 角色命令回合
  160.       update_phase3
  161.     when 4  # 主回合
  162.       update_phase4
  163.     when 5  # 战斗结束回合
  164.       update_phase5
  165.     end
  166.   end
  167. end
复制代码
.

如果只是想加个血条的话
就用茂大的脚本
在$game_temp.message_text = text 后面把被砍的人传递给显示文章的窗口
然后在显示文章窗口的refresh立面的self.contents.clear后面加个判断
if $被砍的人
  从 $被砍的人 获取资料
  描绘血条
  $被砍的人 = nil
end
这样就保持了原来的排版加上了血条
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-7-24 04:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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