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

Project1

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

[已经过期] 请问如何改变游戏窗口为任意矩形?? 注:已参考大量脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
跳转到指定楼层
1
发表于 2012-5-24 13:54:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dabojun 于 2012-5-24 20:49 编辑

理想中的游戏开机视窗应该是:1、可调控大小和长宽的矩形窗口,例如:1024*312的长卷式游戏视窗。
                                                 2、视窗能够展现游戏地图图块设置的全景,可以理解为分辨率的变化。不要截景(所谓”截景“为:只截取游戏视窗的一部分(视窗改小时))。
                                                 3、开机游戏时先显示原始视窗再跳转到长卷视窗的画面不可以出现哟~@(很影响效果…)
                                                 4、开机游戏时新视窗需要在电脑屏幕内,正中,或靠上一点的位置。(试过几个脚本新视窗打开后一部分都跑到电脑屏幕外了,影响效果的说…)
                                                                                                                                                                                                  
    接下来是楼主对于几个试用过的脚本的简单评测,希望能对大家起到一点帮助~
首先是这段“窗口大小”:
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
# ————————————————————————————————————
# 本脚本来自www.66rpg.com,转载请保留此信息
# ————————————————————————————————————

#ウィンドウサイズの変更(v1.00)

class Win32API
  GAME_INI_FILE = ".\\Game.ini"
  
  def Win32API.GetPrivateProfileString(section, key)
    val = "\0"*256
    gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')
    gps.call(section, key, "", val, 256, GAME_INI_FILE)
    val.delete!("\0")
    return val
  end

  def Win32API.FindWindow(class_name, title)
    fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')
    hWnd = fw.call(class_name, title)
    return hWnd
  end

  HWND_TOP     = 0
  HWND_TOPMOST = -1
  SWP_NOMOVE   = 2
  
  def Win32API.SetWindowPos(hWnd, w, h)
    swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')
    ok = swp.call(hWnd, HWND_TOP, 0, 0, w, h, SWP_NOMOVE)
    # 下の行を有効にすると、常に前面に表示されるウィンドウになる。
    #ok = swp.call(hWnd, HWND_TOPMOST, 0, 0, w, h, SWP_NOMOVE)
    return ok
  end
end

title =  Win32API.GetPrivateProfileString("Game", "Title")
hWnd = Win32API.FindWindow("RGSS Player", title)

# 幅320、高さ480に変更
ok = Win32API.SetWindowPos(hWnd, 320, 256)
if(ok == 0)
  p "サイズ変更失敗"
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#………………………………………………………………………………………………………………………………………………………………………………………………………………………………#
首先我插入了这段脚本,发现问题多多#¥%    总结为1、        脚本只是截取,并非使视窗变小!!
                                                                                       2、        脚本中隐藏事件冒了一下(隐藏事件有行走图,执行内容加了一段脚本和暂时消除事件)
                                                                                       3、        开始游戏时有一个窗口转化过程,很碍眼
                                                                                       4、        窗口过度拉长后多余视口黑屏(和viewport口有关吧?)
                                                                                       5、        窗口过度拉长后开机游戏窗口有一部分在电脑屏幕外

#………………………………………………………………………………………………………………………………………………………………………………………………………………………………#
不甘心的偶又尝试了这个脚本“分辨率1280*800”:


#==============================================================================
        # ■ Graphics
        #------------------------------------------------------------------------------
        #  图像模块
        #==============================================================================
       
        #--------------------------------------------------------------------------
        # ● 更待指定帧数
        #--------------------------------------------------------------------------
        def Graphics.wait(n)
          n.times{self.update;yield if defined? yield}
        end
        #--------------------------------------------------------------------------
        # ● 获取窗口宽
        #--------------------------------------------------------------------------
        def Graphics.width
          @width ||= 640
        end
        #--------------------------------------------------------------------------
        # ● 获取窗口高
        #--------------------------------------------------------------------------
        def Graphics.height
          @height ||= 480
        end
        #--------------------------------------------------------------------------
        # ● 更改窗口大小
        #--------------------------------------------------------------------------
        def Graphics.resize_screen(width, height)
          @width  ||= 640
          @height ||= 480
          
          游戏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] - @width
          addh =  wds[3] - wds[1] - @height
       
          x = wds[0] - (width - @width) / 2
          y = wds[1] - (height - @height) / 2
          
          @width  = width
          @height = height
          
          swp.call(hWnd, 0, x, y, @width + addw, @height + addh, 0x20)
        end
        Graphics.resize_screen(1280,  800)
