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

Project1

 找回密码
 注册会员
搜索
楼主: guoxiaomi
打印 上一主题 下一主题

[原创发布] 【RGM】RGModern 1.0.4 - RMXP新runtime

[复制链接]

Lv5.捕梦者

梦石
0
星屑
37789
在线时间
5399 小时
注册时间
2006-11-10
帖子
6546
51
发表于 2023-5-16 10:01:12 | 只看该作者
本帖最后由 灯笼菜刀王 于 2023-5-17 12:01 编辑

没有找到 error.log 这个文件

cmd是这样的




Scripts.rar

134.36 KB, 阅读权限: 100, 下载次数: 2

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

52
 楼主| 发表于 2023-5-16 11:52:21 | 只看该作者
本帖最后由 guoxiaomi 于 2023-5-16 12:06 编辑
灯笼菜刀王 发表于 2023-5-16 10:01
没有找到 error.log 这个文件

cmd是这样的


在graphics.update里出错,你只需要依次排查Scene_Title里的绘制的那些对象,应该就可以找到是绘制哪个对象导致的问题了。

个人觉得有可能是你修改或者继承了内部类,并且使用了属性名称相同的实例变量,如 @x,@visible 等,并且在使用时改变了它们原本的类型,比如 @x = 0.0 这种,RGM要求很严格,很多属性不能是浮点数,包括color、tone的rgb值等。

以Sprite举例,原版的Sprite是一个C结构体的wrapper,没有定义实例变量 @x,只定义了self.x和self.x=方法来访问对应的数据,如果在此类中定义了 @x,这个变量跟绘制无关。

RGM则设置了相应的实例变量 @x,并且给此实例变量定义了 self.x= 和 self.x(其实是attr_reader) 方法。如果在此类中直接修改了 @x,可能设置会失败,但如果 @x 的类型变成了浮点数就可能出大问题。

另外@color,@tone这种实例变量,只要类型还是Color或者Tone,是可以自由操作的,但是如果类型变了,比如设置@color=0,也可能会出问题。

最好的方法就是完全不操作实例变量,改用self.x,self.x=这两个接口。或者仔细检查是否存在给特定属性赋值了浮点数的情况。

点评

可以哦, 我猜是重定义了 def x=(x) 的关系吧  发表于 2023-5-17 11:53
能把脚本发我一份吗,我看看你怎么绕过我写的to_i,我试一下能不能防一手。  发表于 2023-5-17 00:37
按说我代码里都有to_i的。。。你是咋绕过判断机制的……  发表于 2023-5-16 22:16
title里就是默认的界面, 不过窗口我增加了滑动条... emmm,这里同时用到color的浮点(我用像素点当参数设置)和坐标浮点....  发表于 2023-5-16 15:11
厄, sprite的坐标,宽高,角度我是全用浮点=.=... 毕竟运动算式常用到, 尤其我行走图是用龙骨的,更是全浮点标志  发表于 2023-5-16 15:09
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

53
 楼主| 发表于 2023-5-18 23:29:13 | 只看该作者
本帖最后由 guoxiaomi 于 2023-5-18 23:38 编辑
灯笼菜刀王 发表于 2023-5-16 10:01
没有找到 error.log 这个文件

cmd是这样的


查出来的问题是你使用了Bitmap#dup方法,但是RGM没有定义此方法,可能就自动使用父类Object的实现了。然而Bitmap有部分数据在显存中,dup之后就不能再还原了。RGM定义了clone方法,可以作为dup的替代:
  1. class Bitmap
  2.   alias dup clone
  3. end
复制代码

如果你看源码就会发现clone的定义非常直接:
  1.   def clone
  2.     b = Bitmap.new(@width, @height)
  3.     b.blt(0, 0, self, rect)
  4.     b
  5.   end
复制代码

顺便我发现你还使用了SailCat写的的Bitmap#to_grayscale,RGM也定义了转换成灰度图的方法Bitmap#grayscale,此方法调用的是内部函数,效率会高很多,推荐使用。范例工程里也有此方法的应用:在截图保存时会变成灰度图。

可以查阅src/script/bitmap.rb了解RGM中Bitmap的各方法。

点评

