楼主: ⑨姐姐

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

 火 [复制链接]
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2019-1-13 15:53:38 | 显示全部楼层
因为游戏需要输入法,就使用了之前一直表现良好的《完美输入法 by 夏娜》,结果在RGD上有一点小问题。

看上去在输入框打开时,本机的中文输入法被屏蔽了。只能打英文……

原版的 exe 没有此问题,输入键会先被输入法拦截,然后再传给输入框

并且在输入框打开一次过后,Input.trigger? 方法就失效了,RInput.trigger? 方法调用 API: GetKeyState 却可以成功

输入法我做了一点修改以适应VA,详情请看这个工程: RGD-typefield.zip (2.83 MB, 下载次数: 100)

要不RGD自带一个输入法呗

点评

可能找到原因了,正在测试……  发表于 2019-1-14 15:10
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
2197
在线时间
225 小时
注册时间
2018-4-23
回帖
83
发表于 2019-1-14 16:32:58 | 显示全部楼层
pajiman1999 发表于 2018-12-31 15:38
播放视频功能 有没有具体要求  我播放的视频 速度变快一倍 而且没有声音

是wmv格式 但是在游戏里播放 视频速度是翻倍的
回复

使用道具 举报

梦石
28
星屑
10170
在线时间
4673 小时
注册时间
2011-8-22
回帖
1216

开拓者

 楼主| 发表于 2019-1-14 23:38:45 | 显示全部楼层
guoxiaomi 发表于 2019-1-13 15:53
因为游戏需要输入法,就使用了之前一直表现良好的《完美输入法 by 夏娜》,结果在RGD上有一点小问题。

看 ...

RGD里用了一个选项屏蔽了默认输入法,防止开着中文输入法结果按不动游戏的现象……没想到也带来负面结果了。

这个工程我回头再看看

点评

试了一下,在输入框关闭之后Esc, Enter, Space这几个键无响应,但是字母键多按几下还能用。  发表于 2019-1-15 01:47

评分

参与人数 1赞 +1 收起 理由
guoxiaomi + 1 我很赞同

查看全部评分

回复

使用道具 举报

梦石
2
星屑
5550
在线时间
2566 小时
注册时间
2012-2-9
回帖
947

开拓者

发表于 2019-1-20 19:02:57 | 显示全部楼层
姐姐,是这样的,我写了个webp解码的dll,需要自己修改 Bitmap 里的像素值。
以前的版本,dll 里只要把解码以后的数据 memcpy 到 bitmap.address 就好了。如果用RGD的话,我看了你的兼容解决方法:

  1. class Bitmap
  2.   def _dump(limit)
  3.   data = "rgba" * width * height
  4.   process_color { |color_arr|
  5.     color_arr.save_data(data, width * height)
  6.   }
  7.   [width, height, Zlib::Deflate.deflate(data)].pack("LLa*")
  8.   end
  9.   def self._load(str)
  10.     w, h, zdata = str.unpack("LLa*")
  11.     data = Zlib::Inflate.inflate(zdata)
  12.     bmp = self.new(w, h)
  13.     bmp.process_color { |color_arr|
  14.       color_arr.load_data(data, w * h)
  15.     }
  16.     return bmp
  17.   end
  18. end
复制代码


这一段我没有看懂,像素值的数据存储在哪一个变量里?如果我需要一个提供给c,用来存数据的指针,应该怎么做?

以上:
万分感谢

回复

使用道具 举报

老黄鸡

梦石
4
星屑
45726
在线时间
7951 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2019-1-20 19:20:41 | 显示全部楼层
garfeng 发表于 2019-1-20 19:02
姐姐,是这样的,我写了个webp解码的dll,需要自己修改 Bitmap 里的像素值。
以前的版本,dll 里只要把解码 ...

看来你只能把dll处理好的数据以字符串形式返回给ruby,然后用
bitmap.process_color {|ca| ca.load_data(string,w*h)}来覆盖这个bitmap

点评

谢谢黄鸡巨巨,我试试  发表于 2019-1-20 20:23

评分

参与人数 1赞 +1 收起 理由
garfeng + 1 塞糖

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2019-1-28 22:56:45 | 显示全部楼层
当使用地图遮挡提示的脚本时RGD会变得非常卡,每次修改保存工程后Game.ini文件里的Library=System\RGSS301.dll 都会变回RGSS300很烦
点击展开/收起
[pre lang="ruby"]
=begin
      RGSS3
      
      ★ ☆タイル判定下プレイヤー強調 ★
      
      プレイヤーが木の裏などの☆判定のタイル下にいる際、
      プレイヤー頭上にカーソルを描画&再生することで現在地を強調します。
      
      ● 仕様 ●==========================================================
      表示されるカーソルは、
      指定したウィンドウスキンのポーズサイン用カーソルになります。
      ====================================================================
      
      ver1.00

      Last Update : 2013/06/28
      06/28 : RGSS2からの移植
      
      ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end

