查看: 5139|回复: 12

[已经解决] 求教啊。超级整合里面的菜单优化脚本存档不能用

[复制链接]
梦石
0
星屑
110
在线时间
210 小时
注册时间
2012-6-25
回帖
44
发表于 2013-6-15 15:21:04 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Ayahiyano 于 2013-6-19 18:12 编辑

我一用来存档就死了
还出现这样的代码
  1. def draw_playtime(x, y, width, align)
  2.       hour = @total_sec / 60 / 60
  3.       min = @total_sec / 60 % 60
  4.       sec = @total_sec % 60
  5.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  6.       draw_picture_number(x + 18 * 0, y ,0, "Save_Number_01",0,0,3,0) if hour < 10
  7.       draw_picture_number(x + 18 * 1, y ,hour, "Save_Number_01",0,0,3,0)
  8.       draw_picture_number(x + 18 * 3, y ,0, "Save_Number_01",0,0,3,0) if min < 10
  9.       draw_picture_number(x + 18 * 4, y ,min, "Save_Number_01",0,0,3,0)
  10.       draw_picture_number(x + 18 * 6, y ,0, "Save_Number_01",0,0,3,0) if sec < 10
  11.       draw_picture_number(x + 18 * 7, y ,sec , "Save_Number_01",0,0,3,0)     
  12.   end
复制代码
他说代码第2条错,要怎么改呢
梦石
0
星屑
50
在线时间
137 小时
注册时间
2012-8-27
回帖
86
发表于 2013-6-15 19:44:19 来自手机 | 显示全部楼层
好像是冲突,反正我用没事
回复

使用道具 举报

梦石
0
星屑
110
在线时间
210 小时
注册时间
2012-6-25
回帖
44
 楼主| 发表于 2013-6-15 19:57:33 | 显示全部楼层
liminglun 发表于 2013-6-15 19:44
好像是冲突,反正我用没事

方便发个工程看下嘛,我弄了3天都存不了档
回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-6-16 08:06:09 | 显示全部楼层
那个代码第二行应该不可能有错,除非 @total_sec 的值为 nil,若您错误讯息是这样子,那表示确实脚本冲突了。
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
110
在线时间
210 小时
注册时间
2012-6-25
回帖
44
 楼主| 发表于 2013-6-16 08:32:34 | 显示全部楼层
j433463 发表于 2013-6-16 08:06
那个代码第二行应该不可能有错,除非 @total_sec 的值为 nil,若您错误讯息是这样子,那表示确实脚本冲突了 ...

你好,能帮我看看这个脚本怎么用么,我尝试改过但是没反应
[pre lang="ruby" line="1"]=begin
 ■ RGDS_Base ver 0.0.0.9
