设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2298|回复: 4
打印 上一主题 下一主题

[胡扯] 随手写了一个粒子特效

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1934
在线时间
403 小时
注册时间
2015-8-30
帖子
395
跳转到指定楼层
1
发表于 2019-2-8 21:43:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x



RUBY 代码复制
  1. class Particle < Sprite
  2.   BITMAP = Bitmap.new(64, 64)
  3.   64.times do |x|
  4.     64.times do |y|
  5.       if (x - 32) ** 2 + (y - 32) ** 2 <= 128
  6.         BITMAP.set_pixel(x, y, Color.new(255, 0, 0))
  7.       end
  8.     end
  9.   end
  10.   32.times { BITMAP.blur }
  11.  
  12.   VIEWPORT = Viewport.new(-128, -128, 1280, 1024)
  13.  
  14.   @@z = 1 << 30
  15.  
  16.   def initialize(x, y)
  17.     super(VIEWPORT)
  18.     self.bitmap = BITMAP.clone
  19.     self.ox = 8
  20.     self.oy = 8
  21.     self.x = x + 128
  22.     self.y = y + 128
  23.     self.opacity = 0
  24.     self.z = (@@z -= rand(2))
  25.     @frame_count = 0
  26.     @velocity = rand / 2
  27.     @acceleraction = rand / 2000
  28.     @float_y = self.y
  29.     @fade_in_rate = rand(10) + 15
  30.     @fade_out_rate = rand(5) + 5
  31.     @zoom_rate = rand / 400
  32.     @life = rand(50) + 150
  33.     @tone_change_rate = rand / 2 + 0.5
  34.     @float_tone = 0
  35.   end
  36.  
  37.   def update
  38.     @float_y -= (@velocity += @acceleraction)
  39.     self.y = @float_y
  40.     self.opacity += @fade_in_rate if opacity < 255 && @frame_count < @life
  41.     self.opacity -= @fade_out_rate if @frame_count >= @life
  42.     self.zoom_x += @zoom_rate
  43.     self.zoom_y += @zoom_rate
  44.     bitmap.hue_change(3) if @frame_count % 10 == 0
  45.     @float_tone += @tone_change_rate
  46.     tone.red = @float_tone
  47.     tone.green = @float_tone
  48.     tone.blue = @float_tone
  49.     if opacity <= 0
  50.       bitmap.dispose
  51.       dispose
  52.     end
  53.     @frame_count += 1
  54.   end
  55. end
  56.  
  57. class Scene
  58.   def initialize
  59.     Graphics.resize_screen(1024, 768)
  60.     @x = Graphics.width / 2
  61.     @y = Graphics.height / 2
  62.     @particles = []
  63.   end
  64.  
  65.   def set_position(x, y)
  66.     @x, @y = x, y
  67.   end
  68.  
  69.   def update
  70.     update_basic
  71.     update_position
  72.     update_particles
  73.   end
  74.  
  75.   def update_basic
  76.     Mouse.update
  77.     Graphics.update
  78.   end
  79.  
  80.   def update_particles
  81.     @particles.each(&:update)
  82.     @particles.delete_if(&:disposed?)
  83.     360.times do |angle|
  84.       if rand(120) == 0
  85.         radian = angle * Math::PI / 180
  86.         radius = rand(4) + 62
  87.         x = @x + Math.cos(radian) * radius
  88.         y = @y + Math.sin(radian) * radius
  89.         @particles.push(Particle.new(x, y))
  90.       end
  91.     end
  92.   end
  93.  
  94.   def update_position
  95.     set_position(Mouse.x, Mouse.y) if Mouse.press?
  96.   end
  97. end
  98.  
  99. scene = Scene.new
  100. loop { scene.update }

写得太差劲了,看上去没什么感觉
使用RGD
小仙女一枚~

Lv2.观梦者

梦石
0
星屑
400
在线时间
28 小时
注册时间
2019-1-1
帖子
3
2
发表于 2019-2-9 17:09:14 | 只看该作者
谢谢大佬!拿去用顺便膜一下大佬
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2744
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

3
发表于 2019-2-9 18:32:51 | 只看该作者
用RGSS实现真的不会卡吗- -

点评

……错了,帧率在30左右  发表于 2019-2-9 20:31
帧率在50左右  发表于 2019-2-9 20:08
(Created by @喵kano)


施工现场:hotege.github.io
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 12:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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