飞行射击类游戏开发实战(系列)-窗口建立

首先这是一个谢列,这个系列完以后,我们就完成了一个设计类游戏,注意采用面向对象的方式采用OpenGL可编程管线技术进行开发支持多平台。代码下载地址:

#pragma once

#include <Windows.h>
#include <tchar.h>

namespace   CELL
{
    class   CELLWinApp
    {
    public:
        //! 实例句柄
        HINSTANCE   _hInstance;
        //! 窗口句柄
        HWND        _hWnd;
        //! 窗口的高度
        int         _width;
        //! 窗口的宽度
        int         _height;
    public:
        CELLWinApp(HINSTANCE hInstance)
            :_hInstance(hInstance)
        {
            WNDCLASSEX  winClass;
            winClass.lpszClassName  =   _T("CELLWinApp");
            winClass.cbSize         =   sizeof(winClass);
            winClass.style          =   CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
            winClass.lpfnWndProc    =   wndProc;
            winClass.hInstance      =   hInstance;
            winClass.hIcon            =   0;
            winClass.hIconSm        =   0;
            winClass.hCursor        =   LoadCursor(hInstance, IDC_ARROW);
            winClass.hbrBackground  =   (HBRUSH)GetStockObject(BLACK_BRUSH);
            winClass.lpszMenuName   =   NULL;
            winClass.cbClsExtra     =   0;
            winClass.cbWndExtra     =   0;
            RegisterClassEx(&winClass);
        }

        virtual ~CELLWinApp()
        {
            UnregisterClass(_T("CELLWinApp"),_hInstance);
        }
    protected:
        static  LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
        {

            CELLWinApp*  pThis   =   (CELLWinApp*)GetWindowLong(hWnd,GWL_USERDATA);
            if (pThis)
            {
                return  pThis->onEvent(hWnd,msg,wParam,lParam);
            }
            if (WM_CREATE == msg)
            {
                CREATESTRUCT*   pCreate =   (CREATESTRUCT*)lParam;
                SetWindowLong(hWnd,GWL_USERDATA,(DWORD_PTR)pCreate->lpCreateParams);
            }
            return  DefWindowProc( hWnd, msg, wParam, lParam );
        }
    public:
        virtual LRESULT onEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
        {
            switch (msg)
            {
            case WM_CLOSE:
            case WM_DESTROY:
                {
                    ::PostQuitMessage(0);
                }
                break;
            case WM_MOUSEMOVE:
                break;
            default:
                return  DefWindowProc( hWnd, msg, wParam, lParam );
            }
            return  S_OK;

        }
        /**
        *   主函数
        */
        int     main(int width,int height)
        {
            _hWnd   =   CreateWindowEx( NULL,
                                        _T("CELLWinApp"),
                                        _T("CELLWinApp"),
                                        WS_OVERLAPPEDWINDOW,
                                        CW_USEDEFAULT,
                                        CW_USEDEFAULT,
                                        width,
                                        height,
                                        NULL,
                                        NULL,
                                        _hInstance,
                                        this
                                        );

            if (_hWnd == 0)
            {
                return  -1;
            }
            ShowWindow(_hWnd,SW_SHOW);
            MSG msg =   {0};
            while(msg.message != WM_QUIT)
            {
                if (msg.message == WM_DESTROY ||
                    msg.message == WM_CLOSE)
                {
                    break;
                }
                /**
                *   有消息,处理消息,无消息,则进行渲染绘制
                */
                if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
                else
                {
                    Sleep(1);
                }
            }
            return  0;
        }

    };
}

其实很简单,这一小节,只是建一个windows窗口,然后建一个main函数调用这个类:

#include "CELLWinApp.hpp"

int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(hInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
    UNREFERENCED_PARAMETER(nCmdShow);

    CELL::CELLWinApp  app(hInstance);
    app.main(800,600);

    return 0;
}

完了,估计没有人看不懂。

时间: 2024-10-10 15:25:38

飞行射击类游戏开发实战(系列)-窗口建立的相关文章

非常经典的飞行射击类游戏飞离神庙源码

该游戏源码实现了一款很不错的飞行射击类游戏,飞离神庙游戏,游戏的操作玩法简单,跟我们平时生活中玩的一下射击类的游戏玩法差不多,喜欢android游戏开发的朋友可以下载吧. 源码下载:http://code.662p.com/view/2267.html 详细说明:http://android.662p.com/thread-4584-1-1.html

