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

Project1

 找回密码
 注册会员
搜索
查看: 170896|回复: 775

[原创发布] 【RGD】使用 DirectX 驱动的 RMVA Game.exe(v1.6)

  [复制链接]

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-5-4 19:43:31 | 显示全部楼层
朝拜大佬,太牛逼,太感谢了!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-5-4 21:46:43 | 显示全部楼层
发现2个问题:
1. 使用SV100,战斗时,我方7人,敌方8人,开启显示装备的武器,略有掉帧,但最主要的是画面有明显的卡顿,特别是使用技能显示动画的时候(未使用RGD时,相同的分辨率1024*640,只是掉帧,但不会卡顿)
2. 同样是以上的战斗状态,敌人的影子坐标坐标、武器坐标,我方的武器坐标, 都会发生偏移

点评

掉帧可能是因为bitmap操作过多了,建议改成Sprite操作;角度不对的问题已经在新的修正了,可以重新下载试试,不知道能不能把坐标问题也解决。  发表于 2018-5-4 21:57
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-5-5 00:43:43 | 显示全部楼层
更新之后基本上一进游戏就报 Game.exe停止工作

QQ图片20180505004230.png



点评

对了,如果工程里已有的东西比较多那暂时不建议直接用RGD吧,因为目前版本不稳定……新开工程或者等以后稳定了比较好。  发表于 2018-5-6 17:31
最好可以缩小一下出错的范围,比如哪一个脚本确认会出错,我之后放空工程里试试……  发表于 2018-5-6 17:29
不是空白的工程,是我游戏的工程,基本一启动就出错。但是试了最早发的那个版本,确认不会出错。  发表于 2018-5-6 17:01
是空白工程也会出现?  发表于 2018-5-6 16:58
同样会出现,使用工程启动的话基本上必现。另外SV100战斗时的坐标偏移问题也还是存在。  发表于 2018-5-6 16:25
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-5-7 19:58:58 | 显示全部楼层
这次好了,不会崩了
但有个新的问题
我用了一个视频格式扩展脚本,现在这个版本会跳过视频播放(不播放视频),以前的版本并没有这个问题

以下是我用的视频格式扩展脚本

另外想问题个问题:就是SV100多人战斗,并显示武器画面会卡顿很明显的问题,以后会优化吗?谢谢

