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

Project1

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

[已经解决] 用了AVI播放器,有点冲突

[复制链接]

Lv2.观梦者

梦石
0
星屑
371
在线时间
120 小时
注册时间
2012-11-20
帖子
64
跳转到指定楼层
1
发表于 2020-8-28 08:51:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. #==============================================================================
  2. # ☆★☆ AVI播放器 ☆★☆
  3. #------------------------------------------------------------------------------
  4. # - FantasyDR
  5. # - 2006.3.12
  6. #------------------------------------------------------------------------------
  7. #------------------------------------------------------------------------------
  8. # Note:
  9. #  
  10. #   1.在下方 PROJECT_NAME = 后面填写你的游戏工程名.
  11. #
  12. #   2.在游戏中,调用脚本事件播放你的视频文件,如果一行写不下可以在逗号后换行.
  13. #
  14. #   $MP.play(movie_name, movie_length,
  15. #            skip, fullscr,
  16. #            x, y, width, height, loop)
  17. #
  18. # 参数说明:
  19. #
  20. #     movie_name   : 视频文件名(*.avi),必须
  21. #     movie_length : 电影时间,单位是秒,必须
  22. #             skip : 是否可以按A键跳过,true/false,默认是true
  23. #          fullscr : 是否强制为全屏幕播放,true/false,默认是false
  24. #              x,y : 视频播放的左上角坐标,默认是0,0
  25. #     width,height : 视频的宽度,可以任意.默认是640,480
  26. #             loop : 循环播放,true/false,默认是true
  27. #
  28. # 例如播放logo.avi,时间13秒,禁止跳过,强制全屏,范围(是0,0)-(640,480),循环播放
  29. #        $MP.play("logo.avi",13,false,true)
  30. #==============================================================================
  31.  
  32. # ★★★请先这里填写游戏的工程名★★★
  33.  
  34. PROJECT_NAME = "AVI播放器"
  35.  
  36. #==============================================================================
  37. # ■ Win32API
  38. #------------------------------------------------------------------------------
  39. #  需要用到的API
  40. #==============================================================================
  41.  
  42. # 切换到全屏延时
  43. SWITCH_DELAY = 0.1
  44.  
  45. # API使用的一些常数
  46. WS_EX_TOPMOST = 0x8
  47. WS_EX_TOOLWINDOW= 0x80
  48. WS_VISIBLE = 0x10000000
  49. WS_POPUP = 0x80000000
  50. GWL_HINSTANCE = (-6)
  51. WM_CLOSE = 0x10
  52. WS_CHILD = 0x40000000
  53. WS_NONE = 0x16000000
  54. CP_ACP = 0
  55. CP_UTF8 = 65001
  56.  
  57. # 字符编码转换API
  58. $MP_m2w = Win32API.new('kernel32', 'MultiByteToWideChar', '%w(i,l,p,i,p,i)', 'i')
  59. $MP_w2m = Win32API.new('kernel32', 'WideCharToMultiByte', '%w(i,l,p,i,p,i,p,p)', 'i')
  60.  
  61. # 按键API
  62. $MP_keybd = Win32API.new('user32', 'keybd_event', '%w(i,i,l,l)', 'v')
  63.  
  64. # 视频播放API
  65. $MP_mciSendString = Win32API.new('winmm','mciSendString','%w(p,p,l,l)','V')
  66.  
  67. # 锁定窗口
  68. # hWnd,ifEnable
  69. $MP_EnableWindow = Win32API.new('user32','EnableWindow','%w(l,l)','L')
  70.  
  71. # 激活窗口
  72. # hWnd
  73. $MP_SetActiveWindow = Win32API.new('user32','SetActiveWindow','%w(l)','L')
  74.  
  75. # 当前活动窗口
  76. $MP_GetActiveWindow = Win32API.new('user32','GetActiveWindow','%w()','L')
  77.  
  78. # hWnd,wMsg,wParam,lParam
  79. $MP_PostMessage = Win32API.new('user32','PostMessage','%w(l,l,l,p)','L')
  80.  
  81. # 获取当前窗口句柄
  82. $MP_FindWindowEX = Win32API.new('user32','FindWindowEx','%w(l,l,p,p)','L')
  83.  
  84. # 获取屏幕坐标
  85. $MP_ClientToScreen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')
  86.  
  87. # 获取hInt
  88. $MP_GetWindowLong= Win32API.new('user32','GetWindowLong','%w(l,l)','L')
  89.  
  90. # 获取类名
  91. # hWnd,lpClassName,maxCount
  92. $MP_GetClassName= Win32API.new('user32','GetClassName','%w(l,p,l)','L')
  93.  
  94. # 建立窗体
  95. # ExStyle,ClassName,WindowName,
  96. # style,x,y,width,height
  97. # 0,0,hInstance,0
  98. $MP_CreateWindowEX = Win32API.new('user32','CreateWindowEx','%w(l,p,p,l,l,l,l,l,l,l,l,p)','L')
  99.  
  100. #==============================================================================
  101. # ■ MoviePlayer
  102. #------------------------------------------------------------------------------
  103. #  处理视频播放画面的类。
  104. #==============================================================================
  105.  
  106. class MoviePlayer
  107.   #--------------------------------------------------------------------------
  108.   # ● 初始化
  109.   #     project_name : 工程名称
  110.   #--------------------------------------------------------------------------
  111.   def initialize(project_name = PROJECT_NAME)
  112.     @sys_timer=SystemTimer.new()
  113.     buffer = "\0\0" * project_name.size
  114.     @project_name = "\0" * project_name.size
  115.  
  116.     $MP_m2w.call(CP_UTF8, 0, project_name, -1, buffer, project_name.size)
  117.     $MP_w2m.call(CP_ACP,0,buffer,-1,@project_name,project_name.size,0,0)
  118.  
  119.     @hWnd = $MP_FindWindowEX.call(0,0,nil,@project_name)
  120.     @hInt = $MP_GetWindowLong.call(@hWnd,GWL_HINSTANCE)
  121.     @class_name = " " * 256
  122.     $MP_GetClassName.call(@hWnd,@class_name,256)
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 是否已经全屏幕
  126.   #--------------------------------------------------------------------------
  127.   def is_full?
  128.     # 播放起始坐标
  129.     point = [0, 0].pack('ll')
  130.     if $MP_ClientToScreen.call(@hWnd, point) == 0
  131.       return false
  132.     end
  133.     x, y = point.unpack('ll')
  134.     if x == 0 and y == 0
  135.       return true
  136.     else
  137.       return false
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 切换全屏
  142.   #--------------------------------------------------------------------------
  143.   def switch_full
  144.     $MP_keybd.call (0xA4, 0, 0, 0)
  145.     $MP_keybd.call (13, 0, 0, 0)
  146.     $MP_keybd.call (13, 0, 2, 0)
  147.     $MP_keybd.call (0xA4, 0, 2, 0)
  148.     sleep(SWITCH_DELAY)
  149.     for i in 1..3
  150.       Graphics.update
  151.     end
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 播放电影
  155.   #     movie_name : 视频文件名(*.avi)
  156.   #     movie_length : 电影时间,单位是秒
  157.   #     skip : 是否可以按键跳过
  158.   #     fullscr : 是否强制为全屏幕播放
  159.   #     x,y,width,height: 播放的位置以及宽度
  160.   #     loop : 循环播放
  161.   #--------------------------------------------------------------------------
  162.   def play(movie_name,movie_length,
  163.            skip = true,fullscr = false,
  164.            x = 0,y = 0,width = 640,height = 480,loop = true)
  165.     # 数据不合法则退出
  166.     return true if movie_name == nil or movie_length <= 0
  167.     # 文件不存在
  168.     return true unless FileTest.exist?(movie_name)
  169.  
  170.     # 窗口宽度
  171.     width -= (x + width)- 640 if (x + width) > 640
  172.     height -= (y + height)- 480 if (y + height) > 480
  173.  
  174.     if fullscr and !is_full?
  175.       self.switch_full
  176.     end
  177.  
  178.     fullscr = self.is_full?
  179.  
  180.     # 播放起始坐标
  181.     point = [x, y].pack('ll')
  182.     if $MP_ClientToScreen.call(@hWnd, point) == 0
  183.       return true
  184.     end
  185.     x, y = point.unpack('ll')
  186.     return true  if (x + width) < 0 or (y+height) < 0
  187.  
  188.     if fullscr
  189.       wnd = $MP_CreateWindowEX.call(WS_EX_TOPMOST,@class_name,@project_name,
  190.                                     WS_VISIBLE | WS_POPUP,x,y,width,height,
  191.                                     0,0,@hInt,0)
  192.     else
  193.       wnd = $MP_CreateWindowEX.call(WS_EX_TOOLWINDOW,@class_name,@project_name,
  194.                                     WS_VISIBLE | WS_POPUP,x,y,width,height,
  195.                                     0,0,@hInt,0)
  196.     end                              
  197.     # 窗体建立失败
  198.     return true if wnd == 0
  199.  
  200.     # 屏蔽原窗体
  201.     $MP_EnableWindow.call(@hWnd,0)
  202.  
  203.     $MP_mciSendString.call("open \"" + movie_name + "\"" +
  204.                            " alias FILE style 1073741824 parent " +\
  205.                             wnd.to_s,0,0,0)
  206.     if loop
  207.       $MP_mciSendString.call("play FILE repeat window",0,0,0)
  208.     else
  209.       $MP_mciSendString.call("play FILE window",0,0,0)
  210.     end
  211.  
  212.     @sys_timer.clear()
  213.     step = 0.1
  214.     begin
  215.       loop do
  216.         # 如果在窗口模式
  217.         unless fullscr
  218.           # 变成全屏
  219.           if self.is_full?
  220.             break
  221.           else
  222.             Graphics.update
  223.           end
  224.         end
  225.         #sleep(step)
  226.         if skip
  227.           Input.update
  228.           break if Input.trigger?(Input::A)
  229.         end
  230.         if @sys_timer.now_s >= movie_length
  231.           break
  232.         end
  233.         if $MP_GetActiveWindow.call() != wnd
  234.           $MP_SetActiveWindow.call(wnd)
  235.         end
  236.       end
  237.       Graphics.update
  238.       # 关闭当前窗体
  239.       $MP_PostMessage.call(wnd,WM_CLOSE,0,0)
  240.       $MP_mciSendString.call("close FILE",0,0,0)
  241.       $MP_EnableWindow.call(@hWnd,1)
  242.       $MP_SetActiveWindow.call(@hWnd)
  243.       return true
  244.     rescue Hangup
  245.       retry
  246.     end
  247.   end
  248. end
  249.  
  250. $MP = MoviePlayer.new

Lv2.观梦者

梦石
0
星屑
371
在线时间
120 小时
注册时间
2012-11-20
帖子
64
2
 楼主| 发表于 2020-8-28 08:55:29 | 只看该作者
图片传不上来吗?提示113行@sys_timer=SystemTimer.new()
发生了NameError。uninitialized constant MoviePlayer::System Timer
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
3
发表于 2020-8-28 13:25:20 | 只看该作者
脚本不完整,没有SystemTimer定义。

评分

参与人数 1星屑 +20 收起 理由
RyanBern + 20 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
371
在线时间
120 小时
注册时间
2012-11-20
帖子
64
4
 楼主| 发表于 2020-8-29 07:13:40 | 只看该作者
本帖最后由 qq381055296 于 2020-8-29 07:18 编辑
enghao_lim 发表于 2020-8-28 13:25
脚本不完整,没有SystemTimer定义。


哦,那要在哪里修改呢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 07:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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