加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
class Particle < Sprite BITMAP = Bitmap.new(64, 64) 64.times do |x| 64.times do |y| if (x - 32) ** 2 + (y - 32) ** 2 <= 128 BITMAP.set_pixel(x, y, Color.new(255, 0, 0)) end end end 32.times { BITMAP.blur } VIEWPORT = Viewport.new(-128, -128, 1280, 1024) @@z = 1 << 30 def initialize(x, y) super(VIEWPORT) self.bitmap = BITMAP.clone self.ox = 8 self.oy = 8 self.x = x + 128 self.y = y + 128 self.opacity = 0 self.z = (@@z -= rand(2)) @frame_count = 0 @velocity = rand / 2 @acceleraction = rand / 2000 @float_y = self.y @fade_in_rate = rand(10) + 15 @fade_out_rate = rand(5) + 5 @zoom_rate = rand / 400 @life = rand(50) + 150 @tone_change_rate = rand / 2 + 0.5 @float_tone = 0 end def update @float_y -= (@velocity += @acceleraction) self.y = @float_y self.opacity += @fade_in_rate if opacity < 255 && @frame_count < @life self.opacity -= @fade_out_rate if @frame_count >= @life self.zoom_x += @zoom_rate self.zoom_y += @zoom_rate bitmap.hue_change(3) if @frame_count % 10 == 0 @float_tone += @tone_change_rate tone.red = @float_tone tone.green = @float_tone tone.blue = @float_tone if opacity <= 0 bitmap.dispose dispose end @frame_count += 1 end end class Scene def initialize Graphics.resize_screen(1024, 768) @x = Graphics.width / 2 @y = Graphics.height / 2 @particles = [] end def set_position(x, y) @x, @y = x, y end def update update_basic update_position update_particles end def update_basic Mouse.update Graphics.update end def update_particles @particles.each(&:update) @particles.delete_if(&:disposed?) 360.times do |angle| if rand(120) == 0 radian = angle * Math::PI / 180 radius = rand(4) + 62 x = @x + Math.cos(radian) * radius y = @y + Math.sin(radian) * radius @particles.push(Particle.new(x, y)) end end end def update_position set_position(Mouse.x, Mouse.y) if Mouse.press? end end scene = Scene.new loop { scene.update }
class Particle < Sprite
BITMAP = Bitmap.new(64, 64)
64.times do |x|
64.times do |y|
if (x - 32) ** 2 + (y - 32) ** 2 <= 128
BITMAP.set_pixel(x, y, Color.new(255, 0, 0))
end
end
end
32.times { BITMAP.blur }
VIEWPORT = Viewport.new(-128, -128, 1280, 1024)
@@z = 1 << 30
def initialize(x, y)
super(VIEWPORT)
self.bitmap = BITMAP.clone
self.ox = 8
self.oy = 8
self.x = x + 128
self.y = y + 128
self.opacity = 0
self.z = (@@z -= rand(2))
@frame_count = 0
@velocity = rand / 2
@acceleraction = rand / 2000
@float_y = self.y
@fade_in_rate = rand(10) + 15
@fade_out_rate = rand(5) + 5
@zoom_rate = rand / 400
@life = rand(50) + 150
@tone_change_rate = rand / 2 + 0.5
@float_tone = 0
end
def update
@float_y -= (@velocity += @acceleraction)
self.y = @float_y
self.opacity += @fade_in_rate if opacity < 255 && @frame_count < @life
self.opacity -= @fade_out_rate if @frame_count >= @life
self.zoom_x += @zoom_rate
self.zoom_y += @zoom_rate
bitmap.hue_change(3) if @frame_count % 10 == 0
@float_tone += @tone_change_rate
tone.red = @float_tone
tone.green = @float_tone
tone.blue = @float_tone
if opacity <= 0
bitmap.dispose
dispose
end
@frame_count += 1
end
end
class Scene
def initialize
Graphics.resize_screen(1024, 768)
@x = Graphics.width / 2
@y = Graphics.height / 2
@particles = []
end
def set_position(x, y)
@x, @y = x, y
end
def update
update_basic
update_position
update_particles
end
def update_basic
Mouse.update
Graphics.update
end
def update_particles
@particles.each(&:update)
@particles.delete_if(&:disposed?)
360.times do |angle|
if rand(120) == 0
radian = angle * Math::PI / 180
radius = rand(4) + 62
x = @x + Math.cos(radian) * radius
y = @y + Math.sin(radian) * radius
@particles.push(Particle.new(x, y))
end
end
end
def update_position
set_position(Mouse.x, Mouse.y) if Mouse.press?
end
end
scene = Scene.new
loop { scene.update }
写得太差劲了,看上去没什么感觉
使用RGD |