华夏财富网

网站首页 精选百科 > 正文

跑跑卡丁车窗口模式怎么关(跑跑卡丁车窗口模式)

2022-08-22 11:40:50 精选百科 来源:
导读 大家好,小耶来为大家解答以上的问题。跑跑卡丁车窗口模式怎么关,跑跑卡丁车窗口模式这个很多人还不知道,现在让我们一起来看看吧!1、要修...

大家好,小耶来为大家解答以上的问题。跑跑卡丁车窗口模式怎么关,跑跑卡丁车窗口模式这个很多人还不知道,现在让我们一起来看看吧!

1、要修改文件是一个游戏程序的DLL,这个游戏的方式有点让人想起来,那个《剑侠情缘》也是这样的风格,还有《大话西游》也是这样的风格,什么风格呢?很简单的,就是主程序在DLL中,而EXE只是负责加载而已!  觉得发这样的贴有点没水平了,不过,通常这样的最实用吧:)!  简要说明一下:  游戏主要加速有两类:一是OpenGL,二是DirectX  而现在不知道怎么滴国产游戏都是后着,我们熟悉一下后者:  /-----------------------------------------------------------------------------------------  我们看到3D类游戏都要用到的一部分初始化,而熟悉这类编程的都说很简单的东西哦!  HRESULT CPNDX::InitD3D(HWND hWd)  {  hWnd=hWd;  // 创建D3D对象  if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )  return E_FAIL;  // 获取当前的显示模式  D3DDISPLAYMODE d3ddm;  if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )  return E_FAIL;  D3DPRESENT_PARAMETERS d3dpp;  ZeroMemory( &d3dpp, sizeof(d3dpp) );  d3dpp.Windowed = TRUE; // 窗口模式  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 设置交换模式  d3dpp.BackBufferWidth = d3ddm.Width;  d3dpp.BackBufferHeight = d3ddm.Height;  d3dpp.BackBufferFormat = d3ddm.Format; // 设置背景缓冲区格式为当前左面格式  d3dpp.EnableAutoDepthStencil = TRUE; // 打开深度缓冲zbuffer  d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 深度缓冲格式  // 创建D3D设备  // 第一个参数:使用默认的显卡适配器  // 第二个参数:请求使用硬件抽象层(HAL)  // 第三个参数:窗口句柄  // 第四个参数:使用软件处理顶点  // 第五个参数:创建的参数  // 第六个参数:创建的D3D设备指针  if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,  D3DDEVTYPE_HAL,  hWnd,  D3DCREATE_SOFTWARE_VERTEXPROCESSING,  &d3dpp,  &g_pd3dDevice ) ) )  {  return E_FAIL;  }  // 关闭culling,让我们能看到3角型的正反面  g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );  // 打开ZBUFFER  g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );  // Turn off D3D lighting  g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );  return S_OK;  }  /---------------------------------------------------------------------------------------------------  我们注意的地方是:GetAdapterDisplayMode这个函数全屏幕一般不需要,一般都是枚举  而窗口化是必须要的,如果不要这个函数也可以,那就必须自己初始化D3DDISPLAYMODE结构才可以。

2、  比如:  //前面用其他函数给它初始化了宽和高,那么后面还要初始化屏幕格式和刷新频率。

3、才能窗口化!  d3ddm.Format =D3DFMT_R5G6B5;  d3ddm.RefreshRate=0x3C;  把前面的D3DPRESENT_PARAMETERS d3dpp这个结构赋值修改如下:  d3dpp.Windowed = FALSE;  d3dpp.BackBufferCount = 1;  d3dpp.BackBufferFormat = d3ddm.Format;  d3dpp.BackBufferWidth = d3ddm.Width;  d3dpp.BackBufferHeight = d3ddm.Height;  d3dpp.hDeviceWindow = hWnd;  d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC; //这个也是必须的,不然屏幕会闪烁。

4、  d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;  d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE;  简要说完了,大家还是不太清楚就查查资料吧!没说太难,就通俗点说一下!  /----------------------------------------------------------------------------------------------------  下面的就简单了:  我们来看一下,把一个程序反汇编会是什么样子:  //很容易就发现这个了:  00406FD0 |. 68 DC000000 push 0DC  00406FD5 |. E8 987F0300 call   ==============================  g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ); //也就是这一句了  /-----------------------------------------------------------------  //再往下就看到了这两句:  0040709D |> C745 F8 17000>mov dword ptr [ebp-8], 17  004070A4 |. C745 F4 3C000>mov dword ptr [ebp-C], 3C  ==================================  d3ddm.Format =D3DFMT_R5G6B5;  d3ddm.RefreshRate=0x3C;  /------------------------------------------------------------------  //再往下看就到了一个结构,关建的是这个结构:  004070BB |. C745 D4 01000>mov dword ptr [ebp-2C], 1  004070C2 |. C745 C4 01000>mov dword ptr [ebp-3C], 1  004070C9 |. 8B55 F8 mov edx, dword ptr [ebp-8]  004070CC |. 8955 C0 mov dword ptr [ebp-40], edx  004070CF |. 8B45 EC mov eax, dword ptr [ebp-14]  004070D2 |. 8945 B8 mov dword ptr [ebp-48], eax  004070D5 |. 8B4D F0 mov ecx, dword ptr [ebp-10]  004070D8 |. 894D BC mov dword ptr [ebp-44], ecx  004070DB |. 8B55 08 mov edx, dword ptr [ebp+8]  004070DE |. 8955 D0 mov dword ptr [ebp-30], edx  004070E1 |. C745 CC 04000>mov dword ptr [ebp-34], 4  004070E8 |. C745 E4 00000>mov dword ptr [ebp-1C], 0  004070EF |. C745 E8 00000>mov dword ptr [ebp-18], 0  /------------------------------------------------------------------------------------------------  //再往下我们认识一个函数:  004070F8 |. 6A 47 push 47  004070FA |. 6A 01 push 1  004070FC |. 6A 02 push 2  004070FE |. 8B45 F8 mov eax, dword ptr [ebp-8]  00407101 |. 50 push eax  00407102 |. 6A 01 push 1  00407104 |. 6A 00 push 0  00407106 |. 8B4D FC mov ecx, dword ptr [ebp-4]  00407109 |. 8B51 04 mov edx, dword ptr [ecx+4]  0040710C |. 8B45 FC mov eax, dword ptr [ebp-4]  0040710F |. 8B48 04 mov ecx, dword ptr [eax+4]  00407112 |. 8B01 mov eax, dword ptr [ecx]  00407114 |. 52 push edx  00407115 |. FF50 28 call dword ptr [eax+28]  =============================================================  m_pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format,  D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D32)  /---------------------------------------------------------------------------------------------------  //还有一个关键函数:  004071F3 |. 50 push eax  004071F4 |. 8D4D B8 lea ecx, dword ptr [ebp-48]  004071F7 |. 51 push ecx  004071F8 |. 6A 20 push 20  004071FA |. 8B55 08 mov edx, dword ptr [ebp+8]  004071FD |. 52 push edx  004071FE |. 6A 01 push 1  00407200 |. 6A 00 push 0  00407202 |. 8B45 FC mov eax, dword ptr [ebp-4]  00407205 |. 8B48 04 mov ecx, dword ptr [eax+4]  00407208 |. 8B55 FC mov edx, dword ptr [ebp-4]  0040720B |. 8B42 04 mov eax, dword ptr [edx+4]  0040720E |. 8B10 mov edx, dword ptr [eax]  00407210 |. 51 push ecx  00407211 |. FF52 3C call dword ptr [edx+3C]  ===============================================================  //Create a Direct3D device.  if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,  D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &m_pD3DDevice)))  /----------------------------------------------------------------------------------------------------  窗口化的结束了---------------晕.楼主你好,笔记本的话,有的笔记本并没有设置启用F1-F12,对于这种情况,只要按Fn(功能键)+F11就行了,注意是按住Fn再按F11...Fn键一般在键盘左边Ctrl附近.希望对你有帮助.可以的话记得采纳我哈.按下F11变窗口,在按下F11可以恢复全频!按F11。

5、切换到窗口后,如果想换全屏,就在第一次按F11后不要进行任何操作,再按F11,否则就会提示切换错误,退出游戏。

6、进入游戏后按F11就变成窗口了如果想全屏就再按F11在窗口变成全屏的时候可能会出现窗口错误导致退出游戏!。

本文到此分享完毕,希望对大家有所帮助。


版权说明: 本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。


标签:




热点推荐
热评文章
随机文章