赞 | 0 |
VIP | 3 |
好人卡 | 0 |
积分 | 1 |
经验 | 1986 |
最后登录 | 2014-4-12 |
在线时间 | 98 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 98 小时
- 注册时间
- 2012-7-12
- 帖子
- 57
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 っ盛尘、恋 于 2012-8-30 08:01 编辑
发现一个BUG,使用解除状态的技能会出现MISS图片,现在已经解决,已经使用过的可以直接更新,(大概在64行,102行,150行有改动)
———————————————————————————————————————————————————————————————————————————
我找遍了很多地方也没看有伤害这样显示的,所以研究了下,可能比较时尚哦。刚做出来,可暂时称为1.0测试版,脚本可能不够简洁,感兴趣的可以帮忙简化一下,感谢了!
另外,不知道有没有BUG,用了很久还没发现,如果有发现的话,还请提出来噢。因为这个是图片版的,考虑到有些新手可能没有数字图片,所以范例工程带了图片,可以直接使用。
下面是实现的效果:
比如,伤害为 236 , 2先出来跳到最高点,此时3跳动到了最高点的一半,6刚好出来,当2再次回到原来的位置时,3从最高点到了一半的位置,6到了最高点的位置。然后2不动,3和6陆续回到原来的位置。
效果:
使用说明:
FMS = 2 # 第一次移动的速度
Num = 3 # 第二第三次移动的速度
XS = 15 # 第二次移动的像素
XT = 9 # 第三次移动的像素
NU = 10 # 数字间的间距 ps:它的三倍也是第一次移动的距离
FNH = 30 # 第一个数字的高度 这个别乱改,改动了其他坐标也要改
MAX_D = 70 # 显示的时间的最大值.
准备三张图片放在Pictures文件夹里,会心一击图片大小为:200 X 28 , 恢复图片和普通伤害图片为150 X 21 ,数字从0排到9,MISS图片为 55 X 20 修改在代码的80到105行之间
改上面着些数字的时候一定要把握好NU、FMS、Num、MAX_D这些数值之间的配合,详细的就不说了,大家改改试试效果就知道了。
测试工程:http://115.com/file/anbhygbu#Project.zip
把下面的脚本代码直接插入Main的前面,
- # 转载请注明出处————666RPG-盛尘恋-修改制作———————————————
- #——————————————————————————————————————
- module RPG
- #——————————————————————————————————————
- # 初始化数值
- FMS = 2 # 第一次移动的速度
- Num = 3 # 第二第三次移动的速度
- XS = 15 # 第二次移动的像素
- XT = 9 # 第三次移动的像素
- NU = 10 # 数字间的间距 ps:它的三倍也是第一次移动的距离
- FNH = 30 # 第一个数字的高度
- MAX_D = 65 # 显示的时间的最大值
- #——————————————————————————————————————
- class Sprite < ::Sprite
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize(viewport = nil)
- super(viewport)
- @_whiten_duration = 0
- @_appear_duration = 0
- @_escape_duration = 0
- @_collapse_duration = 0
- @_damage_duration = 0
- @_animation_duration = 0
- @_damage_show = false
- @_blink = false
- end
- #--------------------------------------------------------------------------
- # ● 伤害
- #--------------------------------------------------------------------------
- def damage(value, critical)
-
- # 释放伤害及转化变量
- dispose_damage
- @value = value
- @critical = critical
-
- # 伤害值定位
- @_damage_sprite = ::Sprite.new(self.viewport)
- @_damage_sprite.bitmap = Bitmap.new(200, 100)
- @_damage_show = true
-
- @_damage_sprite.ox = 0
- @_damage_sprite.oy = 0
- @_damage_sprite.x = self.x - 82
- x1 = (self.bitmap.width-self.bitmap.width/4)/2
- @_damage_sprite.x -= x1 - 10 if @battler.is_a?(Game_Actor)
-
- @_damage_sprite.y = self.y - self.oy - 30
- @_damage_sprite.y += self.oy/2-45 if @battler.is_a?(Game_Actor)
- @_damage_sprite.z = 3000
-
- # 与移动有关的变量初始化
- @_damage_duration = MAX_D
- @_damage_nb1t = []
- @_damage_rect = []
- @_damage_nb1t[0] = FNH - 3*NU
- @_damage_nb1t[1] = FNH - 2*NU
- @_damage_nb1t[2] = FNH - NU
- @_damage_nb1t[3] = FNH
- @XV = 3*NU / FMS
- @XE = 2*NU / FMS
- @XR = NU / FMS
- if @value.is_a?(Numeric)
- damage_string = @value.abs.to_s
- else
- # 转为字符串
- damage_string = @value.to_s
- end
- @damage_string = damage_string
- # 如果是数值的情况下
- if value.is_a?(Numeric)
- @_damage_x = 80 - damage_string.size * 9
- @ax = 0
- @ay = 0
- # 分割
- damage_array = damage_string.split(//)
- for i in 0...damage_array.size
- damage_array[i] = damage_array[i].to_i
- end
-
- # 会心一击的情况下
- if @critical == true
- @_damage_bmp = Bitmap.new("Graphics/Pictures/white_Number_l")
- for i in 0...damage_array.size
- @_damage_rect[i] = Rect.new(damage_array[i] * 20, 0, 20, 28)
- end
-
- #其他情况,包括恢复
- else
- if value < 0
- @_damage_bmp = Bitmap.new("Graphics/Pictures/green_Number_m")
- else
- @_damage_bmp = Bitmap.new("Graphics/Pictures/white_Number_m")
- end
- for i in 0...damage_array.size
- @_damage_rect[i] = Rect.new(damage_array[i] * 15, 0, 15, 21)
- end
- end
-
- #不是数值的情况
- elsif value == "Miss"
- @_damage_bmp = Bitmap.new("Graphics/Pictures/miss1")
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- if @_whiten_duration > 0
- @_whiten_duration -= 1
- self.color.alpha = 128 - (16 - @_whiten_duration) * 10
- end
- if @_appear_duration > 0
- @_appear_duration -= 1
- self.opacity = (16 - @_appear_duration) * 16
- end
- if @_escape_duration > 0
- @_escape_duration -= 1
- self.opacity = 256 - (32 - @_escape_duration) * 10
- end
- if @_collapse_duration > 0
- @_collapse_duration -= 1
- self.opacity = 256 - (48 - @_collapse_duration) * 6
- end
- #——————————————————————————————————————
- # 以下为伤害显示部分
- #——————————————————————————————————————
- if @_damage_show == true
- @_damage_sprite.bitmap.clear
- if @value.is_a?(Numeric)
- if @critical == true
- for i in 0...@_damage_rect.size
- @_damage_nb1t[i+4] = @_damage_nb1t[i]
- ay = @_damage_nb1t[i]
- ax = @_damage_x+i*22
- @_damage_sprite.bitmap.blt(ax, ay, @_damage_bmp, @_damage_rect[i])
- end
- else
- for i in 0...@_damage_rect.size
- @_damage_nb1t[i+4] = @_damage_nb1t[i]
- ay = @_damage_nb1t[i]
- ax = @_damage_x+i*17
- @_damage_sprite.bitmap.blt(ax, ay, @_damage_bmp, @_damage_rect[i])
- end
- end
- else
- unless @value == "Miss"
- # 系统默认描画字符串
- @_damage_sprite.bitmap.font.color.set(0, 0, 0)
- @_damage_sprite.bitmap.draw_text(-1, 27, 162, 36, @damage_string, 1)
- @_damage_sprite.bitmap.draw_text(+1, 27, 162, 36, @damage_string, 1)
- @_damage_sprite.bitmap.draw_text(-1, 29, 162, 36, @damage_string, 1)
- @_damage_sprite.bitmap.draw_text(+1, 29, 162, 36, @damage_string, 1)
- @_damage_sprite.bitmap.font.color.set(255, 255, 255)
- @_damage_sprite.bitmap.draw_text(0, 28, 162, 36, @damage_string, 1)
- else
- @_damage_sprite.bitmap.blt(45, @_damage_nb1t[1], @_damage_bmp, Rect.new(0, 0, 55, 20))
- end
-
- end
-
- if @_damage_duration > 0
- @_damage_duration -= 1
- #————————————————移动代码部分———————————————————
- if MAX_D-@XV <= @_damage_duration and @_damage_duration < MAX_D
- @_damage_nb1t[3] -= FMS
- elsif MAX_D-2*@XV <= @_damage_duration and @_damage_duration < MAX_D-@XV
- @_damage_nb1t[3] += FMS
- elsif MAX_D-2*@XV-XS/Num <= @_damage_duration and @_damage_duration < MAX_D-2*@XV
- @_damage_nb1t[3] -= Num
- elsif MAX_D-2*@XV-2*XS/Num <= @_damage_duration and @_damage_duration < MAX_D-2*@XV-XS/Num
- @_damage_nb1t[3] += Num
- elsif MAX_D-2*@XV-2*XS/Num-XT/Num <= @_damage_duration and @_damage_duration < MAX_D-2*@XV-2*XS/Num
- @_damage_nb1t[3] -= Num
- elsif MAX_D-2*@XV-2*XS/Num-2*XT/Num <= @_damage_duration and @_damage_duration < MAX_D-2*@XV-2*XS/Num-XT/Num
- @_damage_nb1t[3] += Num
- else
- @_damage_nb1t[3] += 0
- end
-
- if MAX_D-@XV <= @_damage_duration and @_damage_duration < MAX_D
- @_damage_nb1t[0] += FMS
- elsif MAX_D-@XV-XS/Num <= @_damage_duration and @_damage_duration < MAX_D-@XV
- @_damage_nb1t[0] -= Num
- elsif MAX_D-@XV-2*XS/Num <= @_damage_duration and @_damage_duration < MAX_D-@XV-XS/Num
- @_damage_nb1t[0] += Num
- elsif MAX_D-@XV-2*XS/Num-XT/Num <= @_damage_duration and @_damage_duration < MAX_D-@XV-2*XS/Num
- @_damage_nb1t[0] -= Num
- elsif MAX_D-@XV-2*XS/Num-2*XT/Num <= @_damage_duration and @_damage_duration < MAX_D-@XV-2*XS/Num-XT/Num
- @_damage_nb1t[0] += Num
- else
- @_damage_nb1t[0] -= 0
- end
- if MAX_D-@XR <= @_damage_duration and @_damage_duration < MAX_D
- @_damage_nb1t[1] -= FMS
- elsif MAX_D-@XR-@XV <= @_damage_duration and @_damage_duration < MAX_D-@XR
- @_damage_nb1t[1] += FMS
- elsif MAX_D-@XR-@XV-XS/Num <= @_damage_duration and @_damage_duration < MAX_D-@XR-@XV
- @_damage_nb1t[1] -= Num
- elsif MAX_D-@XR-@XV-2*XS/Num <= @_damage_duration and @_damage_duration < MAX_D-@XR-@XV-XS/Num
- @_damage_nb1t[1] += Num
- elsif MAX_D-@XR-@XV-2*XS/Num-XT/Num <= @_damage_duration and @_damage_duration < MAX_D-@XR-@XV-2*XS/Num
- @_damage_nb1t[1] -= Num
- elsif MAX_D-@XR-@XV-2*XS/Num-2*XT/Num <= @_damage_duration and @_damage_duration < MAX_D-@XR-@XV-2*XS/Num-XT/Num
- @_damage_nb1t[1] += Num
- else
- @_damage_nb1t[1] -= 0
- end
-
- if MAX_D-@XE <= @_damage_duration and @_damage_duration < MAX_D
- @_damage_nb1t[2] -= FMS
- elsif MAX_D-@XE-@XV <= @_damage_duration and @_damage_duration < MAX_D-@XE
- @_damage_nb1t[2] += FMS
- elsif MAX_D-@XE-@XV-XS/Num <= @_damage_duration and @_damage_duration < MAX_D-@XE-@XV
- @_damage_nb1t[2] -= Num
- elsif MAX_D-@XE-@XV-2*XS/Num <= @_damage_duration and @_damage_duration < MAX_D-@XE-@XV-XS/Num
- @_damage_nb1t[2] += Num
- elsif MAX_D-@XE-@XV-2*XS/Num-XT/Num <= @_damage_duration and @_damage_duration < MAX_D-@XE-@XV-2*XS/Num
- @_damage_nb1t[2] -= Num
- elsif MAX_D-@XE-@XV-2*XS/Num-2*XT/Num <= @_damage_duration and @_damage_duration < MAX_D-@XE-@XV-2*XS/Num-XT/Num
- @_damage_nb1t[2] += Num
- else
- @_damage_nb1t[2] += 0
- end
- #-----------------------------------------------------------------------------
- end
- @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
- if @_damage_duration == 0
- @_damage_sprite.bitmap.dispose
- @_damage_sprite.dispose
- if @_damage_bmp != nil
- @_damage_bmp.dispose
- end
- @_damage_show = false
- end
- end
- if @_animation != nil and (Graphics.frame_count % 2 == 0)
- @_animation_duration -= 1
- update_animation
- end
- if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
- update_loop_animation
- @_loop_animation_index += 1
- @_loop_animation_index %= @_loop_animation.frame_max
- end
- if @_blink
- @_blink_count = (@_blink_count + 1) % 32
- if @_blink_count < 16
- alpha = (16 - @_blink_count) * 6
- else
- alpha = (@_blink_count - 16) * 6
- end
- self.color.set(255, 255, 255, alpha)
- end
- @@_animations.clear
- end
- def dispose_damage
- if @_damage_sprite != nil
- @_damage_sprite.bitmap.dispose
- @_damage_sprite.dispose
- @_damage_sprite = nil
- @_damage_duration = 0
- end
- if @_damage_bmp != nil
- @_damage_bmp.dispose
- end
- @_damage_show = false
- end
- end
- end
- # 转载请注明出处————666RPG-盛尘恋-修改制作———————————————
复制代码 |
|