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

Project1

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

[已经解决] 关于影子系统VX版[精灵使者完美汉化版]

[复制链接]

Lv1.梦旅人

梦石
0
星屑
62
在线时间
74 小时
注册时间
2005-10-23
帖子
53
跳转到指定楼层
1
发表于 2011-1-10 14:08:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 xtmhmvbw 于 2011-1-14 11:26 编辑

原帖地址影子系统VX
问题是这样的,这个脚本使用默认45°的时候显示无问题 如图 :正常.png
但是设置到0°的时候就很诡异了 如图 0°.png

之后跟精灵大大讨论了下。貌似也没好的方法> <

再次问一下,有没有人能帮忙把这个脚本修正一下呢?
附带下原版的范例工程(BUG未修正)
ShadowDemo.rar (262.32 KB, 下载次数: 140)

然后还有一个BUG。就是战斗的时候影子会出现在战斗背景上方,好像可以通过修改Scene_Battle来解决,期待有人能帮忙告诉我到底该哪里。。

以下是作者原话: This script may cause problems to scenes involving the use of viewport (Scene_Item, Scene_Skill, Scene_Battle), but it can be fixed by a few edits in the scripts.


恩。之后亿万同学把这个原版工程修改了一下,修正了战斗显示错误的问题,貌似都解决了?

正常.png (19.55 KB, 下载次数: 26)

正常.png

0°.png (21.06 KB, 下载次数: 26)

0°.png

战斗背景.png (243.65 KB, 下载次数: 32)

战斗背景.png

ShadowDemoX By亿万星辰.rar

265.6 KB, 下载次数: 142

点评

果然发错鸟……转移  发表于 2011-1-10 14:44
我想问这是哪个区?  发表于 2011-1-10 14:18

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

2
发表于 2011-1-10 14:10:24 | 只看该作者
这个问题估计是影子只能使用他本来的行走图导致的……问题得在行走图的地方下手
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42448
在线时间
7603 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

3
发表于 2011-1-10 14:20:38 | 只看该作者
回复 xtmhmvbw 的帖子

