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

Project1

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

更改窗体分辨率真实版。

 关闭 [复制链接]

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

跳转到指定楼层
1
发表于 2007-8-16 00:24:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
针对提问区的两个问题而写,
http://rpg.blue/viewthread.php?tid=61618
http://rpg.blue/viewthread.php?tid=63926

费了差不多一小时,主要最开始陷入误区,在MSDN找了许久
SetClientRect函数,却没找到,只好绕圈换个角度修改。

解决两个问题,
一:更改客户区大小,即显示画面真实的分辨率,而不是窗体。
二:自动居中。

if $myfirst == nil
  
   $myfirst = 'myGod'  
   宽度=800
   高度=600
   游戏ini名=".\\Game.ini"
   val = "\0"*256
   gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
   gps.call("Game", "Title", "", val, 256, 游戏ini名)
   val.delete!("\0")
   title = val
   fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
   hWnd = fw.call("RGSS Player", title)
   swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')

   pointwds = [0,0,0,0].pack('llll')
   pointcet = [0, 0].pack('ll')

   wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
   client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

   wdsrect.call(hWnd,pointwds)
   client_screen.call(hWnd, pointcet)

   wds = pointwds.unpack('llll')
   cet = pointcet.unpack('ll')

   addw =  wds[2] - wds[0] - 640
   addh =  wds[3] - wds[1] - 480

   x = wds[0] - (宽度 - 640) / 2
   y = wds[1] - (高度 - 480) / 2

   swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
   
end



此为原版,对照测试下,即可明白区别。
http://rpg.blue/web/htm/news547.htm
纵然千里外,我等雁归来。

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

2
 楼主| 发表于 2007-8-16 00:24:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
针对提问区的两个问题而写,
http://rpg.blue/viewthread.php?tid=61618
http://rpg.blue/viewthread.php?tid=63926

费了差不多一小时,主要最开始陷入误区,在MSDN找了许久
SetClientRect函数,却没找到,只好绕圈换个角度修改。

解决两个问题,
一:更改客户区大小,即显示画面真实的分辨率,而不是窗体。
二:自动居中。

if $myfirst == nil
  
   $myfirst = 'myGod'  
   宽度=800
   高度=600
   游戏ini名=".\\Game.ini"
   val = "\0"*256
   gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
   gps.call("Game", "Title", "", val, 256, 游戏ini名)
   val.delete!("\0")
   title = val
   fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
   hWnd = fw.call("RGSS Player", title)
   swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')

   pointwds = [0,0,0,0].pack('llll')
   pointcet = [0, 0].pack('ll')

   wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
   client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

   wdsrect.call(hWnd,pointwds)
   client_screen.call(hWnd, pointcet)

   wds = pointwds.unpack('llll')
   cet = pointcet.unpack('ll')

   addw =  wds[2] - wds[0] - 640
   addh =  wds[3] - wds[1] - 480

   x = wds[0] - (宽度 - 640) / 2
   y = wds[1] - (高度 - 480) / 2

   swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
   
end



此为原版,对照测试下,即可明白区别。
http://rpg.blue/web/htm/news547.htm
纵然千里外,我等雁归来。

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

3
 楼主| 发表于 2007-8-16 00:31:29 | 只看该作者
以下引用暴动冲锋于2007-8-15 16:28:58的发言:

是不是直接把画面扯成高分辨率?


将原本更改窗体改为更改用户区。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
4
发表于 2007-8-16 01:04:29 | 只看该作者
还需要改一下视口的大小,同时很多坐标以及矩形的边缘也需要调整……

再测试测试 - -bbb

3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
265
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

5
发表于 2007-8-16 01:07:48 | 只看该作者
这个太好了,直接可以把分辨率弄大了....

找了一下,原来实现并不复杂,只是从来没想过这个问题竟然可以这样解决.......太神奇了....{/fd}
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2007-6-3
帖子
801
6
发表于 2007-8-16 01:26:15 | 只看该作者
以下引用亿万星辰于2007-8-15 17:07:48的发言:

这个太好了,直接可以把分辨率弄大了....

找了一下,原来实现并不复杂,只是从来没想过这个问题竟然可以这样解决.......太神奇了....


[本贴由作者于 2007-8-15 17:19:06 最后编辑]

哈哈~{/cy}
无签名,不解释
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
25
在线时间
0 小时
注册时间
2006-4-12
帖子
1
7
发表于 2007-8-16 06:37:04 | 只看该作者
AdjustWindowRectEx
版主对此帖的评论:『你在干嘛?』,积分『-200』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
版主对此帖的认可:『不好意思』,积分『+220』。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-22
帖子
519
8
发表于 2007-8-16 07:18:16 | 只看该作者
目前试验结果如下 - -bbbbbb

修改viewports和矩形坐标、范围后,战斗场景可以实现800*600

问题是地图类……仅仅修改Tilemap的关联视口范围会产生比较RP的问题……

只能显示部分640*480之外的地图元件。

怀疑是否需要接着修改Tilemap类中的一些方法,因为不能显示出来的大多是自动元件。

而Tilemap类在帮助内并没有给出……

头脑混乱了  @_@
3rd chapter ==> 55% 完工日期===>202X年?

跳不跳呢跳不跳呢跳不跳呢……下个项目死磕HQ……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

贵宾

梦石
0
星屑
50
在线时间
261 小时
注册时间
2005-10-21
帖子
489

贵宾

9
发表于 2009-6-12 08:00:00 | 只看该作者
minji发言的

AdjustWindowRectEx

不是乱写的

AdjustWindowRectEx 是API函数 该函数依据所需客户矩形大小,计算需要的窗口矩形的大小

望版主 加上他的分~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

贵宾

梦石
0
星屑
50
在线时间
261 小时
注册时间
2005-10-21
帖子
489

贵宾

10
发表于 2007-8-16 16:20:09 | 只看该作者
这个东西研究了很久了~~

就是无法完美化~~~

{/cy}{/cy}{/cy}

美兽大大 不如 出两套套800X600和1024X78的默认系统

刷新以前是一个大问题,再就是速度
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-15 16:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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