RUBY 代码复制
  1. =begin
  2.  ■ RGDS_SP ver 0.0.1.2
  3.  動画再生スクリプト(表示系)for VX Ace
  4.  動画再生スクリプト(ベース)より下に配置してください。
  5.  
  6. =end
  7.  
  8.  
  9.  
  10.  
  11. module RGDS_SP
  12.   @@visible = false
  13.  
  14.   # ■ 動画設定クラス $game_system.movie_infoで使用
  15.   class MovieInfo
  16.     attr_reader :x
  17.     attr_reader :y
  18.     attr_reader :z
  19.     attr_reader :width_max
  20.     attr_reader :height_max
  21.     attr_reader :origin_center
  22.     attr_accessor :mode
  23.     attr_accessor :refresh_flag
  24.     def initialize
  25.       @x = Graphics.width / 2
  26.       @y = Graphics.height / 2
  27.       @z = 500
  28.       @width_max  = 0
  29.       @height_max = 0
  30.       @origin_center = true
  31.       @mode = 0
  32.       @refresh_flag = false
  33.     end
  34.  
  35.     # セッター
  36.     def x=(n)
  37.       @x = n
  38.       @refresh_flag = true
  39.     end
  40.     def y=(n)
  41.       @y = n
  42.       @refresh_flag = true
  43.     end
  44.     def z=(n)
  45.       @z = n
  46.       @refresh_flag = true
  47.     end
  48.     def width_max=(n)
  49.       @width_max = n
  50.       @refresh_flag = true
  51.     end
  52.     def width_max=(n)
  53.       @width_max = n
  54.       @refresh_flag = true
  55.     end
  56.     def origin_center=(flag)
  57.       @origin_center = flag
  58.       @refresh_flag = true
  59.     end
  60.  
  61.     # ■ 表示位置、サイズを指定します。
  62.     #- x, y: 表示座標
  63.     #- width_max, height_max: 表示枠。この内部に収まるように拡大縮小します。
  64.     #                       : どちらかが0以下の場合拡大縮小は行われません。
  65.     #- orogin: 表示位置基準点 false(デフォ): 動画の左上, true: 動画の中心を上記
  66.     #-         の[x,y]にあわせます
  67.     def set_position(x=0,y=0,width_max=0,height_max=0,origin=false)
  68.       @x = x
  69.       @y = y
  70.       @width_max  = width_max
  71.       @height_max = height_max
  72.       @origin_center = origin
  73.       @refresh_flag = true
  74.     end
  75.  
  76.     # ■ 以降の表示位置、サイズをデフォルトに戻します。
  77.     # 拡大縮小なし、左上にあわせて表示
  78.     def reset_position
  79.       @x = Graphics.width / 2
  80.       @y = Graphics.height / 2
  81.       @width_max  = 0
  82.       @height_max = 0
  83.       @origin_center = true
  84.       @refresh_flag = true
  85.     end
  86.  
  87.   end
  88.  
  89.  
  90.   class MovieSprite < ::Sprite
  91.     # 初期化
  92.     def initialize(viewport=nil)
  93.       super
  94.       self.visible = false
  95.       self.bitmap = RGDS.bitmap
  96.       fix_position()
  97.     end
  98.  
  99.     # 拡大縮小処理
  100.     def change_zoom
  101.       zoom = 1.0
  102.       bw = self.bitmap.width
  103.       bh = self.bitmap.height
  104.       return if bw <= 0 or bh <= 0
  105.       if $game_system.movie_info.width_max > 0 and $game_system.movie_info.height_max > 0
  106.         zoom_w = $game_system.movie_info.width_max.to_f / bw.to_f
  107.         zoom_h = $game_system.movie_info.height_max.to_f / bh.to_f
  108.         zoom = [zoom_w, zoom_h].min
  109.       end
  110.       self.zoom_x = zoom
  111.       self.zoom_y = zoom
  112.     end
  113.  
  114.     # 表示位置変更
  115.     def fix_position
  116.       self.x = $game_system.movie_info.x
  117.       self.y = $game_system.movie_info.y
  118.       self.z = $game_system.movie_info.z
  119.       if $game_system.movie_info.origin_center
  120.         self.ox = self.bitmap.width / 2
  121.         self.oy = self.bitmap.height / 2
  122.       end
  123.       change_zoom()
  124.     end
  125.  
  126.     def update
  127.       if (self.visible = RGDS.visible)
  128.         if RGDS.bitmap_changed? or self.bitmap.disposed?
  129.           self.bitmap = RGDS.bitmap
  130.           fix_position()
  131.           RGDS.bitmap_changed = false
  132.           $game_system.movie_info.refresh_flag = false
  133.         elsif $game_system.movie_info.refresh_flag
  134.           fix_position()
  135.           $game_system.movie_info.refresh_flag = false
  136.         end
  137.       end
  138.       super
  139.     end
  140.   end
  141.  
  142.   module_function
  143.  
  144.   # ■ 動画をオープンします。初回は1~2秒ほどかかる場合もあります。
  145.   def open(filename)
  146.     RGDS.open(filename)
  147.   end
  148.  
  149.   # ■ 動画を停止しクローズします。
  150.   def close
  151.     RGDS.close()
  152.   end
  153.  
  154.   # ■ openされた動画を再生します。一時停止中なら再開します。
  155.   # 再生が終わると自動的にクローズします。
  156.   def run
  157.     RGDS.run()
  158.   end
  159.  
  160.   # ■ 動画を一時停止します。再開はrunで行います。
  161.   def pause
  162.     RGDS.pause()
  163.   end
  164.  
  165.   # ■ 動画をオープンして自動再生します。
  166.   #- 決定キーでスキップします。
  167.   def start_movie(filename, option={})
  168.  
  169.     # スキップ検出オプション
  170.     if option.key?(:skip_sw)
  171.       skip_sw = option[:skip_sw].to_i
  172.     else
  173.       skip_sw = 0
  174.     end
  175.  
  176.     # スキップ禁止モードオプション
  177.     if option.key?(:nsm)
  178.       nsm_mode = option[:nsm]
  179.     else
  180.       nsm_mode = false
  181.     end
  182.  
  183.     if skip_sw > 0
  184.       $game_switches[skip_sw] = true
  185.     end
  186.     scene_temp = SceneManager.scene
  187.     if scene_temp.is_a?(Scene_Map) or scene_temp.is_a?(Scene_Battle)
  188.       msgv = SceneManager.scene.instance_variable_get(:@message_window)
  189.       msgv.update
  190.       tempv = msgv.visible
  191.       msgv.visible = false
  192.       # オープン
  193.       RGDS.open(filename)
  194.       RGDS.run()
  195.       # 終了またはボタンが押されるまでループ
  196.       loop do
  197.         break if scene_temp != SceneManager.scene
  198.  
  199.         # 画面の更新
  200.         if SceneManager.scene.is_a?(Scene_Map)
  201.           SceneManager.scene.update_for_fade
  202.         else
  203.           SceneManager.scene.update_basic
  204.         end
  205.  
  206.         if !RGDS.active? # 再生終了
  207.           if skip_sw > 0
  208.             $game_switches[skip_sw] = false
  209.           end
  210.           break
  211.         end
  212.         unless nsm_mode
  213.           if Input.trigger?(Input::A)# or Input.trigger?(Input::B)
  214.             break
  215.           end
  216.         end
  217.       end
  218.       RGDS.close()
  219.       msgv.visible = tempv
  220.     end
  221.   end
  222.  
  223.  
  224.   # ■ 以降の表示位置、サイズを指定します。
  225.   #- x, y: 表示座標
  226.   #- width_max, height_max: 表示枠。この内部に収まるように拡大縮小します。
  227.   #                       : どちらかが0以下の場合拡大縮小は行われません。
  228.   #- origin: 表示位置基準点 false: 動画の左上, true: 動画の中心を上記
  229.   #-         の[x,y]にあわせます
  230.   def set_position(x=0,y=0,width_max=0,height_max=0,origin=false)
  231.     $game_system.movie_info.set_position(x,y,width_max,height_max,origin)
  232.   end
  233.  
  234.   # ■ 以降の表示位置、サイズをデフォルトに戻します。
  235.   # 拡大縮小なし、中央にあわせて表示
  236.   def reset_position
  237.     $game_system.movie_info.reset_position()
  238.   end
  239.  
  240.   # 再生音量取得
  241.   def get_volume
  242.     return RGDS.get_volume()
  243.   end
  244.  
  245.   # 再生音量設定
  246.   def set_volume(volume)
  247.     return RGDS.set_volume(volume)
  248.   end
  249.  
  250. end
  251.  
  252. class Game_System
  253.   def init_movie_info
  254.     @movie_info = RGDS_SP::MovieInfo.new
  255.   end
  256.   def movie_info
  257.     init_movie_info() if @movie_info.nil?
  258.     return @movie_info
  259.   end
  260. end
  261.  
  262.  
  263. class Spriteset_Map
  264.   alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
  265.   def initialize
  266.     # 元の処理
  267.     _hn_movie__initialize
  268.     # 追加処理
  269.     create_movie
  270.     update_movie
  271.   end
  272.  
  273.   alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
  274.   def dispose
  275.     dispose_movie
  276.     _hn_movie__dispose
  277.   end
  278.  
  279.   alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
  280.   def update
  281.     update_movie
  282.     _hn_movie__update
  283.   end
  284.  
  285.   # ■ シーン移行時に動画を待機モードにします。
  286.   def create_movie
  287.     @sp_movie = RGDS_SP::MovieSprite.new()
  288.     @sp_movie.viewport = @viewport1
  289.     RGDS.system_resume
  290.   end
  291.  
  292.   # ■ シーン移行時に動画を待機モードにします。
  293.   def dispose_movie
  294.     RGDS.system_pause
  295.     @sp_movie.viewport = nil
  296.     @sp_movie.dispose
  297.     @sp_movie = nil
  298.   end
  299.  
  300.   def update_movie
  301.     if RGDS.active?
  302.       RGDS.update
  303.     end
  304.     @sp_movie.update unless @sp_movie.nil?
  305.   end
  306. end
  307.  
  308. class Spriteset_Battle
  309.   alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
  310.   def initialize
  311.     # 元の処理
  312.     _hn_movie__initialize
  313.     # 追加処理
  314.     create_movie
  315.     update_movie
  316.   end
  317.  
  318.   alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
  319.   def dispose
  320.     dispose_movie
  321.     _hn_movie__dispose
  322.   end
  323.  
  324.   alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
  325.   def update
  326.     update_movie
  327.     _hn_movie__update
  328.   end
  329.  
  330.   # ■ シーン移行時に動画を待機モードにします。
  331.   def create_movie
  332.     @sp_movie = RGDS_SP::MovieSprite.new()
  333.     @sp_movie.viewport = @viewport1
  334.     RGDS.system_resume
  335.   end
  336.  
  337.   # ■ シーン移行時に動画を待機モードにします。
  338.   def dispose_movie
  339.     RGDS.system_pause
  340.     @sp_movie.viewport = nil
  341.     @sp_movie.dispose
  342.     @sp_movie = nil
  343.   end
  344.  
  345.   def update_movie
  346.     if RGDS.active?
  347.       RGDS.update
  348.     end
  349.     @sp_movie.update unless @sp_movie.nil?
  350.   end
  351. end
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-6-29 12:51:35 | 显示全部楼层
之前使用 1024 *640 的分辨率
SV横版战斗脚本,7个VS 8个的战斗,敌我双方全显示武器图标,结果战斗时明显有掉帧,并且战斗动画有卡顿现象