動画再生スクリプト(ベース)for DLL(ver0.0.0.8)
=end
module RGDS
  DLL_NAME = "HNRGDS"
  
  module State
    NO_CONNECT = 0
    OPENING = 5
    READY = 10
    RUN   = 21
    PAUSE = 22
  end
  
  STATE_NO_CONNECT = 0
  STATE_OPENING = 5
  STATE_READY = 10
  STATE_RUN   = 21
  STATE_PAUSE = 22
  
  @@open = Win32API.new(DLL_NAME, 'OpenMovieA', 'ip', 'l')
  @@get_size = Win32API.new(DLL_NAME, 'GetVideoSize', 'p', 'i')
  @@close = Win32API.new(DLL_NAME, 'CloseMovie', 'v', 'i')
  @@update_video = Win32API.new(DLL_NAME, 'UpdateVideo', 'n', 'i')
  @@run = Win32API.new(DLL_NAME, 'RunMovie', 'v', 'i')
  @@pause = Win32API.new(DLL_NAME, 'PauseMovie', 'v', 'i')
  @@get_volume = Win32API.new(DLL_NAME, 'GetVolume', 'v', 'l')
  @@set_volume = Win32API.new(DLL_NAME, 'SetVolume', 'l', 'l')
  @@state = Win32API.new(DLL_NAME, 'GetState', 'v', 'i')
  
  @@state = 0
  @@system_pause = false
  @@volume = 10000
  @@visible = true
  @@x = 0
  @@y = 0
  @@width_max  = 0
  @@height_max = 0
  @@filename = ""

  @@bitmap = Bitmap.new(16, 16)
  @@bitmap.clear
  class << @@bitmap
    alias :_dispose :dispose unless method_defined?(:_dispose)
    def dispose
    end
  end
  @@bitmap_changed = true
  
  def self.open(filename)
    if @@filename != filename
      self.close
    end
    result = @@open.call(filename.size, filename);
    return result if result != 0
    @@state = State::OPENING
    @@filename = filename
    return result
  end
  
  def self.close
    @@state = State::NO_CONNECT
    @@filename = ""
    @@close.call()
    @@bitmap.clear
  end
  
  def self.bitmap
    @@bitmap
  end

  def self.bitmap_changed?
    @@bitmap_changed
  end

  def self.bitmap_changed=(value)
    @@bitmap_changed = value
  end
  
  def self.filename
    @@filename
  end

  def self.update
    return 0 if !@@visible
    if @@state >= State::READY
      result = @@update_video.call(@@bitmap.object_id)
      if (result == 0)
        return 0
      else
        self.close()
        return result
      end
    else
      return -1
    end
  end

  def self.wait_opening
    return unless @@state == State::OPENING
    buff_size = "\000" * 8
    while(@@state == State::OPENING) do
      result = @@get_size.call(buff_size)
      if result == 0
        break;
      elsif result < 0
        error_code = result
        error_code = result & 0xFFFF
        if DSError::JP_ERROR.key?(error_code)
          print "エラー(#{error_code}):#{DSError::JP_ERROR[error_code]}"
        else
          print "エラー(#{error_code}):#{result}"
        end
        return result
      end
      5.times {Graphics.update}
    end
      
    width, height = buff_size.unpack("ii")
    if ( (@@bitmap.width != width) or (@@bitmap.height != height) )
      @@bitmap._dispose
      @@bitmap = Bitmap.new(width, height)
      class << @@bitmap
        alias :_dispose :dispose unless method_defined?(:_dispose)
        def dispose
        end
      end
      @@bitmap_changed = true
    end
    @@bitmap.clear
    @@state = State::READY
    return 0
  end
  
  def self.run
    self.wait_opening()
    if @@state >= State::READY
      self.set_volume(@@volume)
      @@run.call()
      @@state = State::RUN
    end
  end
  
  def self.pause
    if @@state == State::RUN
      @@pause.call()
      @@state = State::PAUSE
    end
  end
  
  def self.get_volume
    if @@state >= State::READY
      @@volume = @@get_volume.call()
    end
    return @@volume
  end
  
  def self.set_volume(volume)
    volume = 0 if volume < 0
    volume = 10000 if volume > 10000
    @@volume = volume
    if @@state >= State::READY
      @@set_volume.call(volume)
    end
  end
  
  def self.active?
    (@@state >= State::READY)
  end

  def self.system_pause
    if @@state == State::RUN
      self.pause()
      @@system_pause = true
      @@state == State::PAUSE
    end
  end
  
  def self.system_resume
    if @@system_pause
      self.run()
      @@system_pause = false
    end
  end
  
  def self.visible
    (@@visible && self.active? )
  end
  
  # リセット対策
  self.close()
end

module DSError
  # HNRGDS.dll で独自に定義しているエラーコード
  LOCAL_ERROR = {
    -100001 => "ERROR_NO_WINDOW",
    -100003 => "ERROR_WINDOW_OPENED",
    -100004 => "ERROR_NO_CONNECT",
    -100101 => "ERROR_CANT_OPEN_FILE",
    -100201 => "ERROR_MOVIE_LODING",
    -100205 => "ERROR_OPEN_TIMEOUT",
    -100301 => "ERROR_NOT_PLAYING",
    -100303 => "ERROR_DIFFERENT_SIZE",
    -101404 => "ERROR_FILTER_NOT_FOUND",
    -101406 => "ERROR_FILTER_UNSUPPORTED",
  }
  # DirectShowから返されるエラーの下位ビット
  JP_ERROR = {
    554 => "このピンは、提供されたメディア タイプを使えない",
    555 => "このサンプルはレンダリングできない",
    558 => "タイムアウト期間が過ぎた",
    559 => "ファイル フォーマットが無効",
    599 => "ビデオ ストリームを再生できない(レンダラ)",
    600 => "オーディオ ストリームを再生できない(レンダラ)",
    603 => "DirectShow はこのプロセッサ上で MPEG ムービーを再生できない",
    604 => "オーディオ ストリームを再生できない(フォーマット)",
    605 => "ビデオ ストリームを再生できない(フォーマット)",
    606 => "規格に準拠していないので DirectShow で再生できない",
    607 => "フィルタグラフに存在しないオブジェクトに要求された関数を実行できない",
    612 => "バッファが十分に満たされていない",
    613 => "ファイルを再生できない(フォーマット)",
    614 => "同じ転送をサポートしていないのでピンどうしを接続できない",
  }