rgss中的RPG::Cache#load_bitmap使用了clone方法,所以定义的是clone  发表于 2023-5-19 11:52
我用dup纯粹是因为可以比clone少打几个字=.=~ 我试试换成clone看看  发表于 2023-5-19 11:20
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
473
在线时间
68 小时
注册时间
2022-4-1
帖子
29
54
发表于 2023-5-25 10:47:52 | 只看该作者
WC,这玩意儿太劲爆了(
我大xp还能再战300年(
但范例工程沙滩这里的水怎么有黑色点点啊(

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
380
在线时间
47 小时
注册时间
2013-1-10
帖子
5
55
发表于 2023-5-25 21:48:55 | 只看该作者
1.0.1版改了啥啊

点评

更新日志:https://github.com/gxm11/RGModern/releases/tag/v1.0.1  发表于 2023-5-25 23:05
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
791
在线时间
85 小时
注册时间
2020-12-15
帖子
25
56
发表于 2023-5-27 01:24:12 | 只看该作者
纯萌新 打开范例工程跳这个是什么原因呢?

点评

试一下1.0.2版本?  发表于 2023-5-27 06:38
哦我知道了,可能是你使用了一种不能识别的手柄,我只测试过xbox  发表于 2023-5-27 04:46
会不会是没安装directx?  发表于 2023-5-27 04:43
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

57
 楼主| 发表于 2023-5-27 06:36:11 | 只看该作者
补充一下迄今的更新日志:

## [1.0.2] - 2023-05-27
### 新增
- 新增了 ext/gamecontrollerdb.txt 文件,并在程序中内嵌此文件以支持多种控制器。

## [1.0.1] - 2023-05-12
### 修复
- 修复了 Game.exe(Build Mode 2)无法在中文路径下运行的问题。
- 给 config.ini 文件头部添加了 License,以解决 UTF8-BOM 头导致 `[Game]` 匹配失败的问题。
### 优化
- Viewport 的 dispose 会将 @data_ptr 设置为 nil。
- Graphics 的 set_title 在显示 FPS 的场合会立即生效,而不是跟随下一次 FPS 更新。
- 对 Finder 中缓存的路径字符串执行 freeze。
- 给 src/shader 下的 C++ 代码添加了注释。
- 给部分 C++ 函数添加了`[[nodiscard]]`、`noexcept` 和 `const` 的标记。
- rgm::ext::zip_data_external 类中的 load_texture 和 load_surface 返回 std::optional,而不是裸指针。若返回了 std::nullopt,后续流程中会抛出异常。
- 第 4 个 worker 的标签从 table 改名为 aside。
- rgm::shader 中各类的静态变量全部 inline 处理。
### 新增
- config.ini 的 `[System]` 栏目中添加了 ScreenScaleMode 词条,此值可以设置为 0~3,分别对应不同的画面缩放模式:0:最近邻,1:线性,2:最佳,3:不缩放且居中。
- Input 的 bind 的第二个参数可以使用整数,之前必须是常量名对应的 Symbol。
- config.ini 的 `[Keymap]` 可以使用数字代替虚拟按键的常量名。比如:`K_DOWN=2`。这样便于绑定自定义虚拟按键,因为在读取这部分内容时,很可能自定义虚拟按键的常量尚未定义,如果使用常量名则会报错。
- 新增了 src/script/rgm_defines.rb 文件,可以查看 RGM 模块中定义的方法和常量。仅用于提示开发者 RGM 模块中的内容,不能在脚本中执行。此外,此文件是扫描 C++ 代码自动生成的,故 sprite_create 等方法未列出。
- CMakeList 添加了 MSVC 中预编译头的设置。
- 新增了 src/script/kernel.rb 文件,此文件中定义了所有的全局函数。
### 删除
- 移除了 src/script 中的 main-xp.rb 和 test.rb 文件。
- 移除了 src/script 下的 debug.rb 文件,代码移动到新增的 kernel.rb 文件中。
- 移除了 src/rmxp/drawable.hpp 中复杂的 pmr 方案。此方案并未实装,目前使用的是简单的 pmr 方案。
- 移除了 rgm::init_shader 的定义,使用 rgm::shader::init_shader。

## [1.0.0] - 2023-05-04
正式版发布。

点评

那就不知道了,只能说咱修bug就是头痛医头,脚痛医脚……  发表于 2023-5-27 17:25
1.0.2可以正常打开了。不过我之前也没有接手柄啊。  发表于 2023-5-27 14:36
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
791
在线时间
85 小时
注册时间
2020-12-15
帖子
25
58
发表于 2023-5-27 14:50:04 | 只看该作者
2023-05-27 14:44:44 +0800
Error occurs when load Data/Scripts.rxdata.
no implicit conversion of nil into Integer

eval:41:in `initialize'
eval:41:in `new'
eval:41:in `initialize'
004_Win32API.rb:3:in `new'
004_Win32API.rb:3:in `<class:Win32API>'
004_Win32API.rb:1:in `block in load_scripts_from_folder'

用到Win32API的老工程有办法移植吗()

点评

win32api是支持的,你要发一下004_Win32API的第3行是什么代码  发表于 2023-5-27 17:26
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

59
发表于 2023-5-27 15:32:43 | 只看该作者
作者介绍下范例工程里面这些文件列表大概作用吗?
文件里面有个Project1工程文件夹,文件夹里面还有许多不认识的dll
希望介绍下,我好了解下,怎么才能精简的使用上RGM。

目录.png (33.64 KB, 下载次数: 17)

目录.png

点评

精简用法就是用RGM小助手编译,或者直接把项目里的Game.exe和config.ini拷贝走。  发表于 2023-5-27 17:30
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
791
在线时间
85 小时
注册时间
2020-12-15
帖子
25
60
发表于 2023-5-27 17:50:03 | 只看该作者
RTCanwind 发表于 2023-5-27 14:50
2023-05-27 14:44:44 +0800
Error occurs when load Data/Scripts.rxdata.
no implicit conversion of nil  ...

class Win32API
  @@RGSSWINDOW = nil
  @@GetCurrentThreadId       = Win32API.new('kernel32', 'GetCurrentThreadId', '%w()', 'l')
  @@GetWindowThreadProcessId = Win32API.new('user32', 'GetWindowThreadProcessId', '%w(l p)', 'l')
  @@FindWindowEx             = Win32API.new('user32', 'FindWindowEx', '%w(l l p p)', 'l')
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 09:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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