#===================================
#  ●設定箇所
#===================================
module Rokan
module Star_Push_Player
  # プレイヤー強調に使用するカーソルを収めたウィンドウスキン名
  PUSH_SKINNAME = "Window"
  # カーソル表示位置調整(Y座標)
  ADJUST_PUSH_POSITION = 0
  # イベント時は☆タイル下にプレイヤーが存在しても強調を行わない
  EVENT_NOPUSH = true
end
end
#===================================
#  ここまで
#===================================

$rsi = {} if $rsi == nil
$rsi["☆タイル判定下プレイヤー強調"] = true

class Game_Map
  #--------------------------------------------------------------------------
  # ● 指定位置☆判定
  #--------------------------------------------------------------------------
  def on_star?(x, y)
    if events_xy(x, y).any?{|event| event.priority_type == 2}
      true
    elsif all_tiles(x, y).any?{|tile_id| tileset.flags[tile_id] == 0x610}
      true
    else
      false
    end
  end
end

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● インクルード Rokan::Star_Push_Player
  #--------------------------------------------------------------------------
  include Rokan::Star_Push_Player
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias push_window_initialize initialize
  def initialize(viewport, character = nil)
    creat_push_window(character)
    push_window_initialize(viewport, character)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  alias dispose_push_window dispose
  def dispose
    @push_window.dispose if @push_window
    dispose_push_window
  end
  #--------------------------------------------------------------------------
  # ● ☆判定下プレイヤー強調カーソル表示用のウィンドウ生成
  #--------------------------------------------------------------------------
  def creat_push_window(character)
    @push_window = Window_Push.new if character.is_a?(Game_Player)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias push_window_update update
  def update
    if @character.is_a?(Game_Player)
      if !$game_map.interpreter.running? || !EVENT_NOPUSH
        @push_window.x = @character.screen_x - 16
        @push_window.y = @character.screen_y - 80 + ADJUST_PUSH_POSITION
        @push_window.visible = $game_map.on_star?(@character.x, @character.y)
        @push_window.update
      else
        @push_window.visible = false
      end
    end
    push_window_update
  end
end

#==============================================================================
# ■ Window_Push
#------------------------------------------------------------------------------
#  pauseが真の際にカーソルの表示再生のみを行うシンプルなウィンドウクラスです。
#==============================================================================
class Window_Push < Window
  #--------------------------------------------------------------------------
  # ● インクルード Rokan::Star_Push_Player
  #--------------------------------------------------------------------------
  include Rokan::Star_Push_Player
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super()
    self.windowskin = Cache.system(PUSH_SKINNAME)
    self.z = 100
    self.width, self.height = 32, 32
    self.opacity  = 0
    self.visible  = false
    self.pause    = true
  end
end
[/pre]

还不知道有什么其他脚本会导致变卡,但我觉得有了一个一定会有两个三个吧

点评

可以把301重命名为300,丢进va软件的文件夹里的,狸猫换太子  发表于 2019-1-28 23:24
回复

使用道具 举报

梦石
2
星屑
5550
在线时间
2566 小时
注册时间
2012-2-9
回帖
947

开拓者

发表于 2019-1-31 00:22:37 | 显示全部楼层
fux2 发表于 2019-1-20 19:20
看来你只能把dll处理好的数据以字符串形式返回给ruby,然后用
bitmap.process_color {|ca| ca.load_data( ...

黄鸡巨巨,返回的字符串其实是在c里malloc的一段内存,ruby的垃圾回收,会主动将它销毁吗?

或者需要加一个接口,再次把字符串指针传回去,给c free掉?

我试了一下,如果再传回来free的话,程序就会崩溃……
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45726
在线时间
7951 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2019-1-31 21:01:45 | 显示全部楼层
garfeng 发表于 2019-1-31 00:22
黄鸡巨巨,返回的字符串其实是在c里malloc的一段内存,ruby的垃圾回收,会主动将它销毁吗?

或者需要加 ...

应该不会呀,load_data的时候会把传过来的数据拷贝一份,释放应该在C里面完成就可以了。

点评

嗯,明白了。谢谢~  发表于 2019-1-31 22:29
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
回帖
4020

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

发表于 2019-1-31 23:35:19 | 显示全部楼层
你们现在组织在哪里?拉我入个群?

点评

发私信啦。  发表于 2019-2-1 11:49
[url=http://weibo.com/2238291690?s=6uyXnP]
回复

使用道具 举报

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
回帖
4020

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

发表于 2019-2-1 15:49:18 | 显示全部楼层
_(:з」∠)_ 我权限不够回复私信 QQ 398756862,记得拉我
[url=http://weibo.com/2238291690?s=6uyXnP]
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部