查看: 57|回复: 0

[转载发布] 位图wave效果

[复制链接]
  • TA的每日心情
    开心
    昨天 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月八日(秋) | 显示全部楼层 |阅读模式
    直接代码
    RUBY 代码
    [code]class Bitmap
      def to_int
        self.object_id
      end

      # src_bitmap    源位图,必须与自身位图同尺寸
      # wave_length  【无符号整型】   波长对应一个Math::PI
      # wave_amp     【无符号整型】   波高
      # wave_speed   【基本整型】     影响波动快慢
      # wave_phase   【基本整型】     波动起始的角度值(一般0...360)
      def wave(src_bitmap, wave_length, wave_amp, wave_speed = 1, wave_phase = 0)
        @src_bitmap = src_bitmap
        @wave_length = wave_length
        @wave_amp = wave_amp
        @wave_speed = wave_speed   
        @wave_phase = wave_phase
        @waving = (wave_length * wave_amp * wave_speed != 0)

        # 说明用变量
        @wave_step = Math::PI / wave_length
        @wave_dcos = Math.cos(@wave_step) * 2
      end

      # 说明用方法: WaveH 的RGSS 实现
      def wave_update
        returnunless@waving
        self.clear

        rad = @wave_phase * Math::A2R
        s0 = Math.sin(rad)
        s1 = Math.sin(rad + @wave_step)
        s2 = 0

        src_rect = Rect.new(0, 0, @src_bitmap.width, 1)
        self.blt((s0 * @wave_amp).round, 0, @src_bitmap, src_rect)

        src_rect.y += 1
        self.blt((s1 * @wave_amp).round, 1, @src_bitmap, src_rect)

        2.upto(self.height - 1)do |y|
          s2 = @wave_dcos * s1 - s0
          s0, s1 = s1, s2

          src_rect.y += 1
          self.blt((s2 * @wave_amp).round, y, @src_bitmap, src_rect)
        end

        @wave_phase = (@wave_phase + @wave_speed) % 360
      end


      dll = "Wave.dll"
      WaveH = Win32API.new(dll, 'bitmapWaveH', 'LLLLLL', 'V')
      def wave_update_dllH
        returnunless@waving
        @wave_phase = WaveH.call(self, @src_bitmap, @wave_phase,
          @wave_length, @wave_amp, @wave_speed)
      end

      # 适用于250 * 250大小以下的位图
      WaveV = Win32API.new(dll, 'bitmapWaveV', 'LLLLLL', 'L')
      def wave_update_dllV
        returnunless@waving
        @wave_phase = WaveV.call(self, @src_bitmap, @wave_phase,
          @wave_length, @wave_amp, @wave_speed)
      end

      WaveV_line4 = Win32API.new(dll, 'bitmapWaveV_line4', 'LLLLLL', 'L')
      def wave_update_dllV_line4
        returnunless@waving
        @wave_phase = WaveV_line4.call(self, @src_bitmap, @wave_phase,
          @wave_length, @wave_amp, @wave_speed)
      end

      WaveHV = Win32API.new(dll, 'bitmapWaveHV', 'LLLLLL', 'L')
      def wave_update_dllHV
        returnunless@waving
        @wave_phase = WaveHV.call(self, @src_bitmap, @wave_phase,
          @wave_length, @wave_amp, @wave_speed)
      end
    end



    src = Bitmap.new("temp2.jpeg")
    #src.fill_rect(src.rect, Color.new(0, 255, 255))

    sprite = Sprite.new
    sprite.bitmap = Bitmap.new(src.width, src.height)
    sprite.bitmap.wave(src, 50, 10, 2, 0)
    sprite.x = 320
    sprite.y = 240
    sprite.ox = src.width / 2
    sprite.oy = src.height / 2


    str = "Bitmap(#{src.width} * #{src.height})\n"
    count, t = 0, Time.now
    loopdo
      sprite.bitmap.wave_update_dllH
      breakifTime.now - t >= 1.0
      count += 1
    end
    str = 1.0
      count += 1
    end
    str = 1.0
      count += 1
    end
    str = 1.0
      count += 1
    end
    str

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-11 20:24 , Processed in 0.047645 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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