以下为XP版影子,再声明一次,这里是XP区,等会如果你没有说明我就会扣分+拖走
  1. # 来自:未知

  2.    #========================================================================
  3.    #  ■      设       定       系        统          部       分       ■  #
  4.    #========================================================================
  5.     # 跟随系统部分设定(如果选用了相应的系统请选true,否则选false)
  6.     CATERPILLAR_COMPATIBLE      = false    # 原版跟随系统兼容开关  
  7.     SQUAD_MOVE_COMPATIBLE       = false   # Near Fantastica的跟随系统兼容开关
  8.     CCOA_CATER_COMPATIBLE       = false   # Ccoa的跟随系统兼容开关
  9.     TRICKSTER_CATER_COMPATIBLE  = false   # Trickster的跟随系统兼容开关
  10.    
  11.     # 太阳系统的特别设定
  12.     SUN_WARN                    = true    # 检查是否兼容老版本的太阳系统
  13.     SUN_ANGLE                   = 45      # 默认太阳系统产生的影子角度
  14.     SUN_OPACITY                 = 128     # 默认太阳系统产生的影子深度

  15.    
  16.    #========================================================================
  17.    #  ■■   设         定       部          分          结      束   ■■  #
  18.    #========================================================================
  19.   
  20.   

  21. #==================================================================================
  22. # ■ Game_Temp
  23. #------------------------------------------------------------------------------
  24. #  在没有存档的情况下,处理临时数据的类。这个类的实例请参考 $game_temp 。
  25. #=================================================================================
  26. class Game_Temp
  27.   #--------------------------------------------------------------------------
  28.   # ● 定义实例变量
  29.   #--------------------------------------------------------------------------
  30.   attr_accessor :sun_spriteset            # 维持太阳阴影的活动块
  31. end

  32. #==================================================================================
  33. # ■ Game_Party
  34. #------------------------------------------------------------------------------
  35. #  处理同伴的类。包含金钱以及物品的信息。本类的实例请参考 $game_party。
  36. #==================================================================================

  37. class Game_Party
  38.   #--------------------------------------------------------------------------
  39.   # ● 定义实例变量
  40.   #--------------------------------------------------------------------------
  41.   attr_reader :characters
  42. end



  43. #==================================================================================
  44. # ■ Sprite_Sun
  45. #------------------------------------------------------------------------------
  46. #  根据角色的地图位置来处理角色阴影角度的精灵(活动块)类。Game_Character 类的实例
  47. #  监视、活动块状态的自动变化。
  48. #==================================================================================

  49. class Sprite_Sun < RPG::Sprite
  50.   #--------------------------------------------------------------------------
  51.   # ● 定义实例变量
  52.   #--------------------------------------------------------------------------
  53.   attr_accessor :character         
  54.   #--------------------------------------------------------------------------
  55.   # ● 初始化对象
  56.   #     viewport  : 显示端口
  57.   #     character : 角色 (Game_Character)
  58.   #     id        : 角色ID
  59.   #--------------------------------------------------------------------------
  60.   def initialize(viewport, character = nil, id=0)
  61.     super(viewport)
  62.     @character = character
  63.     params=$game_temp.sun_spriteset.sun[id]
  64.     # 默认设置
  65.     self_angle    = SUN_ANGLE
  66.     self_opacity  = SUN_OPACITY
  67.     # 根据参数的设置
  68.     self_angle    = params[0]   if params.size > 0
  69.     self_opacity  = params[1]   if params.size > 1
  70.     @self_angle   = self_angle
  71.     @self_opacity = self_opacity
  72.     update
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 更新画面
  76.   #--------------------------------------------------------------------------  
  77.   def update
  78.     super
  79.     # 在图块ID,文件名或者色相不同于当前的情况下
  80.     if @tile_id != @character.tile_id or
  81.        @character_name != @character.character_name or
  82.        @character_hue != @character.character_hue
  83.       @tile_id = @character.tile_id
  84.       @character_name = @character.character_name
  85.       @character_hue = @character.character_hue
  86.       if @tile_id > 0
  87.          sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  88.          sy = @tile_id % 256 / 8 % 16 * 32;
  89.           set_number = @tile_id / 256
  90.         self.bitmap = RPG::Cache.system("TileB") if set_number == 0
  91.         self.bitmap = RPG::Cache.system("TileC") if set_number == 1
  92.         self.bitmap = RPG::Cache.system("TileD") if set_number == 2
  93.         self.bitmap = RPG::Cache.system("TileE") if set_number == 3
  94.         self.src_rect.set(0, 0, 32, 32)
  95.         self.ox = 16
  96.         self.oy = 32
  97.       else
  98.        #self.bitmap =RPG::Cache.character(@character_name)#影子参数的对应修改
  99.        self.bitmap = RPG::Cache.character(@character.character_name,
  100.          @character.character_hue)
  101.         sign = @character_name[/^[\!\$]./]
  102.         if sign != nil and sign.include?(')
  103.           @cw = bitmap.width / 4#影子的完整度设定
  104.           @ch = bitmap.height / 4#影子的完整度设定
  105.         else
  106.           @cw = bitmap.width / 4#影子的完整度设定
  107.           @ch = bitmap.height / 4#影子的完整度设定
  108.         end
  109.         self.ox = @cw / 2
  110.         self.oy = @ch
  111.       end
  112.     end
  113.     # 设置可见状况
  114.     self.visible = (not @character.transparent)
  115.     # 如果画面是角色的情况下
  116.     if @tile_id == 0
  117.       hue = @character.character_hue
  118.       pattern = @character.pattern < 3 ? @character.pattern : 1
  119.       # 矩形本体设定
  120.       sx = (hue % 4 * 3 + pattern) * @cw
  121.       @direct = @character.direction
  122.       if self.angle > 90 or angle < -90
  123.         sy = ( 4 - 2) / 2 * @ch                   if @direct == 6
  124.         sy = ( 6 - 2) / 2 * @ch                   if @direct == 4
  125.         sy = (@character.direction - 2) / 2 * @ch if @direct != 4 and @direct != 6
  126.       else
  127.         sy = (hue / 4 * 4 + (@character.direction - 2) / 2) * @ch
  128.        #sy = @character.direction
  129.       end
  130.       self.src_rect.set(sx, sy, @cw, @ch)
  131.     end
  132.     # 设置精灵(活动块)的坐标
  133.     self.x = @character.screen_x#  
  134.     self.y = @character.screen_y-5 #  
  135.      #self.z = 10#@character.screen_z-1
  136.      
  137.      self.z = @character.screen_z(@ch)-1#  
  138.     # 设置不透明度,合成方式和草木深度
  139.    self.opacity = @self_opacity
  140.    # self.opacity = @character.opacity#  
  141.     self.blend_type = @character.blend_type
  142.     self.bush_depth = @character.bush_depth
  143.     # 显示动画
  144.     if @character.animation_id != 0#  
  145.       animation = $data_animations[@character.animation_id]#  
  146.       animation(animation, true)#  
  147.       @character.animation_id = 0#  
  148.     end
  149.     self.angle = @self_angle.to_i - 90
  150.     self.color = Color.new(0, 0, 0)
  151.     end
  152. end



  153. #==================================================================================
  154. # ■ Sprite_Character
  155. #------------------------------------------------------------------------------
  156. #  角色显示用脚本。监视 Game_Character 类的实例、自动变化脚本状态。
  157. #==================================================================================

  158. class Sprite_Character < RPG::Sprite
  159.   #--------------------------------------------------------------------------
  160.   # ● 重命名函数列表
  161.   #--------------------------------------------------------------------------  
  162.   alias sun_initialize initialize
  163.   alias sun_update update
  164.   #--------------------------------------------------------------------------
  165.   # ● 初始化对像
  166.   #     viewport  : 显示端口
  167.   #     character : 角色 (Game_Character)
  168.   #--------------------------------------------------------------------------
  169.   def initialize(viewport, character = nil)
  170.    #@viewport0 = Viewport.new(0, 0, 544, 416)
  171.     @viewport = Viewport.new(0, 0, 800, 600)#修改影子的行动范围,不做剪切
  172.      viewport.z = 0#战斗清除影子,地图切换清楚影子,改为1则有延迟
  173.     @character = character
  174.     super(viewport)
  175.     @sunlist=[]
  176.     if character.is_a?(Game_Event) and $game_temp.sun_spriteset.sun != []
  177.       params = XPML.XPML_read("Shadow", @character.id, 2)
  178.       if params != nil
  179.         for i in 0...$game_temp.sun_spriteset.sun.size
  180.           @sunlist.push(Sprite_Sun.new(viewport, @character, i))
  181.         end
  182.       end
  183.     end
  184.     if character.is_a?(Game_Player) and $game_temp.sun_spriteset.sun != []
  185.       for i in 0...$game_temp.sun_spriteset.sun.size
  186.         @sunlist.push(Sprite_Sun.new(viewport, $game_player, i))
  187.       end
  188.       #===================================================
  189.       # ● 与人物跟随功能兼容脚本
  190.       #===================================================
  191.       if CATERPILLAR_COMPATIBLE and $game_party.characters != nil
  192.         for member in $game_party.characters
  193.           for i in 0...$game_temp.sun_spriteset.sun.size
  194.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  195.           end
  196.         end
  197.       end
  198.       if SQUAD_MOVE_COMPATIBLE and $game_allies.values != nil
  199.         for member in $game_allies.values
  200.           for i in 0...$game_temp.sun_spriteset.sun.size
  201.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  202.           end
  203.         end
  204.       end
  205.       if CCOA_CATER_COMPATIBLE and $game_train.actors != nil
  206.         for member in $game_train.actors
  207.           for i in 0...$game_temp.sun_spriteset.sun.size
  208.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  209.           end
  210.         end
  211.       end
  212.       if TRICKSTER_CATER_COMPATIBLE and $game_party.followers != nil
  213.         for member in $game_party.followers
  214.           for i in 0...$game_temp.sun_spriteset.sun.size
  215.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  216.           end
  217.         end
  218.       end
  219.       #===================================================
  220.       # ● 兼容脚本结束
  221.       #===================================================      
  222.     end
  223.     # 执行原始函数调用
  224.     sun_initialize(viewport, @character)
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 更新画面
  228.   #--------------------------------------------------------------------------
  229.   def update
  230.      
  231.     sun_update
  232.     if @sunlist != []
  233.       for i in [email protected]
  234.         @sunlist[i].update
  235.       end
  236.     end
  237.   end  
  238. end



  239. #==================================================================================
  240. # ■ Game_Event
  241. #------------------------------------------------------------------------------
  242. #  处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
  243. # 在 Game_Map 类的内部使用。
  244. #==================================================================================

  245. class Game_Event < Game_Character
  246.   #--------------------------------------------------------------------------
  247.   # ● 定义实例变量
  248.   #--------------------------------------------------------------------------
  249.   attr_accessor :id
  250. end




  251. #==================================================================================
  252. # ■ Spriteset_Map
  253. #------------------------------------------------------------------------------
  254. #  处理地图画面活动块和元件的类。本类在 Scene_Map 类的内部使用。
  255. #================================================================================

  256. class Spriteset_Map
  257.   #--------------------------------------------------------------------------
  258.   # ● 定义实例变量
  259.   #--------------------------------------------------------------------------  
  260.   attr_accessor :sun
  261.   #--------------------------------------------------------------------------
  262.   # ● 重命名函数列表
  263.   #--------------------------------------------------------------------------  
  264.   alias sun_initialize initialize
  265.   #--------------------------------------------------------------------------
  266.   # ● 初始化对象
  267.   #--------------------------------------------------------------------------   
  268.   def initialize
  269.     @sun = []
  270.     $game_temp.sun_spriteset = self
  271.     warn = false
  272.     for k in $game_map.events.keys.sort
  273.       if ($game_map.events[k].list != nil and
  274.           $game_map.events[k].list[0].code == 108 and
  275.           ($game_map.events[k].list[0].parameters == ["Sun"] or
  276.           $game_map.events[k].list[0].parameters == ["o"]))
  277.         warn = true
  278.       end
  279.       params = XPML.XPML_read("Sun", k, 2)
  280.       $game_temp.sun_spriteset.sun.push(params) if params != nil
  281.     end
  282.     if warn == true and SUN_WARN
  283.       p "警告:在地图上至少有一个事件使用了过去的方法来添加太阳效果"
  284.     end
  285.     # 执行原始函数调用
  286.     sun_initialize
  287.   end  
  288. end


  289. #==============================================================================
  290. # ■ module XPML
  291. #------------------------------------------------------------------------------
  292. #  本模块用来读取并传递注释中的参数。
  293. #
  294. #  使用此模块的主要用途就是检查和读出事件的注释。
  295. #  * 标记的关键字的注明方法:
  296. #    begin 关键字
  297. #  * 注意参数之间必须用关键字隔开。
  298. #  * 调用此函数的方法:
  299. #    XPML_read("关键字",事件ID,读取参数的最大值)
  300. #  * 最后一项可以忽略,默认为整个事件。
  301. #  * 赋值方法:
  302. #    变量名 参数
  303. #  * 每个变量名和参数各占一行。
  304. #  * 如果指明的关键字在事件里面不存在的话,则返回nil。
  305. #  * 如果两个标记之间没有参数的话,则返回空数组。
  306. #  * 如果参数中有数字参数的话,会自动返回为数字变量。
  307. #  举例:在一个事件中的注释写入(每个注释写一行,#号后面的不写)
  308. #       begin first # 第一关键字
  309. #       begin second #第二关键字
  310. #       变量1 1
  311. #       变量2 two
  312. #       begin third #第三关键字
  313. #       任何东西 3
  314. #  然后得出转换结果:
  315. #   p XPML_read("first", event_id) -> [] #第一关键字和第二关键字没有参数
  316. #   p XPML_read("second", event_id) -> [1,"two"] #第二关键字和第三关键字之间有2个参数
  317. #   p XPML_read("third", event_id) -> [3] #第三关键字之间有一个参数
  318. #   p XPML_read("forth", event_id) -> nil #找不到第四关键字则返回nil
  319. #===================================================

  320. module XPML
  321.   module_function
  322.   #--------------------------------------------------------------------------
  323.   # ● XPML_read
  324.   #     markup           : 需要在文件注释里检查的关键字。
  325.   #     event_id         : 事件ID
  326.   #     max_param_number : 读取参数/注释的最大值,0为事件内的所有注释
  327.   #--------------------------------------------------------------------------  
  328.   def XPML_read(markup, event_id, max_param_number = 0)
  329.     parameter_list = nil
  330.     event = $game_map.events[event_id]
  331.     return if event.list == nil
  332.       for i in 0...event.list.size
  333.         if event.list[i].code == 108 and
  334.           event.list[i].parameters[0].downcase == "begin " + markup.downcase
  335.           parameter_list = [] if parameter_list == nil
  336.           for j in i + 1...event.list.size
  337.             if event.list[j].code == 108
  338.               parts = event.list[j].parameters[0].split
  339.               if parts.size != 1 and parts[0].downcase != "begin"
  340.                 if parts[1].to_i != 0 or parts[1] == "0"
  341.                   parameter_list.push(parts[1].to_i)
  342.                 else
  343.                   parameter_list.push(parts[1])
  344.                 end
  345.               else
  346.                 return parameter_list
  347.               end
  348.             else
  349.               return parameter_list
  350.             end
  351.             if max_param_number != 0 and j == i + max_param_number
  352.               return parameter_list
  353.             end
  354.           end
  355.         end
  356.       end
  357.     return parameter_list
  358.   end
  359. end
复制代码
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

4
发表于 2011-1-10 14:43:44 | 只看该作者
本帖最后由 精灵使者 于 2011-1-10 14:44 编辑

转移完毕
确认发错区
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
74 小时
注册时间
2005-10-23
帖子
53
5
 楼主| 发表于 2011-1-10 14:45:06 | 只看该作者
fux2 有本法看看问题出在哪里么??谢谢精灵帮我转区了。。我看错了。。

点评

fux2,好像这与行走图有关  发表于 2011-1-10 15:34
什么意思?看不懂。  发表于 2011-1-10 15:10
angel%360  发表于 2011-1-10 14:51
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

6
发表于 2011-1-10 15:48:24 | 只看该作者
本帖最后由 精灵使者 于 2011-1-10 15:55 编辑

这个问题就是他用的当前方向的行走图来描绘影子产生的问题。如果想解决这个问题必须修改影子的产生来源(这个得需要一个算法)
顺手附上原版范例工程一份,需要的拿去

点评

很复杂的样子……  发表于 2011-1-10 16:18
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
74 小时
注册时间
2005-10-23
帖子
53
7
 楼主| 发表于 2011-1-10 15:55:30 | 只看该作者
很纠结的样子。。难道没希望了。。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

8
发表于 2011-1-11 13:44:16 | 只看该作者
我想来插一脚……不确定能否解决啊~

点评

这个算法本来就有问题,应该是四相的算法结果写成了两相的……需要一个矩阵啊。  发表于 2011-1-11 23:19
= =亿万。。。我跟你的注册时间真是。。  发表于 2011-1-11 14:07
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
74 小时
注册时间
2005-10-23
帖子
53
9
 楼主| 发表于 2011-1-11 13:59:30 | 只看该作者
回复 亿万星辰 的帖子

我后来自己把它写死了。。。只用0°的效果。。。

点评

烦请亿万酱弄个全局开关……viewport什么的最那啥了  发表于 2011-1-11 23:20
没有解决> <战斗画面的内个影子还在。。  发表于 2011-1-11 14:16
喔,这样啊,那也算解决了……仔细看了一下,这个脚本还是存在一些问题的~  发表于 2011-1-11 14:14
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
92
在线时间
456 小时
注册时间
2007-12-20
帖子
223

第一届地图绘制大赛RTP组亚军

10
发表于 2011-1-11 23:35:05 | 只看该作者
强烈支持 战斗画面的影子实在蛋疼 影子的坐标还需要调整
0度时人物面向左和右时影子完全不对啊不对
加油啊 期待lz完整的整合版
我不是水啊不是水)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 14:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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