zoukankan      html  css  js  c++  java
  • Programming 2D Games 读书笔记(第二章)

     

    本意还是想了解DirectX的,由于网上拿不到书的pdf文档,幸好有作者的源代码示例,想完整的看一下,基本的游戏需要的点.

    下面直接以代码为例,仅用于帮助自身理解

    http://www.programming2dgames.com/chapter2.htm

    示例一:Hello World

    创建了一个标准的Win32消息循环程序示例

    示例二:Character Input

    介绍了键盘输入消息WM_CHAR

            case WM_CHAR:               // a character was entered by the keyboard
                switch (wParam)         // the character is in wParam
                {
                    case 0x08:          // backspace
                    case 0x09:          // tab
                    case 0x0A:          // linefeed
                    case 0x0D:          // carriage return
                    case 0x1B:          // escape
                        MessageBeep((UINT) -1);    // beep but do not display
                        return 0;
                    default:            // displayable character
                        ch = (TCHAR) wParam;    // get the character
                        InvalidateRect(hwnd, NULL, TRUE);    // force WM_PAINT
                        return 0;
                }

    示例三:Keys Down

    介绍了键盘消息

            case WM_KEYDOWN:                                // key down
                vkKeys[wParam] = true;
                switch(wParam)
                {
                    case VK_SHIFT:                          // shift key
                        nVirtKey = GetKeyState(VK_LSHIFT);  // get state of left shift
                        if (nVirtKey & SHIFTED)             // if left shift
                            vkKeys[VK_LSHIFT] = true;
                        nVirtKey = GetKeyState(VK_RSHIFT);  // get state of right shift
                        if (nVirtKey & SHIFTED)             // if right shift
                            vkKeys[VK_RSHIFT] = true;
                        break;
                    case VK_CONTROL:                        // control key
                        nVirtKey = GetKeyState(VK_LCONTROL);
                        if (nVirtKey & SHIFTED)             // if left control
                            vkKeys[VK_LCONTROL] = true;
                        nVirtKey = GetKeyState(VK_RCONTROL);
                        if (nVirtKey & SHIFTED)             // if right control
                            vkKeys[VK_RCONTROL] = true;
                        break;
                }
                InvalidateRect(hwnd, NULL, TRUE);           // force WM_PAINT
                return 0;
                break;

    示例四:Prevent Multiple

    使用Mutex实现单实例

    bool AnotherInstance()
    {
        HANDLE ourMutex;
    
        // Attempt to create a mutex using our unique string
        ourMutex = CreateMutex(NULL, true, "Use_a_different_string_here_for_each_program_48161-XYZZY");
    
        if (GetLastError() == ERROR_ALREADY_EXISTS)
            return true;            // another instance was found
        
        return false;               // we are the only instance
    }
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/3331262.html
Copyright © 2011-2022 走看看