Project1

标题: 用显示图片的方法显示动画"眼花问题"[有工程] [打印本页]

作者: 七仙女    时间: 2008-4-22 06:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 暴风の龙    时间: 2008-4-22 06:11
那些图片的总祯数拉长点吧,主要是图的问题。
作者: havealook    时间: 2008-4-22 06:16
试试用另一种方法连续播放图片(节省内存):http://rpg.blue/web/htm/news900.htm
作者: link006007    时间: 2008-4-22 06:18
如果是每一帧调用一次   应该不会出现这种问题
还是你直接一个for循环?
作者: 七仙女    时间: 2008-4-22 06:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-4-22 07:14
先看看又没用吧 - -

  1. class Scene_Title
  2.   #--------------------------------------------------------------------------
  3.   # ● 住处理
  4.   #--------------------------------------------------------------------------
  5.   def main
  6.     # 战斗测试的情况下
  7.     if $BTEST
  8.       battle_test
  9.       return
  10.     end
  11.     # 载入数据库
  12.     $data_actors        = load_data("Data/Actors.rxdata")
  13.     $data_classes       = load_data("Data/Classes.rxdata")
  14.     $data_skills        = load_data("Data/Skills.rxdata")
  15.     $data_items         = load_data("Data/Items.rxdata")
  16.     $data_weapons       = load_data("Data/Weapons.rxdata")
  17.     $data_armors        = load_data("Data/Armors.rxdata")
  18.     $data_enemies       = load_data("Data/Enemies.rxdata")
  19.     $data_troops        = load_data("Data/Troops.rxdata")
  20.     $data_states        = load_data("Data/States.rxdata")
  21.     $data_animations    = load_data("Data/Animations.rxdata")
  22.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  23.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  24.     $data_system        = load_data("Data/System.rxdata")
  25.     # 生成系统对像
  26.     $game_system = Game_System.new
  27.     # 生成标题图形
  28.     @sprite = Sprite.new
  29.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  30.     # 生成命令窗口
  31.     s1 = "动画"
  32.     s2 = "继续"
  33.     s3 = "退出"
  34.     @command_window = Window_Command.new(192, [s1, s2, s3])
  35.     @command_window.back_opacity = 160
  36.     @command_window.x = 320 - @command_window.width / 2
  37.     @command_window.y = 288
  38.     # 判定继续的有效性
  39.     # 存档文件一个也不存在的时候也调查
  40.     # 有効为 @continue_enabled 为 true、無効为 false
  41.     @continue_enabled = false
  42.     for i in 0..3
  43.       if FileTest.exist?("Save#{i+1}.rxdata")
  44.         @continue_enabled = true
  45.       end
  46.     end
  47.     # 继续为有效的情况下、光标停止在继续上
  48.     # 无效的情况下、继续的文字显示为灰色
  49.     if @continue_enabled
  50.       @command_window.index = 1
  51.     else
  52.       @command_window.disable_item(1)
  53.     end
  54.    
  55.     @w_wuli=Sprite.new#W_wuli.new
  56.     @w_wuli.x = @w_wuli.y = 0
  57.       @w_wuli.bitmap=Bitmap.new("Graphics/Wuli/黄金待机")
  58.       @w_wuli.src_rect.set(0, 0, 195, 195)
  59.       @nCount = 0
  60.       
  61.     # 演奏标题 BGM
  62.     $game_system.bgm_play($data_system.title_bgm)
  63.     # 停止演奏 ME、BGS
  64.     Audio.me_stop
  65.     Audio.bgs_stop
  66.     # 执行过渡
  67.     Graphics.transition
  68.     # 主循环
  69.     loop do
  70.       # 刷新游戏画面
  71.       Graphics.update
  72.       # 刷新输入信息
  73.       Input.update
  74.       # 刷新画面
  75.       update
  76.       # 如果画面被切换就中断循环
  77.       if $scene != self
  78.         break
  79.       end
  80.     end
  81.     # 装备过渡
  82.     Graphics.freeze
  83.     # 释放命令窗口
  84.     @command_window.dispose
  85.     # 释放标题图形
  86.     @sprite.bitmap.dispose
  87.     @sprite.dispose
  88.     @w_wuli.dispose if nil != @w_wuli
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 刷新画面
  92.   #--------------------------------------------------------------------------
  93.   def update
  94.     # 刷新命令窗口
  95.     @command_window.update
  96.     if (0 != @nCount)
  97.       @nCount -= 1
  98.       ziji_dh()
  99.       return
  100.     end
  101.    
  102.       
  103.     # 按下 C 键的情况下
  104.     if Input.trigger?(Input::C)
  105.       # 命令窗口的光标位置的分支
  106.       case @command_window.index
  107.       when 0  # 动画
  108.         @nCount = 61
  109.         # command_new_game
  110.       when 1  # 继续
  111.         command_continue
  112.       when 2  # 退出
  113.         command_shutdown
  114.       end
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.    # ● 命令 : 动画
  119.   def ziji_dh
  120.   #--------------------------------------------------------------------------
  121.      # 开头动画
  122.       
  123.       x1 = 400
  124.       y1 = 300
  125.       x2 = 10
  126.       y2 = 10
  127.       #x=0
  128.       #y=0
  129.       x = @w_wuli.x
  130.       y = @w_wuli.y
  131.       b=(x1-x2)/20
  132.       @w_wuli.src_rect.set(195 * (@nCount % 5), 0, 195, 195)
  133.      

  134.       #@w_wuli.contents.blt(0, 0, bitmap, Rect.new(0, 0, 192, 192), 255)
  135.       
  136.       #for i in 0..60
  137.       
  138.         x = x1 if @nCount == 1
  139.         x = x1 if @nCount == 2
  140.         x = x1 if @nCount == 3
  141.         x = x1 if @nCount == 4
  142.         x = x1 if @nCount == 5
  143.       
  144.       
  145.         x = x1-1*b if @nCount == 8
  146.         x = x1-1*b if @nCount == 9
  147.          x = x1-1*b if @nCount ==10
  148.         x = x1-1*b if @nCount == 11
  149.         x = x1-1*b if @nCount == 12
  150.         x = x1-2*b if @nCount == 13
  151.      
  152.         x = x1-2*b if @nCount == 15
  153.          x = x1-2*b if @nCount == 16
  154.         x = x1-2*b if @nCount == 17
  155.         x = x1-2*b if @nCount == 18
  156.         x = x1-3*b if @nCount == 19
  157.      
  158.         x = x1-3*b if @nCount == 21
  159.          x = x1-3*b if @nCount == 22
  160.         x = x1-3*b if @nCount == 23
  161.         x = x1-3*b if @nCount == 24
  162.         x = x1-4*b if @nCount == 25
  163.   
  164.           x = x1-4*b if @nCount == 27
  165.             x = x1-4*b if @nCount == 28
  166.          x = x1-4*b if @nCount == 29
  167.           x = x1-4*b if @nCount == 30
  168.         x = x1-5*b if @nCount == 31

  169.           x = x1-5*b if @nCount == 33
  170.             x = x1-5*b if @nCount == 34
  171.          x = x1-5*b if @nCount == 35
  172.           x = x1-5*b if @nCount == 36
  173.         x = x1-6*b if @nCount == 37

  174.         x = x1-6*b if @nCount == 39
  175.          x = x1-6*b if @nCount == 40
  176.         x = x1-6*b if @nCount == 41
  177.         x = x1-6*b if @nCount == 42
  178.         x = x1-7*b if @nCount == 43

  179.           x = x1-7*b if @nCount == 45
  180.            x = x1-7*b if @nCount == 46
  181.          x = x1-7*b if @nCount == 47
  182.           x = x1-7*b if @nCount == 48
  183.         x = x1-8*b if @nCount == 49
  184.         x = x1-8*b if @nCount == 51
  185.          x = x1-8*b if @nCount == 52
  186.         x = x1-8*b if @nCount == 53
  187.         x = x1-8*b if @nCount == 54
  188.         x = x1-9*b if @nCount == 55

  189.         x = x1-9*b if @nCount == 57
  190.          x = x1-9*b if @nCount == 58
  191.         x = x1-9*b if @nCount == 59
  192.         x = x1-9*b if @nCount == 60

  193.      
  194.      
  195.   
  196.       
  197.         
  198.         y=(y2-y1)*(x-x1)/(x2-x1)+y1
  199.         
  200.         @w_wuli.x=x
  201.         @w_wuli.y=y
  202.        # s1 = Time.now
  203.        #while (Time.now - s1) <= 0.03
  204.       # Graphics.update
  205.        #end
  206.         #Graphics.update
  207.       #end
  208.      
  209.      #@w_wuli.dispose
  210.    

  211.     end
  212. end
