扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 158|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10622
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13391

    灌水之王

    发表于 2024-4-19 16:04:25 | 显示全部楼层 |阅读模式
    状态决定行走图色相 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. #------------------------------------------------------------------------------#状态决定行走图色相色调 v1.3# #如果角色中了某种特殊状态,则会自动改变此角色的色相或者色调。##p.s.已经有了色调的行走图则继续往下偏移。##编写 by 精灵使者,改进 by enchao_lim#增添了读取进度和普通状态下的角色偏移#改进了异常色调如果相同的话的判断算法#可以使用灰色的色调和覆盖颜色,但是在菜单以外其他地方无效。#------------------------------------------------------------------------------#定义恒量module SRSR  # 设定颜色更换『状态编号 => [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 = 0endclass Window_Base  alias new_initialize initialize  def initialize(_x,_y,_w,_h)    new_initialize(_x,_y,_w,_h)    @graphics = {}    for i in 0...$data_actors.size      @graphics[i] = nil    end    @_x = self.x    @_y = self.y  end  def draw_actor_graphic(actor,x,y)    @graphics[actor.id].dispose if @graphics[actor.id] != nil    @graphics[actor.id] == nil    @delta_hue = 0    @state_num = 0    if SRSR::Change_type == 2      for i in actor.states      #如果角色中状态就加上偏移值      if SRSR::State_hue[i] != nil      @delta_hue += SRSR::State_hue[i][0]      @state_num += 1      end       end    #防止两种以上状态叠加出现相同色调的状况    if @state_num > 1    for i in actor.states      if SRSR::State_hue[i] != nil      #当与某一个颜色重复或者与普通色调相同时      if @delta_hue % 360 == SRSR::State_hue[i][0] or @delta_hue %360 == 0        @delta_hue += 179 #加上一个质数尽量避免重复      end      end    end    end    #最后计算    @delta_hue %= 360    end    bitmap = RPG::Cache.character(actor.character_name, actor.character_hue +     @delta_hue)     cw = bitmap.width/4    ch = bitmap.height/4    @graphics[actor.id] = Sprite.new    @graphics[actor.id].bitmap = bitmap    @graphics[actor.id].src_rect.set(0,0,cw,ch)    x = x +16 - cw / 2    y = y +16 - ch    @graphics[actor.id].x = x    @graphics[actor.id].y = y    @graphics[actor.id].z = self.z + 1    @graphics[actor.id].opacity = 0    tone = [0,0,0,0]    case SRSR::Change_type    when 0      for i in actor.states        if SRSR::State_color[i] != nil          tone[0] = (tone[0] + SRSR::State_color[i][0]) % 256          tone[1] = (tone[1] + SRSR::State_color[i][1]) % 256          tone[2] = (tone[2] + SRSR::State_color[i][2]) % 256          tone[3] = 255        end      end      @graphics[actor.id].tone.set(tone[0],tone[1],tone[2],tone[3])    when 1      for i in actor.states        if SRSR::State_color[i] != nil          tone[0] = (tone[0] + SRSR::State_color[i][0]) % 256          tone[1] = (tone[1] + SRSR::State_color[i][1]) % 256          tone[2] = (tone[2] + SRSR::State_color[i][2]) % 256          tone[3] = 192        end      end      @graphics[actor.id].color.set(tone[0],tone[1],tone[2],tone[3])    end  end  alias new_update update  def update    if @_x != self.x or @_y != self.y      for i in 0...$data_actors.size        if @graphics[i] != nil          dx = self.x - @_x          dy = self.y - @_y          @graphics[i].x += dx          @graphics[i].y += dy        end      end      @_x = self.x      @_y = self.y    end    for i in 0...$data_actors.size      if @graphics[i] != nil        @graphics[i].update        @graphics[i].opacity = 255 if @graphics[i].opacity != 255      end    end    new_update  end  alias new_dispose dispose  def dispose    new_dispose    for i in 0...$data_actors.size      @graphics[i].dispose if @graphics[i] != nil      @graphics[i] = nil    end  endend#==============================================================================# ■ Game_Actor#------------------------------------------------------------------------------#  处理角色的类。本类在 Game_Actors 类 ($game_actors)# 的内部使用、Game_Party 类请参考 ($game_party) 。#==============================================================================class Game_Actor  #--------------------------------------------------------------------------  # ● 色调的计算  #     character_hue :原始人物色调  #     delta_hue     :色调的偏移值  #--------------------------------------------------------------------------  def character_hue    @delta_hue = 0    @state_num = 0    if SRSR::Change_type == 2      for i in states      #如果角色中状态就加上偏移值      if SRSR::State_hue[i] != nil      @delta_hue += SRSR::State_hue[i][0]      @state_num += 1      end      end    #防止两种以上状态叠加出现相同色调的状况    if @state_num > 1    for i in states      if SRSR::State_hue[i] != nil      #当与某一个颜色重复或者与普通色调相同时      if @delta_hue % 360 == SRSR::State_hue[i][0] or @delta_hue %360 == 0        @delta_hue += 179 #加上一个质数尽量避免重复      end      end    end    end    #最后计算    @delta_hue %= 360    end    return @character_hue + @delta_hue  endend#==============================================================================# ■ Game_Player#------------------------------------------------------------------------------#  处理主角的类。事件启动的判定、以及地图的滚动等功能。# 本类的实例请参考 $game_player。#=============================================================================class Game_Player  #--------------------------------------------------------------------------  # ● 色调的计算  #     character_hue :原始人物色调  #     delta_hue     :色调的偏移值  #--------------------------------------------------------------------------  def character_hue    @delta_hue = 0    @state_num = 0    if SRSR::Change_type == 2 and $game_party.actors[0] != nil      for i in $game_party.actors[0].states      #如果角色中状态就加上偏移值      if SRSR::State_hue[i] != nil      @delta_hue += SRSR::State_hue[i][0]      @state_num += 1      end       end    #防止两种以上状态叠加出现相同色调的状况    if @state_num > 1    for i in $game_party.actors[0].states      if SRSR::State_hue[i] != nil      #当与某一个颜色重复或者与普通色调相同时      if @delta_hue % 360 == SRSR::State_hue[i][0] or @delta_hue %360 == 0        @delta_hue += 179 #加上一个质数尽量避免重复      end      end    end    end    #最后计算    @delta_hue %= 360    end    return @character_hue + @delta_hue  end  def character_hue=(hue)    @character_hue = hue  endend复制代码
    复制代码
                 本帖来自P1论坛作者无双修罗一闪,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=112344  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-15 00:10 , Processed in 0.113543 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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