扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 101|回复: 0

[转载发布] 位图wave效果

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 127 天

    连续签到: 11 天

    [LV.7]常住居民III

    2341

    主题

    417

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    11285
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    14071

    灌水之王

    发表于 2024-4-20 01:47:52 | 显示全部楼层 |阅读模式
    直接代码
    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
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2025-4-4 02:18 , Processed in 0.132267 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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