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

Project1

 找回密码
 注册会员
搜索
查看: 1395|回复: 2
打印 上一主题 下一主题

[已经过期] 很奇怪的问题:RMXP中的 Viewport 端口竟然没有 disposed? 方法?

[复制链接]

Lv2.观梦者

梦石
0
星屑
682
在线时间
372 小时
注册时间
2009-3-9
帖子
398
跳转到指定楼层
1
发表于 2013-8-29 00:11:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
刚才无意间发现一个BUG:

很奇怪的问题:RMXP中的 Viewport 端口竟然没有 disposed? 方法?

但是我查了F1:里面明确的指出——是有这个方法的,但是调用不成功。。。。

求高手解答!
新手学习中.....努力吧!!

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60715
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

2
发表于 2013-8-29 04:22:02 | 只看该作者
本帖最后由 orzfly 于 2013-8-29 05:15 编辑

因为你说求高手解答,所以不是高手的人都不敢给你回答问题了(大雾)
所以我也不是高手我很菜的所以我就不回答你了。
------------------
Enterbrain 又调皮了,确实没有 disposed? 这个方法。
XP、VX、VX Ace 都没有的说。

C 代码复制
  1. void __cdecl Init_RGSSViewport()
  2. {
  3.   if ( !rb_cViewport )
  4.   {
  5.     rb_cViewport = rb_define_class("Viewport");
  6.     rb_define_alloc_func(rb_cViewport, rgss_viewport_allocate);
  7.     rb_define_method(rb_cViewport, "clone", (int)rgss_viewport_clone, 0);
  8.     rb_define_method(rb_cViewport, "dup", (int)rgss_viewport_dup, 0);
  9.     rb_define_method(rb_cViewport, "initialize", (int)rgss_viewport_initialize, -1);
  10.     rb_define_method(rb_cViewport, "dispose", (int)rgss_viewport_dispose, 0);
  11.     rb_define_method(rb_cViewport, "flash", (int)rgss_viewport_flash, 2);
  12.     rb_define_method(rb_cViewport, "update", (int)rgss_viewport_update, 0);
  13.     rb_define_method(rb_cViewport, "rect", (int)rgss_viewport_rect, 0);
  14.     rb_define_method(rb_cViewport, "rect=", (int)rgss_viewport_rect_set, 1);
  15.     rb_define_method(rb_cViewport, "visible", (int)rgss_viewport_visible, 0);
  16.     rb_define_method(rb_cViewport, "visible=", (int)rgss_viewport_visible_set, 1);
  17.     rb_define_method(rb_cViewport, "z", (int)rgss_viewport_z, 0);
  18.     rb_define_method(rb_cViewport, "z=", (int)rgss_viewport_z_set, 1);
  19.     rb_define_method(rb_cViewport, "ox", (int)rgss_viewport_ox, 0);
  20.     rb_define_method(rb_cViewport, "ox=", (int)rgss_viewport_ox_set, 1);
  21.     rb_define_method(rb_cViewport, "oy", (int)rgss_viewport_oy, 0);
  22.     rb_define_method(rb_cViewport, "oy=", (int)rgss_viewport_oy_set, 1);
  23.     rb_define_method(rb_cViewport, "color", (int)rgss_viewport_color, 0);
  24.     rb_define_method(rb_cViewport, "color=", (int)rgss_viewport_color_set, 1);
  25.     rb_define_method(rb_cViewport, "tone", (int)rgss_viewport_tone, 0);
  26.     rb_define_method(rb_cViewport, "tone=", (int)rgss_viewport_tone_set, 1);
  27.   }
  28. }

---------
继续研究的报告:
C 代码复制
  1. a1 = object_id * 2;
  2. result = *(_DWORD *)(a1 + 16);
  3. if ( !*(_DWORD *)(result + 8) )
  4.   rb_raise(rb_cRGSSError, "disposed viewport");


所以我们可以自己写一个 disposed? 了:

RUBY 代码复制
  1. class ::Viewport
  2.   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  3.  
  4.   def disposed?
  5.     buffer = " " * 4
  6.     ad = object_id * 2 + 16
  7.     RtlMoveMemory_pi.call(buffer, ad, 4)
  8.     ad = buffer.unpack("L")[0] + 8
  9.     RtlMoveMemory_pi.call(buffer, ad, 4)
  10.     return buffer.unpack("L")[0] == 0 ? true : false
  11.   end
  12. end


@晴兰

点评

好黑的科技+1  发表于 2013-8-29 09:18
囧叔好黑的科技  发表于 2013-8-29 06:55

评分

参与人数 2星屑 +150 收起 理由
弗雷德 + 84 膜拜
凌童鞋 + 66

查看全部评分

我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
682
在线时间
372 小时
注册时间
2009-3-9
帖子
398
3
 楼主| 发表于 2013-8-29 09:20:22 | 只看该作者
哇。。。好厉害,连RGSS102J里面的函数都能研究出来,佩服了!!!

PS:弱弱的问一句—RMXP的800*600地图,除了拼接3个Viewport外,还有好的方法吗?
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-2 05:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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