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

Project1

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

[原创发布] 【不是创意的创意】角色的状态决定行走图色相v1.3

 关闭 [复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

跳转到指定楼层
1
发表于 2008-12-12 01:55:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 精灵使者 于 2014-12-20 21:35 编辑

状态决定行走图色相 v1.3
更新日志:
1.1版整合了小lim的脚本,实现了储存进度和正常游戏里玩家的状态颜色显示。
1.2版更新了色调偏移算法,避免了2个以上的状态偏移相同色相的状况。
1.3版整合了小lim的菜单脚本,允许更改菜单的色调或者颜色叠加(普通行走图无效)
应某提问区的要求发布。
如果角色中了某种特殊状态,则会自动改变此角色的色调,支持多种状态偏移。
经测试,与人物跟随脚本完美兼容,没有任何冲突。各自人物都会有自己的状态偏移。
p.s.已经有了色相的行走图则继续往下偏移。
使用方法:
定义常量
# 设定颜色更换『状态编号 => [Red,Gree,Blue]』
  State_color = {
  1 => [50,50,50],
  2 => [128,0,0],
  3 => [128,128,0]
                 }
  # 设定色相更换『状态编号 => [hue]』
  State_hue = {
  1 => [330],
  2 => [60],
  3 => [30],
  }
  # 设定改变颜色方式,0(色调) 或者 1(覆盖)或者 2(色相)
  Change_type = 0
效果图:

范例工程:http://rpg.blue/upload_program/d ... ��调_109983089.rar
脚本:

  1. #------------------------------------------------------------------------------
  2. #状态决定行走图色相色调 v1.3
  3. #
  4. #如果角色中了某种特殊状态,则会自动改变此角色的色相或者色调。
  5. #
  6. #p.s.已经有了色调的行走图则继续往下偏移。
  7. #
  8. #编写 by 精灵使者,改进 by enchao_lim
  9. #增添了读取进度和普通状态下的角色偏移
  10. #改进了异常色调如果相同的话的判断算法
  11. #可以使用灰色的色调和覆盖颜色,但是在菜单以外其他地方无效。
  12. #------------------------------------------------------------------------------

  13. #定义恒量

  14. module SRSR
  15.   # 设定颜色更换『状态编号 => [Red,Gree,Blue]』
  16.   State_color = {
  17.   1 => [50,50,50],
  18.   2 => [128,0,0],
  19.   3 => [128,128,0]
  20.                  }
  21.   # 设定色相更换『状态编号 => [hue]』
  22.   State_hue = {
  23.   1 => [330],
  24.   2 => [60],
  25.   3 => [30],
  26.   }
  27.   # 设定改变颜色方式,0(色调) 或者 1(覆盖)或者 2(色相)
  28.   Change_type = 0
  29. end
  30. class Window_Base
  31.   alias new_initialize initialize
  32.   def initialize(_x,_y,_w,_h)
  33.     new_initialize(_x,_y,_w,_h)
  34.     @graphics = {}
  35.     for i in 0...$data_actors.size
  36.       @graphics[i] = nil
  37.     end
  38.     @_x = self.x
  39.     @_y = self.y
  40.   end
  41.   def draw_actor_graphic(actor,x,y)
  42.     @graphics[actor.id].dispose if @graphics[actor.id] != nil
  43.     @graphics[actor.id] == nil
  44.     @delta_hue = 0
  45.     @state_num = 0
  46.     if SRSR::Change_type == 2
  47.       for i in actor.states
  48.       #如果角色中状态就加上偏移值
  49.       if SRSR::State_hue[i] != nil
  50.       @delta_hue += SRSR::State_hue[i][0]
  51.       @state_num += 1
  52.       end
  53.        end
  54.     #防止两种以上状态叠加出现相同色调的状况
  55.     if @state_num > 1
  56.     for i in actor.states
  57.       if SRSR::State_hue[i] != nil
  58.       #当与某一个颜色重复或者与普通色调相同时
  59.       if @delta_hue % 360 == SRSR::State_hue[i][0] or @delta_hue %360 == 0
  60.         @delta_hue += 179 #加上一个质数尽量避免重复
  61.       end
  62.       end
  63.     end
  64.     end
  65.     #最后计算
  66.     @delta_hue %= 360
  67.     end
  68.     bitmap = RPG::Cache.character(actor.character_name, actor.character_hue +
  69.     @delta_hue)
  70.     cw = bitmap.width/4
  71.     ch = bitmap.height/4
  72.     @graphics[actor.id] = Sprite.new
  73.     @graphics[actor.id].bitmap = bitmap
  74.     @graphics[actor.id].src_rect.set(0,0,cw,ch)
  75.     x = x +16 - cw / 2
  76.     y = y +16 - ch
  77.     @graphics[actor.id].x = x
  78.     @graphics[actor.id].y = y
  79.     @graphics[actor.id].z = self.z + 1
  80.     @graphics[actor.id].opacity = 0
  81.     tone = [0,0,0,0]
  82.     case SRSR::Change_type
  83.     when 0
  84.       for i in actor.states
  85.         if SRSR::State_color[i] != nil
  86.           tone[0] = (tone[0] + SRSR::State_color[i][0]) % 256
  87.           tone[1] = (tone[1] + SRSR::State_color[i][1]) % 256
  88.           tone[2] = (tone[2] + SRSR::State_color[i][2]) % 256
  89.           tone[3] = 255
  90.         end
  91.       end
  92.       @graphics[actor.id].tone.set(tone[0],tone[1],tone[2],tone[3])
  93.     when 1
  94.       for i in actor.states
  95.         if SRSR::State_color[i] != nil
  96.           tone[0] = (tone[0] + SRSR::State_color[i][0]) % 256
  97.           tone[1] = (tone[1] + SRSR::State_color[i][1]) % 256
  98.           tone[2] = (tone[2] + SRSR::State_color[i][2]) % 256
  99.           tone[3] = 192
  100.         end
  101.       end
  102.       @graphics[actor.id].color.set(tone[0],tone[1],tone[2],tone[3])
  103.     end
  104.   end
  105.   alias new_update update
  106.   def update
  107.     if @_x != self.x or @_y != self.y
  108.       for i in 0...$data_actors.size
  109.         if @graphics[i] != nil
  110.           dx = self.x - @_x
  111.           dy = self.y - @_y
  112.           @graphics[i].x += dx
  113.           @graphics[i].y += dy
  114.         end
  115.       end
  116.       @_x = self.x
  117.       @_y = self.y
  118.     end
  119.     for i in 0...$data_actors.size
  120.       if @graphics[i] != nil
  121.         @graphics[i].update
  122.         @graphics[i].opacity = 255 if @graphics[i].opacity != 255
  123.       end
  124.     end
  125.     new_update
  126.   end
  127.   alias new_dispose dispose
  128.   def dispose
  129.     new_dispose
  130.     for i in 0...$data_actors.size
  131.       @graphics[i].dispose if @graphics[i] != nil
  132.       @graphics[i] = nil
  133.     end
  134.   end
  135. end
  136. #==============================================================================
  137. # ■ Game_Actor
  138. #------------------------------------------------------------------------------
  139. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  140. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  141. #==============================================================================
  142. class Game_Actor
  143.   #--------------------------------------------------------------------------
  144.   # ● 色调的计算
  145.   #     character_hue :原始人物色调
  146.   #     delta_hue     :色调的偏移值
  147.   #--------------------------------------------------------------------------
  148.   def character_hue
  149.     @delta_hue = 0
  150.     @state_num = 0
  151.     if SRSR::Change_type == 2
  152.       for i in states
  153.       #如果角色中状态就加上偏移值
  154.       if SRSR::State_hue[i] != nil
  155.       @delta_hue += SRSR::State_hue[i][0]
  156.       @state_num += 1
  157.       end
  158.       end
  159.     #防止两种以上状态叠加出现相同色调的状况
  160.     if @state_num > 1
  161.     for i in states
  162.       if SRSR::State_hue[i] != nil
  163.       #当与某一个颜色重复或者与普通色调相同时
  164.       if @delta_hue % 360 == SRSR::State_hue[i][0] or @delta_hue %360 == 0
  165.         @delta_hue += 179 #加上一个质数尽量避免重复
  166.       end
  167.       end
  168.     end
  169.     end
  170.     #最后计算
  171.     @delta_hue %= 360
  172.     end
  173.     return @character_hue + @delta_hue
  174.   end
  175. end
  176. #==============================================================================
  177. # ■ Game_Player
  178. #------------------------------------------------------------------------------
  179. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  180. # 本类的实例请参考 $game_player。
  181. #=============================================================================
  182. class Game_Player
  183.   #--------------------------------------------------------------------------
  184.   # ● 色调的计算
  185.   #     character_hue :原始人物色调
  186.   #     delta_hue     :色调的偏移值
  187.   #--------------------------------------------------------------------------
  188.   def character_hue
  189.     @delta_hue = 0
  190.     @state_num = 0
  191.     if SRSR::Change_type == 2 and $game_party.actors[0] != nil
  192.       for i in $game_party.actors[0].states
  193.       #如果角色中状态就加上偏移值
  194.       if SRSR::State_hue[i] != nil
  195.       @delta_hue += SRSR::State_hue[i][0]
  196.       @state_num += 1
  197.       end
  198.        end
  199.     #防止两种以上状态叠加出现相同色调的状况
  200.     if @state_num > 1
  201.     for i in $game_party.actors[0].states
  202.       if SRSR::State_hue[i] != nil
  203.       #当与某一个颜色重复或者与普通色调相同时
  204.       if @delta_hue % 360 == SRSR::State_hue[i][0] or @delta_hue %360 == 0
  205.         @delta_hue += 179 #加上一个质数尽量避免重复
  206.       end
  207.       end
  208.     end
  209.     end
  210.     #最后计算
  211.     @delta_hue %= 360
  212.     end
  213.     return @character_hue + @delta_hue
  214.   end
  215.   def character_hue=(hue)
  216.     @character_hue = hue
  217.   end
  218. end
复制代码
头像被屏蔽

Lv1.梦旅人 (禁止发言)

lov Peii 4ever

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-10-28
帖子
423
2
发表于 2008-12-12 02:50:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

3
 楼主| 发表于 2008-12-12 03:18:52 | 只看该作者
GAME_ACTOR么?
我使用的是window_base……
恩,我再看看……
似乎直接重定义set_graphic似乎没有效果耶。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2007-8-1
帖子
243
4
发表于 2008-12-12 05:17:28 | 只看该作者
精灵,能翻译一下脚本的内容吗?
努力!奋斗!这次无论如何都要实现菜单动态化,燃烧吧,我的斗志!!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

5
 楼主| 发表于 2008-12-12 06:03:09 | 只看该作者
很简单啊。
重定义了画行走图部分,然后在代入行走图的色调部分动了下手脚。
就这么简单。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2007-8-1
帖子
243
6
发表于 2008-12-12 06:21:47 | 只看该作者
    for i in 1..STATE_HUE.size
      if actor.state?(i)
      @delta_hue += STATE_HUE[i - 1]
能翻译一下这些代码的意思吗?
努力!奋斗!这次无论如何都要实现菜单动态化,燃烧吧,我的斗志!!!
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

lov Peii 4ever

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-10-28
帖子
423
7
发表于 2008-12-12 08:16:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

8
 楼主| 发表于 2008-12-12 08:53:03 | 只看该作者
直接整合一下不就成了么……
我上次试图写了一次,没成功- -!
帮你整合一下吧。
多谢小lim的脚本,已经完美整合到原脚本中。
更新到1.2版本。
顺手更新了色调重复时的算法处理和脚本解释。
以下引用无双修罗一闪于2008-12-11 22:21:47的发言:

   for i in 1..STATE_HUE.size
     if actor.state?(i)
     @delta_hue += STATE_HUE[i - 1]
能翻译一下这些代码的意思吗?

很简单了。一个循环而已。遍历整个状态的色彩偏移的数组(在最顶端),
如果角色有这个状态,色调就加上这个状态对应的偏移值。最后再判断一下,交给最后的色彩偏移值。
经测试,与人物跟随完美兼容,没有冲突(人物跟随的角色也会带上相应的状态偏移)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
9
发表于 2008-12-14 21:54:02 | 只看该作者
这真的很不错
很久没来这裡了...竟然有这样好东西


但变更色调的唯一缺点就是无法变成灰色


但这样的功能已经很不错了~~~我不嫌~~~我不嫌>///<

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

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

开拓者贵宾

10
 楼主| 发表于 2008-12-14 21:56:27 | 只看该作者
以下引用TERENCE于2008-12-14 13:54:02的发言:

这真的很不错
很久没来这裡了...竟然有这样好东西


但变更色调的唯一缺点就是无法变成灰色


但这样的功能已经很不错了~~~我不嫌~~~我不嫌>///<

如果色调有个灰度色调的话我一定会做……
提问帖里面一直都在讨论这个灰色问题……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 10:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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