http://fengmm521.blog.163.com/blog/static/2509135820141262838913/
这几天一直在想,cocos2d-x跨平台这么牛X,为什么没有人用cocos2d-x来作PC的端游呢,如果用cocos2d-x作2D的端游,那岂不是windows,linux,Mac,ios,android全平台通吃了。当然了,这只是cocos2d-x,但是如果我们使用的是cocos3d那岂不是,一个游戏引擎,可以在任何平台上运行,所有平台通吃。并且是2D游戏,3D游戏都通吃的游戏引擎,而且还使用的是GPU渲染的游戏,而且游戏运行的性能大家就可想而知了。
想到这里,自已便开始兴奋的快要跳起来了。
我们先来分析一下理论上的可行性。
1.用过cocos2d-x的人都知道,cocos2d-x是使用的标准c++语法写成。所以c++本身就是windows,linux,mac通行的。
2.然后,我要说一下游戏使用的图形渲染引擎,cocos2d-x使用的是OpenGL ES,之所以使用从OpenGL裁剪的OpenGL ES是因为手机端使用完全的OpenGL性能有问题,但让我们高兴的是OpenGL ES的代码可以完全运行与OpenGL显卡。而且性能不比手机的GPU差。还有一个更好的消息就是OpenGL和OpenGL ES的协议正在被OpenGL组织设法合并为一个协议。
3.支持windows系统的显卡硬件提供商因为受到微软的软件协议管控,不能自行开发性能更高的显示硬件,所以一般显卡的生产商都会全力支持OpenGL协议,以显示他们新硬件的性能。所以,几乎所有可以跑windows系统的显卡都可以找到OpenGL驱动。换句话说,就是windwos,linux,mac都支持OpenGL硬件协议。
结合上边的三条分析,我们没有理由不相信cocos2d-x或者cocos3d-x不会成为所有平台通吃的游戏开发引擎。
下边是对cocos2d-x引擎全屏显示的一些修改。linux和Mac应该也会很方便。因为你可以看到cocos2dx的cocos2dx\platform目录下有很多操作系统相关的文件夹。如下图:
HWND hDesk; RECT rc; hDesk = GetDesktopWindow(); GetWindowRect( hDesk, &rc ); SetWindowLong( m_hWnd, GWL_STYLE, WS_BORDER ); SetWindowPos( m_hWnd, HWND_TOPMOST,0,0, rc.right, rc.bottom,SWP_SHOWWINDOW);
ShowWindow(hDesk,SW_SHOWMAXIMIZED);
加入后的样子如下图:(记得改完了,要再把cocos2dlib项目再编译一下)
2.再修改你自已的cocos2d-x项目中的main.cpp:
把原来代码中的
eglView->setFrameSize(480, 320);
改成下边代码
RECT rcWindow; HWND xxtmp = eglView->getHWnd(); GetWindowRect(xxtmp,&rcWindow); int w = (int)rcWindow.right; int h = (int)rcWindow.bottom; eglView->setFrameSize(w, h);
改过之后的效果如下图:3.第三个要改地方是为了让我们的项目能动自适应显示器的分辨率而没有黑边。要改的地方是在我们的AppDelegate.cpp中修改方法AppDelegate::applicationDidFinishLaunching()加入设置EGLView显示方式的代码。如下图pEGLView->setDesignResolutionSize(480,320, kResolutionExactFit);
kResolutionExactFit:这个参数表示自动拉申以适合屏幕大小。还有几个别的参数,这里就不写了,有要了解的,大家去网上搜,一搜一大把。好了,这样设置完之后,我们的cocos2d-x游戏项目就在windows系统下变成像端游一样的全屏显示了。接下来的事情就要看大家的主观能动性和想象力了。