end
[/pre]

=begin
 ■ RGDS_SP ver 0.0.1.2
動画再生スクリプト(表示系)for VX Ace
動画再生スクリプト(ベース)より下に配置してください。

=end
module RGDS_SP
  @@visible = false
  
  # ■ 動画設定クラス $game_system.movie_infoで使用
  class MovieInfo
    attr_reader :x
    attr_reader :y
    attr_reader :z
    attr_reader :width_max
    attr_reader :height_max
    attr_reader :origin_center
    attr_accessor :mode
    attr_accessor :refresh_flag
    def initialize
      @x = Graphics.width / 2
      @y = Graphics.height / 2
      @z = 500
      @width_max  = 0
      @height_max = 0
      @origin_center = true
      @mode = 0
      @refresh_flag = false
    end
   
    # セッター
    def x=(n)
      @x = n
      @refresh_flag = true
    end
    def y=(n)
      @y = n
      @refresh_flag = true
    end
    def z=(n)
      @z = n
      @refresh_flag = true
    end
    def width_max=(n)
      @width_max = n
      @refresh_flag = true
    end
    def width_max=(n)
      @width_max = n
      @refresh_flag = true
    end
    def origin_center=(flag)
      @origin_center = flag
      @refresh_flag = true
    end

    # ■ 表示位置、サイズを指定します。
    #- x, y: 表示座標
    #- width_max, height_max: 表示枠。この内部に収まるように拡大縮小します。
    #                       : どちらかが0以下の場合拡大縮小は行われません。
    #- orogin: 表示位置基準点 false(デフォ): 動画の左上, true: 動画の中心を上記
    #-         の[x,y]にあわせます
    def set_position(x=0,y=0,width_max=0,height_max=0,origin=false)
      @x = x
      @y = y
      @width_max  = width_max
      @height_max = height_max
      @origin_center = origin
      @refresh_flag = true
    end
   
    # ■ 以降の表示位置、サイズをデフォルトに戻します。
    # 拡大縮小なし、左上にあわせて表示
    def reset_position
      @x = Graphics.width / 2
      @y = Graphics.height / 2
      @width_max  = 0
      @height_max = 0
      @origin_center = true
      @refresh_flag = true
    end
   
  end
  
  
  class MovieSprite < ::Sprite
    # 初期化
    def initialize(viewport=nil)
      super
      self.visible = false
      self.bitmap = RGDS.bitmap
      fix_position()
    end

    # 拡大縮小処理
    def change_zoom
      zoom = 1.0
      bw = self.bitmap.width
      bh = self.bitmap.height
      return if bw <= 0 or bh <= 0
      if $game_system.movie_info.width_max > 0 and $game_system.movie_info.height_max > 0
        zoom_w = $game_system.movie_info.width_max.to_f / bw.to_f
        zoom_h = $game_system.movie_info.height_max.to_f / bh.to_f
        zoom = [zoom_w, zoom_h].min
      end
      self.zoom_x = zoom
      self.zoom_y = zoom
    end

    # 表示位置変更
    def fix_position
      self.x = $game_system.movie_info.x
      self.y = $game_system.movie_info.y
      self.z = $game_system.movie_info.z
      if $game_system.movie_info.origin_center
        self.ox = self.bitmap.width / 2
        self.oy = self.bitmap.height / 2
      end
      change_zoom()
    end
   
    def update
      if (self.visible = RGDS.visible)
        if RGDS.bitmap_changed? or self.bitmap.disposed?
          self.bitmap = RGDS.bitmap
          fix_position()
          RGDS.bitmap_changed = false
          $game_system.movie_info.refresh_flag = false
        elsif $game_system.movie_info.refresh_flag
          fix_position()
          $game_system.movie_info.refresh_flag = false
        end
      end
      super
    end
  end

  module_function

  # ■ 動画をオープンします。初回は1~2秒ほどかかる場合もあります。
  def open(filename)
    RGDS.open(filename)
  end
  
  # ■ 動画を停止しクローズします。
  def close
    RGDS.close()
  end
  
  # ■ openされた動画を再生します。一時停止中なら再開します。
  # 再生が終わると自動的にクローズします。
  def run
    RGDS.run()
  end
  
  # ■ 動画を一時停止します。再開はrunで行います。
  def pause
    RGDS.pause()
  end

  # ■ 動画をオープンして自動再生します。
  #- 決定キーでスキップします。
  def start_movie(filename, option={})
   
    # スキップ検出オプション
    if option.key?(:skip_sw)
      skip_sw = option[:skip_sw].to_i
    else
      skip_sw = 0
    end
   
    # スキップ禁止モードオプション
    if option.key?(:nsm)
      nsm_mode = option[:nsm]
    else
      nsm_mode = false
    end
   
    if skip_sw > 0
      $game_switches[skip_sw] = true
    end
    scene_temp = SceneManager.scene
    if scene_temp.is_a?(Scene_Map) or scene_temp.is_a?(Scene_Battle)
      msgv = SceneManager.scene.instance_variable_get(:@message_window)
      msgv.update
      tempv = msgv.visible
      msgv.visible = false
      # オープン
      RGDS.open(filename)
      RGDS.run()
      # 終了またはボタンが押されるまでループ
      loop do
        break if scene_temp != SceneManager.scene

        # 画面の更新
        if SceneManager.scene.is_a?(Scene_Map)
          SceneManager.scene.update_for_fade
        else
          SceneManager.scene.update_basic
        end
        
        if !RGDS.active? # 再生終了
          if skip_sw > 0
            $game_switches[skip_sw] = false
          end
          break
        end
        unless nsm_mode
          if Input.trigger?(Input::C) or Input.trigger?(Input::B)
            break
          end
        end
      end
      RGDS.close()
      msgv.visible = tempv
    end
  end
  

  # ■ 以降の表示位置、サイズを指定します。
  #- x, y: 表示座標
  #- width_max, height_max: 表示枠。この内部に収まるように拡大縮小します。
  #                       : どちらかが0以下の場合拡大縮小は行われません。
  #- origin: 表示位置基準点 false: 動画の左上, true: 動画の中心を上記
  #-         の[x,y]にあわせます
  def set_position(x=0,y=0,width_max=0,height_max=0,origin=false)
    $game_system.movie_info.set_position(x,y,width_max,height_max,origin)
  end
  
  # ■ 以降の表示位置、サイズをデフォルトに戻します。
  # 拡大縮小なし、中央にあわせて表示
  def reset_position
    $game_system.movie_info.reset_position()
  end
  
  # 再生音量取得
  def get_volume
    return RGDS.get_volume()
  end

  # 再生音量設定
  def set_volume(volume)
    return RGDS.set_volume(volume)
  end
  