unity3D游戏开发实战原创视频讲座系列10之《保卫战:异形入侵》游戏开发第一季

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发

 第一讲 游戏的演示和工具介绍...1 第二讲 创建项目...2 第三讲 界面显示...3 第四讲 数字2的产生...7 第五讲 输入操作的推断...9 第六讲 输入操作的反应...13 第七讲 分数的累加.游戏结束检測...18 第八讲 界面美化...22 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622 或者:http://www.iqiyi.com/u/1058663622 持续更新中~~~~~~~~~~~~~~. 第一讲 

仿《雷霆战机》飞行射击手游开发--游戏简介

游戏介绍 本游戏是一款使用cocos2d-x开发的纵版飞行射击单机游戏,开发语言是C++.玩家可以控制一架飞机与敌机进行对战,飞机可以发射子弹.导弹甚至激光,除此之外,玩家还能对自己的飞机进行强化改造,提升基础属性.当玩家完成指定的任务后,还能获取各种类型的道具奖励.游戏操作简单,上手容易,画面逼真炫酷,并有多种道具可供使用. 本游戏支持三种游戏模式:闯关模式.无尽模式.急速模式. 闯关模式 这是一种最常见的玩法,即游戏给玩家多个关卡,每个关卡面对的敌人不同,任务也不同,随着任务的完成,剧情也会

unity3D游戏开发实战原创视频讲座系列12之U3D的2D开发新方法实战

 U3D的2D开发新方法实战 (Unity3d-4.x的打飞机2D游戏开发新的方法应用 ) 大纲介绍:不使用NGUI和TK2d插件,   使用 U3D内置强大的最大的工具. 开发过程设计到如下内容: 从图片集中截取出 精灵.(这些与以前的方法是不同的) 连续图片的动画制作. 对动画的编辑 Mecanim动画系统的使用 2D物理系统和碰撞检测. 游戏的简单完善(敌机的产生.背景滚动.声音.分数的实现). 会用8讲的时间来介绍. 视持续更新中.... 视频存放地址如下:http://ipd.pp

Cocos2d-x+3.x游戏开发实战pdf

下载地址:网盘下载 内容简介  · · · · · · <Cocos2d-x 3.x游戏开发实战>是一本介绍Cocos2d-x游戏引擎的实用图书,全面介绍了最新的Cocos2d-x 3.2游戏引擎各方面的知识. <Cocos2d-x 3.x游戏开发实战>从内容层次上可分为四个部分.第一部分介绍了游戏开发的基础知识.游戏引擎概念.Cocos2d-x的下载与安装,以及跨平台开发环境的搭建.第二部分介绍了Cocos2d-x中的核心类.动作.动画.3D特效.文字.字体.菜单.事件处理.UI

《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像

Cocos2d-x中的图像是通过精灵类来显示的.在Cocos2d-x中游戏中的每一个角色.怪物.道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥.在源文件本章目录下的项目ChapterThree03就展示了使用Cocos2d-x实现简单游戏开始界面的方法,主要就是通过精灵类来显示图像,其关键代码如范例3-5所示. [范例3-5 在Cocos2d-x中显示图像] Size size = Director::getInstance()->getVisibleS

Swift游戏开发实战教程(大学霸内部资料)

Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程详细讲解记忆配对.太空侵略者.Simon记忆.迷你高尔夫.银河大战五个游戏的开发.在项目讲解同时,还着详细介绍了图形绘制.游戏引擎.音频引擎.用户交互.传感器等专向技术.最后,教程讲解苹果专用游戏框架Sprit Kit的使用.为了帮助读者充分了解实际开发,教程还详细讲解游戏开发的必备知识,如帐号绑定.发布游戏等内容

Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现(不定期更新中~~~)

系列目录 Unity3D手机斗地主游戏开发实战(01)_发牌功能实现 Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现 一.大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和动画,并展示当前的手牌.这期我们继续实现接下来的功能--叫地主. 1.首先这两天,学习了DOTween,这是一个强大的Unity动画插件,大家可以参考:官方文档,个人感觉DOTween还是比较好用的. 好的,我们先来重构一下动画部分的代码(没有绝对牛逼的架构和设计,项目过程中不要不断的持续改进嘛