Project1

标题: swf播放起来一顿一顿的 [打印本页]

作者: lokylogyrpg    时间: 2010-11-29 14:55
标题: swf播放起来一顿一顿的
本帖最后由 lokylogyrpg 于 2010-11-29 17:30 编辑

我的swf播放是40帧,单独播放十分顺畅,可是带入游戏中播放时就一顿一顿的,中间总有类似于跨帧的现象,很不流畅捏~(同样设置的也是40帧的游戏速度)
请问是哪里出了问题呢?有没有大大可以帮我这个忙?
作者: brilliantdusky    时间: 2010-11-29 16:07
本帖最后由 brilliantdusky 于 2010-11-29 16:50 编辑

我也遇到过这种情况,试着缩小视频尺寸,比如把640*480的swf改成320*240的尺寸,然后再放到RM里播放,明显的顺畅了很多。。。但是怎样做到不改变尺寸也能顺畅播放我就无能为力了。。。
===========================================
刚刚我换了新的代码,不卡了,以下的代码你可以替换旧的试试看。
  1. #Flash 播放器 v1.3   作者:灼眼的夏娜

  2. class String
  3.   
  4.   CP_ACP = 0
  5.   CP_UTF8 = 65001
  6.   
  7.   def u2s
  8.     m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
  9.     w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
  10.    
  11.     len = m2w.call(CP_UTF8, 0, self, -1, nil, 0)
  12.     buf = "\0" * (len*2)
  13.     m2w.call(CP_UTF8, 0, self, -1, buf, buf.size/2)
  14.    
  15.     len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
  16.     ret = "\0" * len
  17.     w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
  18.    
  19.     return ret
  20.   end
  21.   
  22.   def s2u
  23.     m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
  24.     w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
  25.   
  26.     len = m2w.call(CP_ACP, 0, self, -1, nil, 0);
  27.     buf = "\0" * (len*2)
  28.     m2w.call(CP_ACP, 0, self, -1, buf, buf.size/2);
  29.   
  30.     len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
  31.     ret = "\0" * len
  32.     w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);
  33.      
  34.     return ret
  35.   end

  36.   def s2u!
  37.     self[0, length] = s2u
  38.   end  
  39.   
  40.   def u2s!
  41.     self[0, length] = u2s
  42.   end
  43.   
  44. end

  45. class Bitmap
  46.   
  47.   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  48.   RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')

  49.   def address
  50.     buffer, ad = "xxxx", object_id * 2 + 16
  51.     RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
  52.     RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
  53.     RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
  54.   end
  55.   
  56. end

  57. class RMFlash

  58.         API_NEW                      = Win32API.new("RMFlash", "_new", "piil", "l")
  59.         API_UPDATE            = Win32API.new("RMFlash", "_update", "l", "v")
  60.         API_FREE              = Win32API.new("RMFlash", "_free", "l", "v")
  61.         API_PLAYING     = Win32API.new("RMFlash", "_is_playing", "l", "i")
  62.         API_PAUSE              = Win32API.new("RMFlash", "_pause", "l", "v")
  63.         API_RESUME            = Win32API.new("RMFlash", "_resume", "l", "v")
  64.         API_BACK              = Win32API.new("RMFlash", "_back", "l", "v")
  65.         API_REWIND            = Win32API.new("RMFlash", "_rewind", "l", "v")
  66.         API_FORWARD            = Win32API.new("RMFlash", "_forward", "l", "v")
  67.         API_CURFRAME          = Win32API.new("RMFlash", "_cur_frame", "l", "i")
  68.         API_TOTALFRAME        = Win32API.new("RMFlash", "_total_frames", "l", "i")
  69.         API_GOTOFRAME          = Win32API.new("RMFlash", "_goto_frame", "li", "v")
  70.         API_GETLOOP                  = Win32API.new("RMFlash", "_get_loop", "l", "i")
  71.         API_SETLOOP                  = Win32API.new("RMFlash", "_set_loop", "li", "v")
  72.         API_CLEARALL          = Win32API.new("RMFlash", "_clear_all", "v", "v")
  73.   API_VALID       = Win32API.new("RMFlash", "_valid", "l", "i")
  74.   API_SENDMSG     = Win32API.new("RMFlash", "_send_message", "liii", "l")
  75.        
  76.   CUR_PATH        = Dir.pwd
  77.   
  78.         def self.get_version

  79.         end

  80.         def self.clear_all
  81.                 API_CLEARALL.call
  82.         end
  83.   
  84.   def self.load(name, width, height, v = nil)
  85.     new("#{CUR_PATH}/#{name}".u2s, width, height, v)
  86.   end
  87.   
  88.   attr_reader   :valid

  89.         def initialize(flash_name, flash_width, flash_height, viewport = nil)
  90.                 @sprite = Sprite.new(viewport)
  91.                 @sprite.bitmap = Bitmap.new(flash_width, flash_height)
  92.                 @value = API_NEW.call(flash_name, flash_width, flash_height, @sprite.bitmap.address)
  93.                 @loop = API_GETLOOP.call(@value) > 0
  94.     @valid = API_VALID.call(@value) > 0
  95.         end

  96.         def viewport
  97.                 @sprite.viewport
  98.         end

  99.         def update
  100.                 API_UPDATE.call(@value)
  101.         end

  102.         def dispose
  103.                 API_FREE.call(@sprite.bitmap.address)
  104.     @sprite.dispose#AVG
  105.         end

  106.         def playing?
  107.                 API_PLAYING.call(@value) > 0
  108.         end

  109.         def pause
  110.                 API_PAUSE.call(@value)
  111.         end

  112.         def resume
  113.                 API_RESUME.call(@value)
  114.         end

  115.         def back
  116.                 API_BACK.call(@value)
  117.         end

  118.         def rewind
  119.                 API_REWIND.call(@value)
  120.         end

  121.         def forward
  122.                 API_FORWARD.call(@value)
  123.         end

  124.         def current_frame
  125.                 API_CURFRAME.call(@value)
  126.         end

  127.         def total_frames
  128.                 API_TOTALFRAME.call(@value)
  129.         end

  130.         def goto_frame(goal_frame)
  131.                 API_GOTOFRAME.call(@value, goal_frame)
  132.         end

  133.         def x
  134.                 @sprite.x
  135.         end

  136.         def x=(v)
  137.                 @sprite.x = v
  138.         end

  139.         def y
  140.                 @sprite.y
  141.         end

  142.         def y=(v)
  143.                 @sprite.y = v
  144.         end

  145.         def z
  146.                 @sprite.z
  147.         end

  148.         def z=(v)
  149.                 @sprite.z = v
  150.         end

  151.         def width
  152.                 @sprite.bitmap.width
  153.         end

  154.         def height
  155.                 @sprite.bitmap.height
  156.         end

  157.         def loop?
  158.                 @loop
  159.         end

  160.         def loop=(v)
  161.                 if @loop != v
  162.                         @loop = v
  163.                         API_SETLOOP.call(@value, v)
  164.                 end
  165.         end
  166.   
  167.   def msg_to_flash(msg, wParam, lParam)
  168.     return API_SENDMSG.call(@value, msg, wParam, lParam)
  169.   end
  170.   
  171.   #  例
  172.   WM_MOUSEMOVE  = 0x0200
  173.   
  174.   def make_long(a, b)
  175.     return (a & 0xffff ) | (b & 0xffff) << 16
  176.   end
  177.   
  178.   def on_mouse_move(x, y)
  179.     return msg_to_flash(WM_MOUSEMOVE, 0, make_long(x, y))
  180.   end

  181. end

  182. module Kernel

  183.   alias origin_exit exit unless method_defined? :exit
  184.   
  185.   def exit(*args)
  186.     RMFlash.clear_all
  187.     origin_exit(*args)
  188.   end
  189.   
  190. end


  191. #fls = RMFlash.load("2.swf", 640, 480)

  192. #while true
  193. #        Graphics.update
  194. #        Input.update
  195. #        fls.update
  196. #        break if Input.trigger?(13)
  197. #end
  198. #fls.dispose

  199. #exit

  200. =begin
  201. class RMFlash
  202.   API_NEW = Win32API.new("RMFlash", "_new", "piil", "l")
  203.   API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v")
  204.   API_FREE = Win32API.new("RMFlash", "_free", "l", "v")
  205.   #def self.new(*args)
  206.   #  obj = super(*args)
  207.   #  obj.send :initialize, *args
  208.   #  obj
  209.   #end
  210.   
  211.   def initialize(flashname, fw, fh)
  212.    
  213.   end
  214.   
  215. end

  216. RMFlash.new
  217. exit
  218. =end

  219. #==============AVG新加Flash类播放修改TT======================

  220. class Flash
  221.   def initialize(name,sizex=640,sizey=480,loop=nil,x=0,y=0,z=99999)
  222.     @fls = RMFlash.load(name, sizex, sizey)
  223.     @fls.x = x
  224.     @fls.y = y
  225.     @fls.z = z
  226.     if loop != nil
  227.     @fls.loop = loop
  228.     end
  229. while true
  230.         Graphics.update
  231.         #Input.update
  232.         @fls.update
  233.         break if [email protected]?
  234.    if $game_switches[8] == true#AVG如果看片头中跳回标题
  235.             Input.update
  236.           if Input.trigger?(Input::B)
  237.           $scene = Scene_Title.new
  238.           break
  239.         end
  240.       else
  241.         Input.update
  242.             break if Input.trigger?(Input::B)
  243.      end
  244.     end
  245.    @fls.dispose
  246.   end
  247. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1