人气 175

[游戏程序] 解决Hge窗口切换变问题 [复制链接]

九艺网 2017-3-10 17:01:15

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
       Hge1.6在窗口切换上有些问题,使用hge->System_SetState(HGE_SCREENWIDTH,size)不能实现窗口大小的动态改变。研究了下源代码,发现原代码只有hge初始化前设定窗口大小才有效,代码如下:

//system.cpp

void CALL HGE_Impl::System_SetStateInt(hgeIntState state, int value)
{
switch(state) {
  case HGE_SCREENWIDTH: if(!pD3DDevice) nScreenWidth=value; break;
  case HGE_SCREENHEIGHT: if(!pD3DDevice) nScreenHeight=value; break;


而窗口切换依赖的是_AdjustWindow();使用的是rectW(窗口模式矩形)和rectFS(全屏模式矩形),但是由于在hge初始化后修改窗口大小没有修改rectW和rectFS,所以_AdjustWindow()调用时还是依赖的初始的窗口大小。解决方法只需要其修改为:

//system.cpp

void CALL HGE_Impl::System_SetStateInt(hgeIntState state,int value)
{
switch(state) {
    case HGE_SCREENWIDTH:
   {        
   nScreenWidth=value;
   int width=nScreenWidth + GetSystemMetrics(SM_CXFIXEDFRAME)*2;   
   rectW.left=(GetSystemMetrics(SM_CXSCREEN)-width)/2;   
   rectW.right=rectW.left+width;   
   rectFS.left=0;   
   rectFS.right=nScreenWidth;   
   }
   break;   
  case HGE_SCREENHEIGHT:
   {         
   nScreenHeight=value;   
   int height=nScreenHeight + GetSystemMetrics(SM_CYFIXEDFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);   
   rectW.top=(GetSystemMetrics(SM_CYSCREEN)-height)/2;      
   rectW.bottom=rectW.top+height;   
   rectFS.top=0;   
   rectFS.bottom=nScreenHeight;     
   }
   break;


然后将hge源代码重新编译得到所需的hge.lib和hge.dll,这样窗口大小就可以动态修改了。另外游戏中常见的是全屏窗口模式的切换,由于hge动态设定全屏使用的是伪全屏方法(就是用窗口模式模拟全屏),所以在之前要设定窗口大小为屏幕大小。还有就是初始化时需要设定为窗口模式,若为全屏模式则就是真正的全屏了,之后没办法切换到窗口模式。
回复

使用道具 举报

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

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-29 13:30 , Processed in 0.129396 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.