end

class Game_System
  def init_movie_info
    @movie_info = RGDS_SP::MovieInfo.new
  end
  def movie_info
    init_movie_info() if @movie_info.nil?
    return @movie_info
  end
end


class Spriteset_Map
  alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
  def initialize
    # 元の処理
    _hn_movie__initialize
    # 追加処理
    create_movie
    update_movie
  end

  alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
  def dispose
    dispose_movie
    _hn_movie__dispose
  end

  alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
  def update
    update_movie
    _hn_movie__update
  end

  # ■ シーン移行時に動画を待機モードにします。
  def create_movie
    @sp_movie = RGDS_SP::MovieSprite.new()
    @sp_movie.viewport = @viewport1
    RGDS.system_resume
  end

  # ■ シーン移行時に動画を待機モードにします。
  def dispose_movie
    RGDS.system_pause
    @sp_movie.viewport = nil
    @sp_movie.dispose
    @sp_movie = nil
  end

  def update_movie
    if RGDS.active?
      RGDS.update
    end
    @sp_movie.update unless @sp_movie.nil?
  end
end

class Spriteset_Battle
  alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
  def initialize
    # 元の処理
    _hn_movie__initialize
    # 追加処理
    create_movie
    update_movie
  end

  alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
  def dispose
    dispose_movie
    _hn_movie__dispose
  end

  alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
  def update
    update_movie
    _hn_movie__update
  end

  # ■ シーン移行時に動画を待機モードにします。
  def create_movie
    @sp_movie = RGDS_SP::MovieSprite.new()
    @sp_movie.viewport = @viewport1
    RGDS.system_resume
  end

  # ■ シーン移行時に動画を待機モードにします。
  def dispose_movie
    RGDS.system_pause
    @sp_movie.viewport = nil
    @sp_movie.dispose
    @sp_movie = nil
  end

  def update_movie
    if RGDS.active?
      RGDS.update
    end
    @sp_movie.update unless @sp_movie.nil?
  end
