|
|
我在制作45度斜视角地图时遇到下面两个问题,向这里的好心人讨教了!
1、请问方形的斜视角地图的原理。按照网上我看到的理论,做出来的地图都是菱形的(像帝国时代2那样),这样一张方形表面就有一半被浪费了。那么像星际一样的方形地图是怎么做出来的呢?
2、我的地图编辑器有个问题老是解决不了,就是右键菜单、对话框显示的问题。怎么说呢,当我有时(注意是有时,有时又可以)点击右键时,右键菜单显示不了,但我确定它确实弹出来了,因为那时画面就停住了,且我在右键菜单出现的大概位置点击后,能实现相应项的功能。也就是说,右键菜单弹出来了,但是显示不出来。对话框也有这个问题。
弹菜单的代码如下:
e_hMainMenu=: oadMenu(hInstance,MAKEINTRESOURCE(IDR_EDITOR_MENU));
HMENU hmMain=::CreatePopupMenu();
HMENU hmsub;
char *ppszMenu[]={"文件","显示","帖图","地图","帮助"};
for(int i=0;i<5;i++)
{
hmsub=::GetSubMenu(e_hMainMenu,i);
::AppendMenu(hmMain,MF_POPUP|MF_STRING,(UINT)hmsub,ppszMenu);
}
POINT pt;
::GetCursorPos(&pt);
TrackPopupMenu(hmMain,TPM_LEFTALIGN|TPM_RIGHTBUTTON,pt.x,pt.y,0,e_hwnd,NULL);
: eleteMenu(hmMain,0,0);
其中的e_hwnd是窗口的句柄:
e_hwnd=CreateWindow("MyARPG","ARPG Map Editor",WS_POPUP|WS_VISIBLE,
0,0,GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),NULL,NULL,hInstance,NULL);
据我的研究,很可能是这个句柄:e_hwnd的问题,因为涉及此句柄的东西都有这个问题,如弹对话框:
int result=DialogBox(e_hInstance,
MAKEINTRESOURCE(IDD_TILE_DATA),
e_hwnd,
(DLGPROC)DlgSetTileData);
MessageBox(e_hwnd,"hi",NULL,MB_OK);
坦白地说,我弹右键菜单的代码是参考LOA的,就此我也问过LOA的作者,他说他制作时也遇到过与我一样的问题,只不过他当时并未将窗口句柄保存,而是直接用GetActiveWindow()得到的。当他用一个变量保存窗口句柄,并在之后使用它而非GetActiveWindow()得到的句柄后,问题解决了。于是我就纳闷加郁闷了,我明明是按他后来的方法,问题却依然存在...
这个问题已经困扰我一个年头了,听说gameRes的高手和好心人多,故小弟特来讨教,望知道的大哥赐教。 |
-
|