赞 | 2 |
VIP | 0 |
好人卡 | 0 |
积分 | 10 |
经验 | 8174 |
最后登录 | 2024-3-9 |
在线时间 | 180 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 995
- 在线时间
- 180 小时
- 注册时间
- 2013-2-16
- 帖子
- 176
|
这是我自己写的任意显示伤害的脚本,用的时候只要初始化一个Damage对象就行了,
然后填参数(显示在屏幕上的x坐标,显示在屏幕上的y坐标,显示的数值,可选颜色,可选是否暴击)
移动轨迹是随机一个0-180度的斜抛运动+落地反弹,想改轨迹可以在update里面改,
该时间的话可以改update里面有关@t的判断
- module POP
- G = 0.25
- V = 1.5
- E = 1.0
- end
- class Damage < Sprite
- def initialize(x,y,num,color=Color.new(200,200,200),critical=false)
- super()
- width = num.to_s.size*18
- self.x = x
- self.y = y - 50
- @ori_y = y - 25
- self.bitmap = Bitmap.new(width,36)
- self.bitmap.font.size = 22
- self.bitmap.font.name = "Arial Black"
- if num.is_a?(Integer)
- if num > 0
- self.bitmap.font.color = color#Color.new(255,55,55)
- elsif num < 0
- self.bitmap.font.color = Color.new(55,255,55)
- else
- self.bitmap.font.color = Color.new(200,200,200)
- end
- else
- self.bitmap.font.name = "黑体"
- self.bitmap.font.color = Color.new(200,200,200)
- end
- self.bitmap.draw_text(2,14,width,22,num.to_s)
- if critical
- self.bitmap.font.size = 12
- self.bitmap.font.color = Color.new(255,255,55)
- self.bitmap.font.name = "黑体"
- self.bitmap.draw_text(2,4,width,12,"致命")
- end
- v = POP::V
- angle = ((rand(90)+45)/(180.to_f))*Math::PI
- @t = 0
- @e = POP::E
- @vx = v*Math.cos(angle)*0.6
- @vy = v*Math.sin(angle)
- Graphics.damages << self
- end
- def update
- @t += 1
- @vy -= POP::G#g
- self.x += @vx*@t
- self.y -= @vy*@t
- if self.y >= @ori_y
- @vy = @e*(@vy).abs
- @vx = @e*@vx
- self.y = @ori_y
- end
- if self.zoom_x < 1
- self.zoom_x += 0.1
- self.zoom_y += 0.1
- end
- if @t > 20
- self.opacity -= 40
- elsif @t >= 40
- self.dispose
- end
- end
- end
- module Graphics
- @damages = []
- class << self
- attr_accessor :damages
- alias damage_update update
- def update
- @damages.freshen
- damage_update
- for i in @damages
- next if i.disposed?
- i.update
- #return
- end
- end
- end
- end
复制代码 |
评分
-
查看全部评分
|