end
=begin
■ RGDS_OP_Movie ver 0.0.1.0
RGDS_base, RGDS_SP より下に配置してください

=end
class Scene_OpeningMovie < Scene_Base
  MOVIE_FILE = "Movies/opening.mpg"
  NSM = false
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    if $BTEST                         # 戦闘テストの場合
      $scene = next_scene()
    else                              # 通常のプレイの場合
      super                           # 本来のメイン処理
    end
  end
  
  def next_scene
    Scene_Title.new
  end
  
  def start
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    RGDS.open(MOVIE_FILE)
    @movie_sprite = RGDS_SP::MovieSprite.new
    super
  end
  
  def post_start
    super
    RGDS.run
  end
  
  def update
    super
    RGDS.update
    @movie_sprite.update
    if !RGDS.active? # 再生終了
      SceneManager.goto(Scene_Title)
      return
    end
    unless NSM
      if Input.trigger?(Input::C) or Input.trigger?(Input::B)
        SceneManager.goto(Scene_Title)
        return
      end
    end
  end

  def pre_terminate
    RGDS.close()
    @movie_sprite.dispose
    super
  end
end

module SceneManager
  #--------------------------------------------------------------------------
  # ● 最初のシーンクラスを取得
  #--------------------------------------------------------------------------
  def self.first_scene_class
    $BTEST ? Scene_Battle : Scene_OpeningMovie
  end
end

回复

使用道具 举报

梦石
0
星屑
50
在线时间
687 小时
注册时间
2012-10-29
回帖
1526
发表于 2013-6-16 08:41:00 | 显示全部楼层
这应该还有一个 DLL 档才能用吧,tseyik 大大不是有给载点和说明范例吗?您不会只抓了脚本吧?
修改劇本中,仔細審查原來的劇情大綱,覺得有點不太滿意,嘗試編寫不同主角不同主線的劇情,希望能寫得出來。
回复

使用道具 举报

梦石
0
星屑
110
在线时间
210 小时
注册时间
2012-6-25
回帖
44
 楼主| 发表于 2013-6-16 08:44:20 | 显示全部楼层
j433463 发表于 2013-6-16 08:41
这应该还有一个 DLL 档才能用吧,tseyik 大大不是有给载点和说明范例吗?您不会只抓了脚本吧? ...

范例我看了,但是我研究了半天,都不能用自己的视频啊

点评

我没有玩过这视频的脚本,最好还是请 tseyik 大大来讲解吧,一是脚本的前后顺序,一是 dll 档放的位置,都要正确才行。  发表于 2013-6-16 14:24
回复

使用道具 举报

梦石
0
星屑
50
在线时间
16 小时
注册时间
2013-4-3
回帖
9
发表于 2013-6-17 08:52:40 | 显示全部楼层
超级整合里面有个存读档的图片素材貌似放错位置了,不知道你是不是因为没有搞这个才有错。。
回复

使用道具 举报

梦石
0
星屑
110
在线时间
210 小时
注册时间
2012-6-25
回帖
44
 楼主| 发表于 2013-6-17 14:20:17 | 显示全部楼层
JuventusYzh 发表于 2013-6-17 08:52
超级整合里面有个存读档的图片素材貌似放错位置了,不知道你是不是因为没有搞这个才有错。。 ...

求教啊。哪里放错了呢
回复

使用道具 举报

梦石
0
星屑
50
在线时间
16 小时
注册时间
2013-4-3
回帖
9
发表于 2013-6-17 14:43:08 | 显示全部楼层
Ayahiyano 发表于 2013-6-17 14:20
求教啊。哪里放错了呢

没记错的话是要把Graphics的Gallery里面的图放到Pictures里面,
你去试试吧。。。
jt03.jpg
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部