【不是创意的创意】角色的状态决定行走图色相v1.3
状态决定行走图色相 v1.3更新日志:
1.1版整合了小lim的脚本,实现了储存进度和正常游戏里玩家的状态颜色显示。
1.2版更新了色调偏移算法,避免了2个以上的状态偏移相同色相的状况。
1.3版整合了小lim的菜单脚本,允许更改菜单的色调或者颜色叠加(普通行走图无效)
应某提问区的要求发布。
如果角色中了某种特殊状态,则会自动改变此角色的色调,支持多种状态偏移。
经测试,与人物跟随脚本完美兼容,没有任何冲突。各自人物都会有自己的状态偏移。
p.s.已经有了色相的行走图则继续往下偏移。
使用方法:
定义常量
# 设定颜色更换『状态编号 => 』
State_color = {
1 => ,
2 => ,
3 =>
}
# 设定色相更换『状态编号 => 』
State_hue = {
1 => ,
2 => ,
3 => ,
}
# 设定改变颜色方式,0(色调) 或者 1(覆盖)或者 2(色相)
Change_type = 0
效果图:
http://rpg.blue/upload_program/d/精灵使者_角色状态对应色调_109446578.jpg
范例工程:http://rpg.blue/upload_program/d ... ��调_109983089.rar
脚本:#------------------------------------------------------------------------------#状态决定行走图色相色调 v1.3# #如果角色中了某种特殊状态,则会自动改变此角色的色相或者色调。##p.s.已经有了色调的行走图则继续往下偏移。##编写 by 精灵使者,改进 by enchao_lim#增添了读取进度和普通状态下的角色偏移#改进了异常色调如果相同的话的判断算法#可以使用灰色的色调和覆盖颜色,但是在菜单以外其他地方无效。#------------------------------------------------------------------------------#定义恒量module SRSR# 设定颜色更换『状态编号 => 』State_color = {1 => ,2 => ,3 => }# 设定色相更换『状态编号 => 』State_hue = {1 => ,2 => ,3 => ,}# 设定改变颜色方式,0(色调) 或者 1(覆盖)或者 2(色相)Change_type = 0endclass Window_Basealias new_initialize initializedef initialize(_x,_y,_w,_h) new_initialize(_x,_y,_w,_h) @graphics = {} for i in 0...$data_actors.size @graphics = nil end @_x = self.x @_y = self.yenddef draw_actor_graphic(actor,x,y) @graphics.dispose if @graphics != nil @graphics == nil @delta_hue = 0 @state_num = 0 if SRSR::Change_type == 2 for i in actor.states #如果角色中状态就加上偏移值 if SRSR::State_hue != nil @delta_hue += SRSR::State_hue @state_num += 1 end end #防止两种以上状态叠加出现相同色调的状况 if @state_num > 1 for i in actor.states if SRSR::State_hue != nil #当与某一个颜色重复或者与普通色调相同时 if @delta_hue % 360 == SRSR::State_hue 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 = Sprite.new @graphics.bitmap = bitmap @graphics.src_rect.set(0,0,cw,ch) x = x +16 - cw / 2 y = y +16 - ch @graphics.x = x @graphics.y = y @graphics.z = self.z + 1 @graphics.opacity = 0 tone = case SRSR::Change_type when 0 for i in actor.states if SRSR::State_color != nil tone = (tone + SRSR::State_color) % 256 tone = (tone + SRSR::State_color) % 256 tone = (tone + SRSR::State_color) % 256 tone = 255 end end @graphics.tone.set(tone,tone,tone,tone) when 1 for i in actor.states if SRSR::State_color != nil tone = (tone + SRSR::State_color) % 256 tone = (tone + SRSR::State_color) % 256 tone = (tone + SRSR::State_color) % 256 tone = 192 end end @graphics.color.set(tone,tone,tone,tone) endendalias new_update updatedef update if @_x != self.x or @_y != self.y for i in 0...$data_actors.size if @graphics != nil dx = self.x - @_x dy = self.y - @_y @graphics.x += dx @graphics.y += dy end end @_x = self.x @_y = self.y end for i in 0...$data_actors.size if @graphics != nil @graphics.update @graphics.opacity = 255 if @graphics.opacity != 255 end end new_updateendalias new_dispose disposedef dispose new_dispose for i in 0...$data_actors.size @graphics.dispose if @graphics != nil @graphics = nil endendend#==============================================================================# ■ 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 != nil @delta_hue += SRSR::State_hue @state_num += 1 end end #防止两种以上状态叠加出现相同色调的状况 if @state_num > 1 for i in states if SRSR::State_hue != nil #当与某一个颜色重复或者与普通色调相同时 if @delta_hue % 360 == SRSR::State_hue or @delta_hue %360 == 0 @delta_hue += 179 #加上一个质数尽量避免重复 end end end end #最后计算 @delta_hue %= 360 end return @character_hue + @delta_hueendend#==============================================================================# ■ 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 != nil for i in $game_party.actors.states #如果角色中状态就加上偏移值 if SRSR::State_hue != nil @delta_hue += SRSR::State_hue @state_num += 1 end end #防止两种以上状态叠加出现相同色调的状况 if @state_num > 1 for i in $game_party.actors.states if SRSR::State_hue != nil #当与某一个颜色重复或者与普通色调相同时 if @delta_hue % 360 == SRSR::State_hue or @delta_hue %360 == 0 @delta_hue += 179 #加上一个质数尽量避免重复 end end end end #最后计算 @delta_hue %= 360 end return @character_hue + @delta_hueenddef character_hue=(hue) @character_hue = hueendend复制代码
本帖来自P1论坛作者无双修罗一闪,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=112344若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]