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

Project1

 找回密码
 注册会员
搜索
查看: 17178|回复: 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
在线时间
27 小时
注册时间
2007-12-16
帖子
1304
43
发表于 2008-9-15 23:24:13 | 只看该作者
那个……汗……
Graphics库究竟是怎么改的啊?
Shining...
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-8-10
帖子
273
42
发表于 2008-9-15 23:04:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2005-10-24
帖子
170
41
发表于 2008-9-14 18:05:01 | 只看该作者
以下引用冰城飞狐于2008-9-13 22:19:33的发言:

那个……还有个问题……
怎么实现800*600窗口的全屏啊?
默认全屏是这样的:

   本帖相关代码如下:
$keybd = Win32API.new 'user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v'
$keybd.call 0xA4, 0, 0, 0
$keybd.call 13, 0, 0, 0
$keybd.call 13, 0, 2, 0
$keybd.call 0xA4, 0, 2, 0



[本贴由作者于 2008-9-13 22:21:29 最后编辑]

这几行脚本不是用来全屏的…………RMXP有默认按下ALT+ENTER就全屏的功能,这几行脚本只是用脚本来模拟键盘按键而已……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

劒剋

梦石
0
星屑
50
在线时间
27 小时
注册时间
2007-12-16
帖子
1304
40
发表于 2008-9-14 06:19:33 | 只看该作者
那个……还有个问题……
怎么实现800*600窗口的全屏啊?
默认全屏是这样的:

  1. $keybd = Win32API.new 'user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v'
  2. $keybd.call 0xA4, 0, 0, 0
  3. $keybd.call 13, 0, 0, 0
  4. $keybd.call 13, 0, 2, 0
  5. $keybd.call 0xA4, 0, 2, 0
复制代码
Shining...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

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

第1届短篇游戏比赛亚军

39
 楼主| 发表于 2008-9-14 03:49:07 | 只看该作者
有个API可以冻结画面,但保持程序运行,测试成功.

有个API重绘部分画面,测试出现错误,当年只做到这里,之后在下因为那件事不玩RM了,抱歉,今天才想起还拖欠叶子一个回复......
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-12
帖子
30
38
发表于 2008-9-14 01:57:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-12
帖子
30
37
发表于 2008-9-14 01:48:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-6
帖子
42
36
发表于 2008-7-22 02:35:33 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2005-10-24
帖子
170
35
发表于 2008-7-21 17:48:49 | 只看该作者
疑难问题终于要解决了吗- -

我在用本来就有透明的PNG在冒充渐变效果呢- -
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-20 14:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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