查看: 1652|回复: 1

[胡扯] 【摸鱼】downwell尾迹

[复制链接]
梦石
0
星屑
4623
在线时间
1207 小时
注册时间
2016-4-7
回帖
944

开拓者

发表于 2016-5-30 18:43:01 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 shitake 于 2016-5-30 18:44 编辑

偶然看到这篇帖子 就试着在RM里折腾了一下

效果:
test.gif
帖子中的范例:

果然以比较简直弱爆了
不知道为啥总是调不出他的那种效果。。。两个时间间隔都调试过。。。
还有就是RM里没有love2d的BlendMode这类东西。。。所以我是直接对bitmap动的手。。。然而重叠部分会特别鬼。
不过仔细看了下 downwell 的尾迹其实也有重叠。
还有最后那个酷炫的拉伸效果。。。。试了半天没成功ORZ

downwell原版:


范例工程:
Downwell.rar (1.28 MB, 下载次数: 67)

核心代码:[pre lang="ruby"]class Obj
  attr_accessor :bitmap,:x,:y
  def initialize(x, y, bitmap)
    @x = x
    @y = y
    @old_x = @x
    @old_y = @y
    @bitmap = bitmap
    @sprite = Sprite.new
    @sprite.bitmap = @bitmap
    @sprite.ox = @sprite.width / 2
    @sprite.oy = @sprite.height / 2
    @timer = Timer.new
    @timer.every(0.08) do
      trail = Trail.new(self.x, self.y, @sprite.z, @bitmap)
      size = rand(20) / 100.0
      trail.sprite.angle = (@y - @old_y != 0 ? Math.atan((@x - @old_x) / (@y - @old_y)) : 0) * 180 / Math::PI
      @old_x = @x
      @old_y = @y
      trail.sprite.zoom_x += size
      trail.sprite.zoom_y += size
    end
  end
  
  def map(old_value, old_min, old_max, new_min, new_max)
    new_min + (new_max - new_min) * (old_value - old_min) / (old_max - old_min)
  end
  
  def move(x, y)
    @x = x
    @y = y
    @sprite.x = x
    @sprite.y = y
  end
  
  def set_pos
    x, y = Input.mouse_pos
    return if x < 0 || y < 0
    move(x, y)
  end
  
  def dispose
    @sprite.dispose
    @end = true
  end
  
  def update
    return if @end
    set_pos
  end
  
end

class Trail
  attr_reader :sprite
  def initialize(x, y, z, bitmap)
    @sprite = Sprite.new
    @sprite.bitmap = subtract(bitmap)
    @sprite.ox = @sprite.width / 2
    @sprite.oy = @sprite.height / 2
    @sprite.x = x
    @sprite.y = y
    @sprite.z = z - 1
    @sprite.color = Color.new(255, 0, 0)
    @timer = Timer.new
    @timer.every(0.01) do
      self.sprite.opacity -= 5
      self.sprite.zoom_x -= 0.08
      self.sprite.zoom_y -= 0.08
    end
    @timer.after(0.12){self.dispose}
  end
  
  def subtract(src_bitmap)
    last = 0
    bitmap = src_bitmap.clone
    bitmap.width.times do |i|
      if i - last == 4
        bitmap.clear_rect(0, i, bitmap.width, 2)
        last = i
      end
    end
    bitmap
  end
  
  def dispose
    @timer.dispose
    @sprite.dispose
  end
  
end
[/pre]


里面的 Timer 在这里--› http://blog.shitake.me/?p=24

如果是要实现downwell 完全一样的效果 实际上修改一下上边的代码 删掉缩放和旋转,增大尾迹生成间隔就好。
test.gif

另外,附件里面有一个鼠标脚本 来自 wxruby。

评分

参与人数 1星屑 +66 收起 理由
MeowSnow + 66 666

查看全部评分

附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
梦石
0
星屑
60
在线时间
62 小时
注册时间
2016-5-2
回帖
173
发表于 2016-5-31 21:20:01 | 显示全部楼层
这个应该发技术区?

范例游戏看起来好燃,看工程,好像做个切水果是可以的吧...

点评

噗 貌似可以 大概 以及downwell这个游戏本来就很燃  发表于 2016-5-31 23:18
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部