• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            游戲技能冷卻時間的圖標繪制

            Posted on 2008-12-17 22:51 MiweiDev 閱讀(1280) 評論(1)  編輯 收藏 引用 所屬分類: DirectX
            只是馬馬虎虎的 實現了個簡陋的,完成基本思想,剩下的就沒做了。以后在補上,希望有好的方法的留下腳印。


            #include <Windows.h>
            #include 
            <d3d9.h>
            #include 
            <d3dx9.h>

            #pragma comment(lib, 
            "d3d9.lib")
            #pragma comment(lib, 
            "d3dx9.lib")
            #pragma comment(lib, 
            "winmm.lib")

            LPDIRECT3D9                g_pd3d 
            = 0;
            LPDIRECT3DDEVICE9        g_pd3dDevice 
            = 0;
            LPDIRECT3DVERTEXBUFFER9    g_pVB 
            = 0;

            const int g_width = 1024;
            const int g_height = 768;

            struct CUSTOMVERTEX 
            {
                FLOAT x, y, z, rhw;
                DWORD color;
                
            //CUSTOMVERTEX(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _rhw, DWORD _color)
                
            //    :x(_x)
                
            //    ,y(_y)
                
            //    ,z(_z)
                
            //    ,rhw(_rhw)
                
            //    ,color(_color){}
            };

            #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

            HRESULT InitD3D(HWND hwnd)
            {
                
            if (NULL == (g_pd3d = Direct3DCreate9(D3D_SDK_VERSION)))
                {
                    MessageBox(NULL, 
            "Create D3D Failed!""Lession13", MB_OK);
                    
            return E_FAIL;
                }

                D3DCAPS9    caps;
                
            int vp = 0;
                g_pd3d
            ->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);
                
            if (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
                    vp 
            = D3DCREATE_HARDWARE_VERTEXPROCESSING;
                
            else
                    vp 
            = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

                D3DPRESENT_PARAMETERS d3dpp;
                ::ZeroMemory(
            &d3dpp, sizeof(d3dpp));
                d3dpp.AutoDepthStencilFormat 
            = D3DFMT_D24S8;
                d3dpp.BackBufferCount 
            = 1;
                d3dpp.BackBufferFormat 
            = D3DFMT_A8R8G8B8;
                d3dpp.BackBufferHeight 
            = g_height;
                d3dpp.BackBufferWidth 
            = g_width;
                d3dpp.EnableAutoDepthStencil 
            = true;
                d3dpp.Flags 
            = 0;
                d3dpp.FullScreen_RefreshRateInHz 
            = D3DPRESENT_RATE_DEFAULT;
                d3dpp.hDeviceWindow 
            = hwnd;
                d3dpp.MultiSampleQuality 
            = 0;
                d3dpp.MultiSampleType 
            = D3DMULTISAMPLE_NONE;
                d3dpp.PresentationInterval 
            = D3DPRESENT_INTERVAL_IMMEDIATE;
                d3dpp.SwapEffect 
            = D3DSWAPEFFECT_DISCARD;
                d3dpp.Windowed 
            = true;

                
            if (FAILED(g_pd3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, vp, &d3dpp, &g_pd3dDevice)))
                {
                    MessageBox(NULL, 
            "Create Device Failed!""Lession13", MB_OK);
                    
            return E_FAIL;
                }

                
            //D3DXMATRIX matProj;
                
            //D3DXMatrixIdentity(&matProj);
                
            //D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1, 1, 1000);

                
            //g_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
                return S_OK;
            }

            HRESULT InitVB(FLOAT angle, LPRECT rt, DWORD dwColor)
            {
                
            //float angle = (360*0.01)*nPercent;
                int nArea = angle / 45;

                
            int nTriangles = nArea + 1;
                
            int nPoints = nArea + 2;

                
            // 規定中心點
                int ndivX = (rt->right - rt->left)>>1;
                
            int ndivY = (rt->bottom - rt->top)>>1;

                
            // 默認的賦值
                CUSTOMVERTEX pVerteics[] = 
                {
                        {ndivX,        ndivY,        
            00.f, dwColor}, // 1
                        {ndivX,        rt->top,    00.f, dwColor}, // 2
                        {rt->left,    rt->top,    00.f, dwColor}, // 3
                        {rt->left,    ndivY,        00.f, dwColor}, // 4
                        {rt->left,    rt->bottom,    00.f, dwColor}, // 5
                        {ndivX,        rt->bottom, 00.f, dwColor}, // 6
                        {rt->right,    rt->bottom,    00.f, dwColor}, // 7
                        {rt->right, ndivY,        00.f, dwColor}, // 8
                        {rt->right, rt->top,    00.f, dwColor}, // 9
                        {ndivX,        rt->top,    00.f, dwColor}, // 2
                };

                
            int leave_angle = (int)angle % 45;
                
            if (!leave_angle)
                {
                    nTriangles 
            -= 1;
                }
                
            // 計算此時秒針的向量
                D3DXVECTOR2    v =  *(D3DXVECTOR2 *)(pVerteics+nTriangles);
                D3DXVECTOR2 v2 
            = *(D3DXVECTOR2 *)(pVerteics+nPoints);
                D3DXVECTOR2 nor 
            = *(D3DXVECTOR2 *)(pVerteics);
                D3DXVECTOR2 vResult;

                
            if ((angle!=45)||(angle!=225))
                {
                    D3DXVECTOR2 vDummy1 
            = v - nor;
                    D3DXVECTOR2 vDummy2 
            = v2- nor;
                    
            //D3DXVec2Lerp(&vResult, &vDummy1, &vDummy2, leave_angle);
                    switch (nArea)
                    {
                    
            case 0:
                        vResult.y 
            = 0;
                        vResult.x 
            = ndivX - ndivY*tanf((leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 1:
                        vResult.x 
            = rt->left;
                        vResult.y 
            = ndivY - ndivX*tanf((45-leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 2:
                        vResult.x 
            = rt->left;
                        vResult.y 
            = ndivY + ndivX*tanf((leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 3:
                        vResult.y 
            = rt->bottom;
                        vResult.x 
            = ndivX - ndivY*tanf((45-leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 4:
                        vResult.y 
            = rt->bottom;
                        vResult.x 
            = ndivX + ndivY*tanf((leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 5:
                        vResult.x 
            = rt->right;
                        vResult.y 
            = ndivY + ndivX*tanf((45-leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 6:
                        vResult.x 
            = rt->right;
                        vResult.y 
            = ndivY - ndivX*tanf((leave_angle)*D3DX_PI/180);
                        
            break;
                    
            case 7:
                        vResult.x 
            = ndivX + ndivY * tanf((45-leave_angle)*D3DX_PI/180);
                        vResult.y 
            = rt->top;
                        
            break;
                    }
                    
            *(D3DXVECTOR2 *)(pVerteics+nPoints) = vResult;
                }
                
            else
                {
                    D3DXVec2Lerp(
            &vResult, &v, &v2, leave_angle/45);
                    
            *(D3DXVECTOR2 *)(pVerteics+nPoints) = vResult;
                }

                
            //g_pd3dDevice->CreateVertexBuffer((nPoints+1)*sizeof(CUSTOMVERTEX), D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &g_pVB, 0);
                
            //void * pV;
                
            //if (SUCCEEDED(g_pVB->Lock(0, 0, (void **)&pV, 0)))
                
            //{
                
            //    memcpy(pV, pVerteics, (nPoints+1)*sizeof(CUSTOMVERTEX));
                
            //    g_pVB->Unlock();
                
            //}

                g_pd3dDevice
            ->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
                g_pd3dDevice
            ->SetRenderState(D3DRS_LIGHTING, FALSE);
                g_pd3dDevice
            ->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0xffffffff1.f, 0);
                g_pd3dDevice
            ->BeginScene();
                
            //g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));
                g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
                
            //g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, nTriangles, nPoints);
                g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,nTriangles,pVerteics,sizeof(CUSTOMVERTEX)); 
                g_pd3dDevice
            ->EndScene();
                g_pd3dDevice
            ->Present(0000);
                
            return S_OK;
            }

            VOID Cleanup()
            {
                
            if (g_pVB)
                {
                    g_pVB
            ->Release();
                    g_pVB 
            = 0;
                }

                
            if (g_pd3dDevice)
                {
                    g_pd3dDevice
            ->Release();
                    g_pd3dDevice 
            = 0;
                }

                
            if (g_pd3d)
                {
                    g_pd3d
            ->Release();
                    g_pd3d 
            = 0;
                }
            }

            int timeCounter = 0;
            LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
            {
                
            switch( msg )
                {
                
            case WM_CREATE:
                    SetTimer(hWnd, 
            125, NULL);
                    
            return 0;
                
            case WM_DESTROY:
                    
                    Cleanup();
                    PostQuitMessage( 
            0 );
                    
            return 0;
                
            case WM_TIMER:
                    {
                        timeCounter
            ++;
                        timeCounter
            %=360;
                        RECT rt
            = {00200200};
                        InitVB(
            360-timeCounter, &rt, 0xffff0000);
                    }
                    
            return 0;
                }

                
            return DefWindowProc( hWnd, msg, wParam, lParam );
            }




            //-----------------------------------------------------------------------------
            // Name: WinMain()
            // Desc: The application's entry point
            //-----------------------------------------------------------------------------
            INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
            {
                
            // Register the window class
                WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L0L,
                    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                    
            "D3D Tutorial", NULL };
                RegisterClassEx( 
            &wc );

                
            // Create the application's window
                HWND hWnd = CreateWindow( "D3D Tutorial""D3D Tutorial 05: Textures",
                    WS_OVERLAPPEDWINDOW, 
            100100, g_width, g_height,
                    NULL, NULL, wc.hInstance, NULL );

                
            // Initialize Direct3D
                if( SUCCEEDED( InitD3D( hWnd ) ) )
                {
                    
            //// Create the scene geometry
                    //if( SUCCEEDED( InitVB() ) )
                    
            //{
                        
            // Show the window
                        ShowWindow( hWnd, SW_SHOWDEFAULT );
                        UpdateWindow( hWnd );

                        
            // Enter the message loop
                        MSG msg;
                        ZeroMemory( 
            &msg, sizeof(msg) );
                        
            while( msg.message!=WM_QUIT )
                        {
                            
            if( PeekMessage( &msg, NULL, 0U0U, PM_REMOVE ) )
                            {
                                TranslateMessage( 
            &msg );
                                DispatchMessage( 
            &msg );
                            }
                            
            else
                            {

                            }
                        }
                    
            //}
                }

                UnregisterClass( 
            "D3D Tutorial", wc.hInstance );
                
            return 0;
            }


            Feedback

            # re: 游戲技能冷卻時間的圖標繪制  回復  更多評論   

            2009-04-23 17:10 by bo哥
            excellent!
            久久精品国产福利国产秒| 浪潮AV色综合久久天堂| 综合久久国产九一剧情麻豆| 伊人久久大香线蕉影院95| 久久久免费精品re6| 久久精品视频一| 亚洲人成电影网站久久| 亚洲精品国产自在久久| 亚洲精品午夜国产va久久| 亚洲精品无码久久久| 久久久亚洲裙底偷窥综合| 久久精品青青草原伊人| 人妻丰满AV无码久久不卡| 久久99久久99精品免视看动漫| 久久精品九九亚洲精品| 国产精品免费看久久久| 2020最新久久久视精品爱| 国产成人久久777777| 久久综合精品国产一区二区三区| 日本亚洲色大成网站WWW久久| 国产精品中文久久久久久久| 伊人久久大香线蕉亚洲| 国产精品美女久久久久网| 久久精品不卡| 亚洲成色WWW久久网站| 久久福利青草精品资源站免费| 国产成人精品久久亚洲| 久久精品久久久久观看99水蜜桃 | 国内精品久久久久伊人av| 国产精品国色综合久久| 久久久久香蕉视频| 久久成人国产精品| 久久嫩草影院免费看夜色| 久久久av波多野一区二区| 久久国产乱子伦精品免费午夜| 97精品依人久久久大香线蕉97 | 99久久免费国产特黄| 久久久久国产| 69久久精品无码一区二区| 欧美精品一区二区久久 | 久久青青草原国产精品免费 |