设为首页收藏本站

仙剑之十里坡

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3192|回复: 3
打印 上一主题 下一主题

在RM中播放AVI文件

[复制链接]

160

主题

6

听众

1万

积分

超级版主

蜀山剑侠银行行长

超级版主

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 859 天

    [LV.10]以坛为家III

    精华
    3
    积分
    13202
    历练
    7
    声望
    24
    人气
    2364

    金融巨子 润泽万物 坚若磐石

    单身中……
    帮我摆脱单身吧
    跳转到指定楼层
    1
    发表于 2010-8-16 16:00:54 |只看该作者 |倒序浏览
    本帖最后由 最爱南宫煌 于 2010-9-3 19:50 编辑
    1. #==============================================================================
    2. # ☆★☆ AVI播放器 ☆★☆
    3. #------------------------------------------------------------------------------
    4. # - FantasyDR
    5. # - 2006.3.12
    6. #------------------------------------------------------------------------------
    7. # MSN: FantasyDR_SJL@hotmail.com
    8. #------------------------------------------------------------------------------
    9. # Note:
    10. #  
    11. #   1.在下方 PROJECT_NAME = 后面填写你的游戏工程名.
    12. #
    13. #   2.在游戏中,调用脚本事件播放你的视频文件,如果一行写不下可以在逗号后换行.
    14. #
    15. #   $MP.play(movie_name, movie_length,
    16. #            skip, fullscr,
    17. #            x, y, width, height, loop)
    18. #
    19. # 参数说明:
    20. #
    21. #     movie_name   : 视频文件名(*.avi),必须
    22. #     movie_length : 电影时间,单位是秒,必须
    23. #             skip : 是否可以按A键跳过,true/false,默认是true
    24. #          fullscr : 是否强制为全屏幕播放,true/false,默认是false
    25. #              x,y : 视频播放的左上角坐标,默认是0,0
    26. #     width,height : 视频的宽度,可以任意.默认是640,480
    27. #             loop : 循环播放,true/false,默认是true
    28. #
    29. # 例如播放begin.avi,时间70秒,禁止跳过,强制全屏,范围(是0,0)-(640,480),循环播放
    30. #        $MP.play("begin.avi",70,false,true)
    31. #==============================================================================

    32. # ★★★请先这里填写游戏的工程名★★★

    33. PROJECT_NAME = "你的工程名"

    34. #==============================================================================
    35. # ■ Win32API
    36. #------------------------------------------------------------------------------
    37. #  需要用到的API
    38. #==============================================================================

    39. # 切换到全屏延时
    40. SWITCH_DELAY = 0.1

    41. # API使用的一些常数
    42. WS_EX_TOPMOST = 0x8
    43. WS_EX_TOOLWINDOW= 0x80
    44. WS_VISIBLE = 0x10000000
    45. WS_POPUP = 0x80000000
    46. GWL_HINSTANCE = (-6)
    47. WM_CLOSE = 0x10
    48. WS_CHILD = 0x40000000
    49. WS_NONE = 0x16000000
    50. CP_ACP = 0
    51. CP_UTF8 = 65001

    52. # 字符编码转换API
    53. $MP_m2w = Win32API.new('kernel32', 'MultiByteToWideChar', '%w(i,l,p,i,p,i)', 'i')
    54. $MP_w2m = Win32API.new('kernel32', 'WideCharToMultiByte', '%w(i,l,p,i,p,i,p,p)', 'i')
    55.    
    56. # 按键API
    57. $MP_keybd = Win32API.new('user32', 'keybd_event', '%w(i,i,l,l)', 'v')

    58. # 视频播放API
    59. $MP_mciSendString = Win32API.new('winmm','mciSendString','%w(p,p,l,l)','V')

    60. # 锁定窗口
    61. # hWnd,ifEnable
    62. $MP_EnableWindow = Win32API.new('user32','EnableWindow','%w(l,l)','L')

    63. # 激活窗口
    64. # hWnd
    65. $MP_SetActiveWindow = Win32API.new('user32','SetActiveWindow','%w(l)','L')

    66. # 当前活动窗口
    67. $MP_GetActiveWindow = Win32API.new('user32','GetActiveWindow','%w()','L')

    68. # hWnd,wMsg,wParam,lParam
    69. $MP_PostMessage = Win32API.new('user32','PostMessage','%w(l,l,l,p)','L')

    70. # 获取当前窗口句柄
    71. $MP_FindWindowEX = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L')

    72. # 获取屏幕坐标
    73. $MP_ClientToScreen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

    74. # 获取hInt
    75. $MP_GetWindowLong= Win32API.new('user32','GetWindowLong','%w(l,l)','L')

    76. # 获取类名
    77. # hWnd,lpClassName,maxCount
    78. $MP_GetClassName= Win32API.new('user32','GetClassName','%w(l,p,l)','L')

    79. # 建立窗体
    80. # ExStyle,ClassName,WindowName,
    81. # style,x,y,width,height
    82. # 0,0,hInstance,0
    83. $MP_CreateWindowEX = Win32API.new('user32','CreateWindowEx','%w(l,p,p,l,l,l,l,l,l,l,l,p)','L')

    84. #==============================================================================
    85. # ■ MoviePlayer
    86. #------------------------------------------------------------------------------
    87. #  处理视频播放画面的类。
    88. #==============================================================================

    89. class MoviePlayer
    90.   #--------------------------------------------------------------------------
    91.   # ● 初始化
    92.   #     project_name : 工程名称
    93.   #--------------------------------------------------------------------------
    94.   def initialize(project_name = PROJECT_NAME)
    95.     @sys_timer=SystemTimer.new()
    96.     buffer = "\0\0" * project_name.size
    97.     @project_name = "\0" * project_name.size
    98.    
    99.     $MP_m2w.call(CP_UTF8, 0, project_name, -1, buffer, project_name.size)
    100.     $MP_w2m.call(CP_ACP,0,buffer,-1,@project_name,project_name.size,0,0)
    101.    
    102.     @hWnd = $MP_FindWindowEX.call(0,0,nil,@project_name)
    103.     @hInt = $MP_GetWindowLong.call(@hWnd,GWL_HINSTANCE)
    104.     @class_name = " " * 256
    105.     $MP_GetClassName.call(@hWnd,@class_name,256)
    106.   end
    107.   #--------------------------------------------------------------------------
    108.   # ● 是否已经全屏幕
    109.   #--------------------------------------------------------------------------
    110.   def is_full?
    111.     # 播放起始坐标
    112.     point = [0, 0].pack('ll')
    113.     if $MP_ClientToScreen.call(@hWnd, point) == 0
    114.       return false
    115.     end
    116.     x, y = point.unpack('ll')
    117.     if x == 0 and y == 0
    118.       return true
    119.     else
    120.       return false
    121.     end
    122.   end
    123.   #--------------------------------------------------------------------------
    124.   # ● 切换全屏
    125.   #--------------------------------------------------------------------------
    126.   def switch_full
    127.     $MP_keybd.call (0xA4, 0, 0, 0)
    128.     $MP_keybd.call (13, 0, 0, 0)
    129.     $MP_keybd.call (13, 0, 2, 0)
    130.     $MP_keybd.call (0xA4, 0, 2, 0)
    131.     sleep(SWITCH_DELAY)
    132.     for i in 1..3
    133.       Graphics.update
    134.     end
    135.   end
    136.   #--------------------------------------------------------------------------
    137.   # ● 播放电影
    138.   #     movie_name : 视频文件名(*.avi)
    139.   #     movie_length : 电影时间,单位是秒
    140.   #     skip : 是否可以按键跳过
    141.   #     fullscr : 是否强制为全屏幕播放
    142.   #     x,y,width,height: 播放的位置以及宽度
    143.   #     loop : 循环播放
    144.   #--------------------------------------------------------------------------
    145.   def play(movie_name,movie_length,
    146.            skip = true,fullscr = false,
    147.            x = 0,y = 0,width = 640,height = 480,loop = true)
    148.     # 数据不合法则退出
    149.     return true if movie_name == nil or movie_length <= 0
    150.     # 文件不存在
    151.     return true unless FileTest.exist?(movie_name)
    152.    
    153.     # 窗口宽度
    154.     width -= (x + width)- 640 if (x + width) > 640
    155.     height -= (y + height)- 480 if (y + height) > 480
    156.    
    157.     if fullscr and !is_full?
    158.       self.switch_full
    159.     end
    160.    
    161.     fullscr = self.is_full?
    162.    
    163.     # 播放起始坐标
    164.     point = [x, y].pack('ll')
    165.     if $MP_ClientToScreen.call(@hWnd, point) == 0
    166.       return true
    167.     end
    168.     x, y = point.unpack('ll')
    169.     return true  if (x + width) < 0 or (y+height) < 0
    170.    
    171.     if fullscr
    172.       wnd = $MP_CreateWindowEX.call(WS_EX_TOPMOST,@class_name,@project_name,
    173.                                     WS_VISIBLE | WS_POPUP,x,y,width,height,
    174.                                     0,0,@hInt,0)
    175.     else
    176.       wnd = $MP_CreateWindowEX.call(WS_EX_TOOLWINDOW,@class_name,@project_name,
    177.                                     WS_VISIBLE | WS_POPUP,x,y,width,height,
    178.                                     0,0,@hInt,0)
    179.     end                              
    180.     # 窗体建立失败
    181.     return true if wnd == 0
    182.    
    183.     # 屏蔽原窗体
    184.     $MP_EnableWindow.call(@hWnd,0)
    185.    
    186.     $MP_mciSendString.call("open \"" + movie_name + "\"" +
    187.                            " alias FILE style 1073741824 parent " +\
    188.                             wnd.to_s,0,0,0)
    189.     if loop
    190.       $MP_mciSendString.call("play FILE repeat window",0,0,0)
    191.     else
    192.       $MP_mciSendString.call("play FILE window",0,0,0)
    193.     end
    194.    
    195.     @sys_timer.clear()
    196.     step = 0.1
    197.     begin
    198.       loop do
    199.         # 如果在窗口模式
    200.         unless fullscr
    201.           # 变成全屏
    202.           if self.is_full?
    203.             break
    204.           else
    205.             Graphics.update
    206.           end
    207.         end
    208.         #sleep(step)
    209.         if skip
    210.           Input.update
    211.           break if Input.trigger?(Input::B)
    212.         end
    213.         if @sys_timer.now_s >= movie_length
    214.           break
    215.         end
    216.         if $MP_GetActiveWindow.call() != wnd
    217.           $MP_SetActiveWindow.call(wnd)
    218.         end
    219.       end
    220.       Graphics.update
    221.       # 关闭当前窗体
    222.       $MP_PostMessage.call(wnd,WM_CLOSE,0,0)
    223.       $MP_mciSendString.call("close FILE",0,0,0)
    224.       $MP_EnableWindow.call(@hWnd,1)
    225.       $MP_SetActiveWindow.call(@hWnd)
    226.       return true
    227.     rescue Hangup
    228.       retry
    229.     end
    230.   end
    231. end

    232. $MP = MoviePlayer.new
    233. #==========================================================
    234. # 本脚本转载自www.palslp.com
    235. #==========================================================
    复制代码
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    转播转播0 分享淘帖0 分享分享0 收藏收藏0

    160

    主题

    6

    听众

    1万

    积分

    超级版主

    蜀山剑侠银行行长

    超级版主

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 859 天

    [LV.10]以坛为家III

    精华
    3
    积分
    13202
    历练
    7
    声望
    24
    人气
    2364

    金融巨子 润泽万物 坚若磐石

    单身中……
    帮我摆脱单身吧
    2
    发表于 2010-8-16 16:04:38 |只看该作者
    这个和黑猫的RMFLASH差不多,用法都写在上面了,需要一个数据库文件screenshot.dll,这个在黑猫个RMFLASH的脚本帖附件里有,他在那里收钱,我就不抢他生意了,记得要把数据库文件放在游戏文件夹,再建一个Video文件夹放视频。
    于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。残阳阳兮是羊羊,吾乃最爱南宫煌。”
    回复

    使用道具 举报

    160

    主题

    6

    听众

    1万

    积分

    超级版主

    蜀山剑侠银行行长

    超级版主

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 859 天

    [LV.10]以坛为家III

    精华
    3
    积分
    13202
    历练
    7
    声望
    24
    人气
    2364

    金融巨子 润泽万物 坚若磐石

    单身中……
    帮我摆脱单身吧
    3
    发表于 2010-8-16 16:43:59 |只看该作者
    附上黑猫播放SWF格式文件脚本地址:http://www.palslp.com/bbs/viewth ... &extra=page%3D2
    于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。残阳阳兮是羊羊,吾乃最爱南宫煌。”
    回复

    使用道具 举报

    827

    主题

    7

    听众

    1万

    积分

    御剑江湖

    秘密

    会员等级: 8

  • TA的每日心情
    无聊
    2 小时前
  • 签到天数: 2891 天

    [LV.Master]伴坛终老

    精华
    0
    积分
    13017
    历练
    0
    声望
    411
    人气
    375

    转帖之王 匠心独运

    单身中……
    帮我摆脱单身吧
    4
    发表于 2010-8-17 20:51:54 |只看该作者
    我貌似有点厌恶脚本,但是不用不行~
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    手机版|Archiver|仙剑之十里坡 ( 苏ICP备11022766号 )  

    GMT+8, 2024-5-4 20:59 , Processed in 0.309314 second(s), 40 queries .

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部