查看: 99|回复: 0

[转载发布] RMXP多窗体 v2.0

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月七日(秋) | 显示全部楼层 |阅读模式
    新开一主题 因为改了很多 解决了很多上一版本的问题
    这次写了好多天 写到今天终于感觉 几乎是差不多了吧
    果然代码还是要慢慢慢慢写 涂涂改改涂涂改改才好发布的
    那么 现在由我来介绍 这次版本的优点
    1.窗口独立 大小随意 这次是真独立
    独立的鼠标键盘消息获取 独立的窗口焦点 独立的关闭
    和主窗口没有关联了 你可能会担心窗口失去焦点带来的不刷新的问题
    所以第二点
    2.支持后台运行 你可以指定后台运行与否
    即使失去焦点也会继续刷新
    你也可以直接不要显示窗口 当作多线程来用..
    3.支持消息传递
    虽然只支持四个整数的传递 不过可以传指针 实际上是没什么问题的
    4.内存释放优化
    这个想了很久 不过大多失败了
    不过后来发现简单的做法似乎是最有效的
    5.使用方便 很方便了
    只要给它运行的代码 告诉他窗口多大放哪里显不显示等等
    用完了判断一下是否结束就可以了

    具体使用说明请见脚本
    RMXP多窗体 v2.0



    然后是一些实现上的细节
    模仿了exe加载rgss的方式加载了新的rgss 开始问题很多 不过慢慢都解决了
    在RGSSGameMain那里我直接pass掉了控制线程的建立(原来用来检查10s和关闭进程用)
    注入了rgss原来的窗口消息处理机制 所以收到 0x10 的VM_CLOSE可以自己控制怎么关掉
    后台运行由改掉一个跳转实现 rgss收到 0x1C WM_ACTIVATEAPP  会把一个变量改成1 判断为1则刷新否则继续循环
    窗口的建立综合了createwindowex和rgss 在前者确定x和y 后面确定宽高
    在加载RSS103J的时候dllmain会建立一个heap freelibrary的时候它又会释放掉 所以只需要free就能解决很大程度上的内存泄漏
    位图和精灵则通过dispose 音频暂时没有处理 余下的大约是增加了3M 其中1M是实例带来的 所以实际上只有2M没释放 可以说是很少了
    我猜是gdi对象 大概字体啥的 没释放吧
    等等等等暂时没想那么多了就这样吧

    欢迎提出建议 不过不一定会解决就是了

    然后是一个范例:

    能很好的帮助理解脚本的使用
    范例配图


                本帖来自P1论坛作者SixRC,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=403704  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-13 20:02 , Processed in 0.048787 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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