复制代码

果然写在一个for循环里了... ...
根据计算机当前时刻的性能  会倒置动画速度不稳定(系统每次执行方法消耗时间不同)
应该利用update函数,和游戏一起刷新   或自己控制更新时间差 (有合理的动画逻辑, 那个@nCount可以不要  只是为了配合那一大串if - -)

PS 很乱啊..
作者: 七仙女    时间: 2008-4-22 15:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-4-22 18:44
我只是把你的脚本for循环去掉了, 去掉了window... 本来想说数值你自己改,结果断网了  = =||
那个可能是你自己坐标设置的问题
你那一大串if导致的, 每一帧移动长度变化率不平滑, 而且帧数不连续(每10个段一帧)

你先试试这个是不是你说的平滑

  1. class Scene_Title
  2.   #--------------------------------------------------------------------------
  3.   # ● 住处理
  4.   #--------------------------------------------------------------------------
  5.   def main
  6.     # 战斗测试的情况下
  7.     if $BTEST
  8.       battle_test
  9.       return
  10.     end
  11.     # 载入数据库
  12.     $data_actors        = load_data("Data/Actors.rxdata")
  13.     $data_classes       = load_data("Data/Classes.rxdata")
  14.     $data_skills        = load_data("Data/Skills.rxdata")
  15.     $data_items         = load_data("Data/Items.rxdata")
  16.     $data_weapons       = load_data("Data/Weapons.rxdata")
  17.     $data_armors        = load_data("Data/Armors.rxdata")
  18.     $data_enemies       = load_data("Data/Enemies.rxdata")
  19.     $data_troops        = load_data("Data/Troops.rxdata")
  20.     $data_states        = load_data("Data/States.rxdata")
  21.     $data_animations    = load_data("Data/Animations.rxdata")
  22.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  23.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  24.     $data_system        = load_data("Data/System.rxdata")
  25.     # 生成系统对像
  26.     $game_system = Game_System.new
  27.     # 生成标题图形
  28.     @sprite = Sprite.new
  29.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  30.     # 生成命令窗口
  31.     s1 = "动画"
  32.     s2 = "继续"
  33.     s3 = "退出"
  34.     @command_window = Window_Command.new(192, [s1, s2, s3])
  35.     @command_window.back_opacity = 160
  36.     @command_window.x = 320 - @command_window.width / 2
  37.     @command_window.y = 288
  38.     # 判定继续的有效性
  39.     # 存档文件一个也不存在的时候也调查
  40.     # 有効为 @continue_enabled 为 true、無効为 false
  41.     @continue_enabled = false
  42.     for i in 0..3
  43.       if FileTest.exist?("Save#{i+1}.rxdata")
  44.         @continue_enabled = true
  45.       end
  46.     end
  47.     # 继续为有效的情况下、光标停止在继续上
  48.     # 无效的情况下、继续的文字显示为灰色
  49.     if @continue_enabled
  50.       @command_window.index = 1
  51.     else
  52.       @command_window.disable_item(1)
  53.     end
  54.    
  55.     @w_wuli=Sprite.new#W_wuli.new
  56.       
  57.     @w_wuli.x = @w_wuli.y = 0
  58.       @w_wuli.bitmap=Bitmap.new("Graphics/Wuli/黄金待机")
  59.       @w_wuli.src_rect.set(0, 0, 195, 195)
  60.       @nCount = 0
  61.       
  62.       
  63.       
  64.       
  65.     # 演奏标题 BGM
  66.     $game_system.bgm_play($data_system.title_bgm)
  67.     # 停止演奏 ME、BGS
  68.     Audio.me_stop
  69.     Audio.bgs_stop
  70.     # 执行过渡
  71.     Graphics.transition
  72.     # 主循环
  73.     loop do
  74.       # 刷新游戏画面
  75.       Graphics.update
  76.       # 刷新输入信息
  77.       Input.update
  78.       # 刷新画面
  79.       update
  80.       # 如果画面被切换就中断循环
  81.       if $scene != self
  82.         break
  83.       end
  84.     end
  85.     # 装备过渡
  86.     Graphics.freeze
  87.     # 释放命令窗口
  88.     @command_window.dispose
  89.     # 释放标题图形
  90.     @sprite.bitmap.dispose
  91.     @sprite.dispose
  92.     @w_wuli.dispose if nil != @w_wuli
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 刷新画面
  96.   #--------------------------------------------------------------------------
  97.   def update
  98.     # 刷新命令窗口
  99.     @command_window.update
  100.     if (0 != @nCount)
  101.       @nCount -= 1
  102.       ziji_dh()
  103.       return
  104.     end
  105.    
  106.       
  107.     # 按下 C 键的情况下
  108.     if Input.trigger?(Input::C)
  109.       # 命令窗口的光标位置的分支
  110.       case @command_window.index
  111.       when 0  # 动画
  112.         @nCount = 61
  113.         # command_new_game
  114.       when 1  # 继续
  115.         command_continue
  116.       when 2  # 退出
  117.         command_shutdown
  118.       end
  119.     end
  120.   end
  121.   #--------------------------------------------------------------------------
  122.    # ● 命令 : 动画
  123.   def ziji_dh
  124.   #--------------------------------------------------------------------------
  125.      # 开头动画
  126.       
  127.       x1 = 400
  128.       y1 = 300
  129.       x2 = 10
  130.       y2 = 10
  131.       #x=0
  132.       #y=0
  133.       x = @w_wuli.x
  134.       y = @w_wuli.y
  135.       b=(x1-x2)/20
  136.       @w_wuli.src_rect.set(192 * (@nCount % 5), 0, 192, 192)
  137.      

  138.       #@w_wuli.contents.blt(0, 0, bitmap, Rect.new(0, 0, 192, 192), 255)
  139.       
  140.       #for i in 0..60
  141.       
  142.         x += 5
  143.         y += 2
  144.         
  145.         @w_wuli.x=x
  146.         @w_wuli.y=y
  147.        # s1 = Time.now
  148.        #while (Time.now - s1) <= 0.03
  149.       # Graphics.update
  150.        #end
  151.         #Graphics.update
  152.       #end
  153.      
  154.      #@w_wuli.dispose
  155.    

  156.     end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~




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