现在改回640 * 480 的分辨率
SV横版战斗脚本,5个VS 5个的战斗,敌我双方全显示武器图标,结果战斗还是会掉帧,战斗动画也有卡顿现象

想知道这个问题会优化吗

点评

抱歉我真的不了解SV是什么实现原理……把武器图标从bitmap绘制换成精灵动画试试?  发表于 2018-6-29 13:44
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-8-24 18:32:11 | 显示全部楼层
把这个用在SV横版战斗中,敌人的武器坐标不对,坐标偏右上了
早期版本是敌我双方武器坐标都不对,现在我方的对了,但敌方的还是不对

点评

太好了  发表于 2018-8-24 20:49
过一段时间要发布新版本了,试试新版本吧。  发表于 2018-8-24 19:31
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-8-29 23:38:04 | 显示全部楼层
迫不及待试了一下,SV敌人武器的坐标还是歪的...

点评

或者麻烦你传一下自己的工程吧,我下了sideview,里面没敌人武器这东西。  发表于 2018-8-30 08:38
如果能有比较简单的工程就方便测试了……能帮忙提取出关键部分嘛?  发表于 2018-8-30 06:17
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2018-8-30 09:55:15 | 显示全部楼层
本帖最后由 devil033 于 2018-8-30 09:56 编辑

这是弄个简单的工程

Project4.rar

1.49 MB, 下载次数: 178

点评

我这边缺了素材 damage_num  发表于 2018-8-30 12:49
感谢,我去看看  发表于 2018-8-30 12:44
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2019-5-4 01:19:33 | 显示全部楼层
leontonydz 发表于 2019-5-2 21:37
9姐姐,工程发上来了帮忙看看,新开的就没问题

经过很无聊的测试,确定新建敌人数量为683的时候还是正常的,684个以上就崩了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

发表于 2019-12-27 23:02:10 | 显示全部楼层
1.4用了很多窗口的字Z值比窗口小,在窗口后面的
1.32并没有这个问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-19 10:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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