#………………………………………………………………………………………………………………………………………………………………………………………………………………………………#
@开机显示1280*800的全屏游戏视窗,不带蓝条,但3/4黑屏(应该和视口有关?)
按alt+enter后,显示全屏,无黑屏,再按alt+enter后,缩小为小视窗,依然不带蓝条,或者说蓝条在电脑窗口以外。

重要的一点虽然测试游戏时还是要从原始视窗调整为新视窗,但视窗位置始终居中(美观啊~)
#………………………………………………………………………………………………………………………………………………………………………………………………………………………………#     

现在楼主正在看紫苏大写的句柄脚本啥的,既”启动时获取句柄 | 修改分辨率 | 窗口外观 | 加载字体“的帖子,表示脑力耗尽,求高手相助啊~~{:2_253:}
真实的我不是这样子的~@

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

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

烫烫烫开拓者

2
发表于 2012-5-24 20:03:28 | 只看该作者
表示实现这只功能就自己写个 Game.exe 然后拿钩子勾住 SetWindowPos 吧

点评

GAME.EXE怎么改,我连看都看不到诶  发表于 2012-5-26 02:12
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
3
 楼主| 发表于 2012-5-24 20:21:04 | 只看该作者
本帖最后由 dabojun 于 2012-5-24 20:33 编辑
orzfly 发表于 2012-5-24 20:03
表示实现这只功能就自己写个 Game.exe 然后拿钩子勾住 SetWindowPos 吧


以楼主现在的能力是写不会的
真实的我不是这样子的~@
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
690
在线时间
791 小时
注册时间
2011-10-20
帖子
2394

开拓者

4
发表于 2012-5-26 02:16:06 | 只看该作者
我记得有个百变窗体BY美兽这个东西,可以实现你要求哦...'
还有自动居中好象那个DNF游戏里有....
不过都需要经过黑屏+原始大小..
你可以破戒开2K的时器游戏,我记得进游戏时候他回把文件夹显示最前面再开游戏....
不过他是用外部程序来启动GAME.EXE的
欢迎点此进入我的egames.wink.ws,有RMQQ堂等

[url=http://rpg.blue/thread-317273-1-1.html]短篇八-赶选

http://yun.baidu.com/share/link?shareid=2158225779&uk=169642147&third=0


历险ARPG赢回你的疆域新的战斗模式?…………点击这里:[宋乱贼狂 for QQ堂]
http://rpg.blue/group-368-1.html
programing ....?
[url=http://rpg.blue/thrd-234658-1-1.html]
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
5
 楼主| 发表于 2012-5-26 10:28:40 | 只看该作者
本帖最后由 dabojun 于 2012-5-26 12:48 编辑
end55rpg 发表于 2012-5-26 02:16
我记得有个百变窗体BY美兽这个东西,可以实现你要求哦...'
还有自动居中好象那个DNF游戏里有....
不过都需要 ...


嗯,需要消化下~

注:已初步尝试了紫苏大的“Project4”的 “启动时获取句柄 | 修改分辨率 | 窗口外观 | 加载字体”脚本,大部分问题已经解决,可是依然有“致命伤”出现——“黑屏问题”:当我把窗口尺寸调整为1248*256时,右半边有黑屏,这个问题挺致命的,求教了#¥%

真实的我不是这样子的~@
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 20:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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