• <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 閱讀(1281) 評論(1)  編輯 收藏 引用 所屬分類: DirectX
            只是馬馬虎虎的 實現(xiàn)了個簡陋的,完成基本思想,剩下的就沒做了。以后在補上,希望有好的方法的留下腳印。


            #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;

                
            // 規(guī)定中心點
                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!
            久久久久久一区国产精品| 色诱久久久久综合网ywww | 久久久久免费看成人影片| 久久久久国色AV免费观看| 久久久久无码国产精品不卡| 狠狠久久综合伊人不卡| 久久99精品久久久久久齐齐| 日韩精品久久久久久| 国产亚洲精午夜久久久久久| 91亚洲国产成人久久精品网址| 国内精品伊人久久久久网站| 欧美亚洲另类久久综合婷婷| 欧美成a人片免费看久久| 久久丫忘忧草产品| 亚洲AV日韩精品久久久久| 精品久久久久香蕉网| 久久免费视频网站| 人妻无码精品久久亚瑟影视| 国产成人综合久久精品红| 久久99热只有频精品8| 久久99精品综合国产首页| 国产亚洲色婷婷久久99精品91| 亚洲а∨天堂久久精品| 久久国产精品77777| 久久久久久极精品久久久| 无码久久精品国产亚洲Av影片 | 久久精品国产亚洲AV大全| 51久久夜色精品国产| 欧美成人免费观看久久| 久久久国产精品网站| 久久人人爽人人爽人人片AV麻烦| 国产亚洲精久久久久久无码| 亚洲欧美精品伊人久久| 久久国产免费直播| 久久久综合香蕉尹人综合网| 精品久久久无码人妻中文字幕| 久久精品成人国产午夜| 色天使久久综合网天天| 久久99国产一区二区三区| 2021少妇久久久久久久久久| 模特私拍国产精品久久|