Trang 2 / 5 FirstFirst 12345 LastLast
Hiển thị kết quả từ 11 đến 20 / 44
  1. #11
    Tham gia
    04-08-2003
    Location
    HCM
    Bài viết
    60
    Like
    0
    Thanked 0 Times in 0 Posts
    Vậy bác có bảng đó hông ? Cho em xin ... gõ cái đó chắc cũng mất cả tháng? hỉ ?

  2. #12
    Tham gia
    01-05-2003
    Bài viết
    54
    Like
    0
    Thanked 0 Times in 0 Posts
    Cho hỏi làm sao để Clip 1 LPDIRECTDRAWSURFACE?

  3. #13
    Tham gia
    04-08-2003
    Location
    HCM
    Bài viết
    60
    Like
    0
    Thanked 0 Times in 0 Posts
    Hic ... cuối cùng cũng gõ xong ... may là nhờ RegExp của VC++... Tặng các bác xài chơi ...

    void CDInput::InitKeyMap()
    {
    m_DIK2VK[DIK_ESCAPE] = VK_ESCAPE;
    m_DIK2VK[DIK_1] = '1';
    m_DIK2VK[DIK_2] = '2';
    m_DIK2VK[DIK_3] = '3';
    m_DIK2VK[DIK_4] = '4';
    m_DIK2VK[DIK_5] = '5';
    m_DIK2VK[DIK_6] = '6';
    m_DIK2VK[DIK_7] = '7';
    m_DIK2VK[DIK_8] = '8';
    m_DIK2VK[DIK_9] = '9';
    m_DIK2VK[DIK_0] = '0';
    m_DIK2VK[DIK_MINUS] = 0xBD; /* - on main keyboard */
    m_DIK2VK[DIK_EQUALS] = 0xBB;
    m_DIK2VK[DIK_BACK] = VK_BACK; /* backspace */
    m_DIK2VK[DIK_TAB] = VK_TAB;
    m_DIK2VK[DIK_Q] = 'Q';
    m_DIK2VK[DIK_W] = 'W';
    m_DIK2VK[DIK_E] = 'E';
    m_DIK2VK[DIK_R] = 'R';
    m_DIK2VK[DIK_T] = 'T';
    m_DIK2VK[DIK_Y] = 'Y';
    m_DIK2VK[DIK_U] = 'U';
    m_DIK2VK[DIK_I] = 'I';
    m_DIK2VK[DIK_O] = 'O';
    m_DIK2VK[DIK_P] = 'P';
    m_DIK2VK[DIK_LBRACKET] = 0xDB;
    m_DIK2VK[DIK_RBRACKET] = 0xDD;
    m_DIK2VK[DIK_RETURN] = VK_RETURN; /* Enter on main keyboard */
    m_DIK2VK[DIK_LCONTROL] = VK_LCONTROL;
    m_DIK2VK[DIK_A] = 'A';
    m_DIK2VK[DIK_S] = 'S';
    m_DIK2VK[DIK_D] = 'D';
    m_DIK2VK[DIK_F] = 'F';
    m_DIK2VK[DIK_G] = 'G';
    m_DIK2VK[DIK_H] = 'H';
    m_DIK2VK[DIK_J] = 'J';
    m_DIK2VK[DIK_K] = 'K';
    m_DIK2VK[DIK_L] = 'L';
    m_DIK2VK[DIK_SEMICOLON] = 0xBA;
    m_DIK2VK[DIK_APOSTROPHE] = 0xDE;
    m_DIK2VK[DIK_GRAVE] = 0xC0; /* accent grave */
    m_DIK2VK[DIK_LSHIFT] = VK_LSHIFT;
    m_DIK2VK[DIK_BACKSLASH] = 0xDC;
    m_DIK2VK[DIK_Z] = 'Z';
    m_DIK2VK[DIK_X] = 'X';
    m_DIK2VK[DIK_C] = 'C';
    m_DIK2VK[DIK_V] = 'V';
    m_DIK2VK[DIK_B] = 'B';
    m_DIK2VK[DIK_N] = 'N';
    m_DIK2VK[DIK_M] = 'M';
    m_DIK2VK[DIK_COMMA] = 0xBC;
    m_DIK2VK[DIK_PERIOD] = 0xBE; /* . on main keyboard */
    m_DIK2VK[DIK_SLASH] = 0xBF; /* / on main keyboard */
    m_DIK2VK[DIK_RSHIFT] = VK_RSHIFT;
    m_DIK2VK[DIK_MULTIPLY] = VK_MULTIPLY; /* * on numeric keypad */
    m_DIK2VK[DIK_LMENU] = VK_LMENU; /* left Alt */
    m_DIK2VK[DIK_SPACE] = VK_SPACE;
    m_DIK2VK[DIK_CAPITAL] = VK_CAPITAL;
    m_DIK2VK[DIK_F1] = VK_F1;
    m_DIK2VK[DIK_F2] = VK_F2;
    m_DIK2VK[DIK_F3] = VK_F3;
    m_DIK2VK[DIK_F4] = VK_F4;
    m_DIK2VK[DIK_F5] = VK_F5;
    m_DIK2VK[DIK_F6] = VK_F6;
    m_DIK2VK[DIK_F7] = VK_F7;
    m_DIK2VK[DIK_F8] = VK_F8;
    m_DIK2VK[DIK_F9] = VK_F9;
    m_DIK2VK[DIK_F10] = VK_F10;
    m_DIK2VK[DIK_NUMLOCK] = VK_NUMLOCK;
    m_DIK2VK[DIK_SCROLL] = VK_SCROLL; /* Scroll Lock */
    m_DIK2VK[DIK_NUMPAD7] = VK_NUMPAD7;
    m_DIK2VK[DIK_NUMPAD8] = VK_NUMPAD8;
    m_DIK2VK[DIK_NUMPAD9] = VK_NUMPAD9;
    m_DIK2VK[DIK_SUBTRACT] = VK_SUBTRACT; /* - on numeric keypad */
    m_DIK2VK[DIK_NUMPAD4] = VK_NUMPAD4;
    m_DIK2VK[DIK_NUMPAD5] = VK_NUMPAD5;
    m_DIK2VK[DIK_NUMPAD6] = VK_NUMPAD6;
    m_DIK2VK[DIK_ADD] = VK_ADD; /* + on numeric keypad */
    m_DIK2VK[DIK_NUMPAD1] = VK_NUMPAD1;
    m_DIK2VK[DIK_NUMPAD2] = VK_NUMPAD2;
    m_DIK2VK[DIK_NUMPAD3] = VK_NUMPAD3;
    m_DIK2VK[DIK_NUMPAD0] = VK_NUMPAD0;
    m_DIK2VK[DIK_DECIMAL] = VK_DECIMAL; /* . on numeric keypad */
    m_DIK2VK[DIK_F11] = VK_F11;
    m_DIK2VK[DIK_F12] = VK_F12;
    m_DIK2VK[DIK_F13] = VK_F13; /* (NEC PC98) */
    m_DIK2VK[DIK_F14] = VK_F14; /* (NEC PC98) */
    m_DIK2VK[DIK_F15] = VK_F15; /* (NEC PC98) */
    m_DIK2VK[DIK_KANA] = VK_KANA; /* (Japanese keyboard) */
    m_DIK2VK[DIK_CONVERT] = VK_CONVERT; /* (Japanese keyboard) */
    m_DIK2VK[DIK_RCONTROL] = VK_RCONTROL;
    m_DIK2VK[DIK_DIVIDE] = VK_DIVIDE; /* / on numeric keypad */
    m_DIK2VK[DIK_RMENU] = VK_RMENU; /* right Alt */
    m_DIK2VK[DIK_PAUSE] = VK_PAUSE; /* Pause */
    m_DIK2VK[DIK_HOME] = VK_HOME; /* Home on arrow keypad */
    m_DIK2VK[DIK_UP] = VK_UP; /* UpArrow on arrow keypad */
    m_DIK2VK[DIK_PRIOR] = VK_PRIOR; /* PgUp on arrow keypad */
    m_DIK2VK[DIK_LEFT] = VK_LEFT; /* LeftArrow on arrow keypad */
    m_DIK2VK[DIK_RIGHT] = VK_RIGHT; /* RightArrow on arrow keypad */
    m_DIK2VK[DIK_END] = VK_END; /* End on arrow keypad */
    m_DIK2VK[DIK_DOWN] = VK_DOWN; /* DownArrow on arrow keypad */
    m_DIK2VK[DIK_NEXT] = VK_NEXT; /* PgDn on arrow keypad */
    m_DIK2VK[DIK_INSERT] = VK_INSERT; /* Insert on arrow keypad */
    m_DIK2VK[DIK_DELETE] = VK_DELETE; /* Delete on arrow keypad */
    m_DIK2VK[DIK_LWIN] = VK_LWIN; /* Left Windows key */
    m_DIK2VK[DIK_RWIN] = VK_RWIN; /* Right Windows key */
    m_DIK2VK[DIK_APPS] = VK_APPS; /* AppMenu key */

    /*
    * Virtual Keys, Standard Set
    */
    m_VK2DIK[VK_BACK] = DIK_BACK;
    m_VK2DIK[VK_TAB] = DIK_TAB;
    m_VK2DIK[VK_RETURN] = DIK_RETURN;
    m_VK2DIK[VK_PAUSE] = DIK_PAUSE;
    m_VK2DIK[VK_CAPITAL] = DIK_CAPITAL;
    m_VK2DIK[VK_KANA] = DIK_KANA;
    m_VK2DIK[VK_KANJI] = DIK_KANJI;
    m_VK2DIK[VK_ESCAPE] = DIK_ESCAPE;
    m_VK2DIK[VK_CONVERT] = DIK_CONVERT;
    m_VK2DIK[VK_SPACE] = DIK_SPACE;
    m_VK2DIK[VK_PRIOR] = DIK_PRIOR;
    m_VK2DIK[VK_NEXT] = DIK_NEXT;
    m_VK2DIK[VK_END] = DIK_END;
    m_VK2DIK[VK_HOME] = DIK_HOME;
    m_VK2DIK[VK_LEFT] = DIK_LEFT;
    m_VK2DIK[VK_UP] = DIK_UP;
    m_VK2DIK[VK_RIGHT] = DIK_RIGHT;
    m_VK2DIK[VK_DOWN] = DIK_DOWN;
    m_VK2DIK[VK_INSERT] = DIK_INSERT;
    m_VK2DIK[VK_DELETE] = DIK_DELETE;
    m_VK2DIK['A'] = DIK_A;
    m_VK2DIK['B'] = DIK_B;
    m_VK2DIK['C'] = DIK_C;
    m_VK2DIK['D'] = DIK_D;
    m_VK2DIK['E'] = DIK_E;
    m_VK2DIK['F'] = DIK_F;
    m_VK2DIK['G'] = DIK_G;
    m_VK2DIK['H'] = DIK_H;
    m_VK2DIK['I'] = DIK_I;
    m_VK2DIK['J'] = DIK_J;
    m_VK2DIK['K'] = DIK_K;
    m_VK2DIK['L'] = DIK_L;
    m_VK2DIK['M'] = DIK_M;
    m_VK2DIK['N'] = DIK_N;
    m_VK2DIK['O'] = DIK_O;
    m_VK2DIK['P'] = DIK_P;
    m_VK2DIK['Q'] = DIK_Q;
    m_VK2DIK['R'] = DIK_R;
    m_VK2DIK['S'] = DIK_S;
    m_VK2DIK['T'] = DIK_T;
    m_VK2DIK['U'] = DIK_U;
    m_VK2DIK['V'] = DIK_V;
    m_VK2DIK['W'] = DIK_W;
    m_VK2DIK['X'] = DIK_X;
    m_VK2DIK['Y'] = DIK_Y;
    m_VK2DIK['Z'] = DIK_Z;
    m_VK2DIK['0'] = DIK_0;
    m_VK2DIK['1'] = DIK_1;
    m_VK2DIK['2'] = DIK_2;
    m_VK2DIK['3'] = DIK_3;
    m_VK2DIK['4'] = DIK_4;
    m_VK2DIK['5'] = DIK_5;
    m_VK2DIK['6'] = DIK_6;
    m_VK2DIK['7'] = DIK_7;
    m_VK2DIK['8'] = DIK_8;
    m_VK2DIK['9'] = DIK_9;
    m_VK2DIK[VK_LWIN] = DIK_LWIN;
    m_VK2DIK[VK_RWIN] = DIK_RWIN;
    m_VK2DIK[VK_APPS] = DIK_APPS;
    m_VK2DIK[VK_NUMPAD0] = DIK_NUMPAD0;
    m_VK2DIK[VK_NUMPAD1] = DIK_NUMPAD1;
    m_VK2DIK[VK_NUMPAD2] = DIK_NUMPAD2;
    m_VK2DIK[VK_NUMPAD3] = DIK_NUMPAD3;
    m_VK2DIK[VK_NUMPAD4] = DIK_NUMPAD4;
    m_VK2DIK[VK_NUMPAD5] = DIK_NUMPAD5;
    m_VK2DIK[VK_NUMPAD6] = DIK_NUMPAD6;
    m_VK2DIK[VK_NUMPAD7] = DIK_NUMPAD7;
    m_VK2DIK[VK_NUMPAD8] = DIK_NUMPAD8;
    m_VK2DIK[VK_NUMPAD9] = DIK_NUMPAD9;
    m_VK2DIK[VK_MULTIPLY] = DIK_MULTIPLY;
    m_VK2DIK[VK_ADD] = DIK_ADD;
    m_VK2DIK[VK_SUBTRACT] = DIK_SUBTRACT;
    m_VK2DIK[VK_DECIMAL] = DIK_DECIMAL;
    m_VK2DIK[VK_DIVIDE] = DIK_DIVIDE;
    m_VK2DIK[VK_F1] = DIK_F1;
    m_VK2DIK[VK_F2] = DIK_F2;
    m_VK2DIK[VK_F3] = DIK_F3;
    m_VK2DIK[VK_F4] = DIK_F4;
    m_VK2DIK[VK_F5] = DIK_F5;
    m_VK2DIK[VK_F6] = DIK_F6;
    m_VK2DIK[VK_F7] = DIK_F7;
    m_VK2DIK[VK_F8] = DIK_F8;
    m_VK2DIK[VK_F9] = DIK_F9;
    m_VK2DIK[VK_F10] = DIK_F10;
    m_VK2DIK[VK_F11] = DIK_F11;
    m_VK2DIK[VK_F12] = DIK_F12;
    m_VK2DIK[VK_F13] = DIK_F13;
    m_VK2DIK[VK_F14] = DIK_F14;
    m_VK2DIK[VK_F15] = DIK_F15;
    m_VK2DIK[VK_NUMLOCK] = DIK_NUMLOCK;
    m_VK2DIK[VK_SCROLL] = DIK_SCROLL;
    }

  4. #14
    Tham gia
    04-08-2003
    Location
    HCM
    Bài viết
    60
    Like
    0
    Thanked 0 Times in 0 Posts
    Clip thì dùng LPDIRECTDRAWCLIPPER ...

  5. #15
    Tham gia
    01-05-2003
    Bài viết
    54
    Like
    0
    Thanked 0 Times in 0 Posts
    Ba'c gio'i thieu so ve LPDIRECTDRAWCLIPPER duoc khong?
    No' cu~ng co' vai tro` nhu 1 surface phai kho^ng?

  6. #16
    Tham gia
    01-05-2003
    Bài viết
    54
    Like
    0
    Thanked 0 Times in 0 Posts
    Ví dụ như tớ có 2 surface:
    Sur1(800,600) chứa 1 bitmap 800,600 làm background
    Sur2(400,400) chứa 1 bitmap hình con người

    khi tui BltFast sur2 vào sur1 tại x=600,y=600, thì sur1 chẳgn có gì thay đổi cả,
    còn khi blit vào tọa độ 0,0 của sur1 thì hình con người lại hiện lên, tui nghĩ là phải blit vào sao cho sur2 ko vượt qúa giới hạn của sur1 phải không?
    Vậy có ai chỉ tui cách cắt bớt sur2 sao cho blit được vô sur1 ko?
    vô cùng cám ơn

  7. #17
    Tham gia
    04-08-2003
    Location
    HCM
    Bài viết
    60
    Like
    0
    Thanked 0 Times in 0 Posts
    Xài cái này để clip một hình vào một vùng cho trước để tránh blit những chi tiết dư thừa lên một surface ... Nó chỉ

    đóng vai trò clipping cho một surface mà thôi !

    Cách xài tương tự như làm với mấy interface khác :

    B1. Khai báo một thằng IDirectDrawClipper : LPDIRECTDRAWCLIPPER pDDClipper;
    B2. Có nhiều cách khởi tạo :
    + Trực tiếp : CoCreateInstance(..., &pDDClipper, ...) => Sau đó => pDDClipper->Initialize(...)
    + Đơn giản trực tiếp : DirectDrawCreateClipper(..., &pDDClipper, ...)
    + Tạo và attach với một DirectDraw inteface : IDirectDraw::CreateClipper(..., &pDDClipper, ...)
    B3. Ánh xạ vùng cho phép blit : pDDClipper->SetClipList(...), trong này sẽ đặc tả một danh sách các vùng (mỗi

    vùng xác định bởi một hình chữ nhật) cho phép blit lên, còn lại sẽ bị clip ...
    B4. Attach với một cửa sổ : pDDClipper->SetHWnd(...), pDDClipper->GetHWnd(...)
    B5. Attach với một surface : IDirectDrawSurface7::SetClipper(...), pass 'NULL' pointer vào hàm trên là detach,

    muốn lấy đối tượng từ surface thì dùng IDirectDrawSurface7::GetClipper(...) ...
    B6. Huỷ như thông thường IDirectDrawClipper::Release() hoặc CoUninstal...

    Bác coi thêm tài liệu đi ... Lượm mấy cuốn DirectX SDK của M$ íí...!...

    Tiện đây cho hỏi, có ai có mấy cuốn ebook về lập trình Game với DirectX như :
    + Cutting Edge Direct3D Prgramming (???)
    + Programming Role Playing Game with DirecX (???)
    + Effective ... DirectX ... (???)
    + ... (sách về DirectX) ... (???)
    ... cho em xin FREE (hic, nó ở chỗ amazon không à !!!). Cám ơn trước !...

  8. #18
    Tham gia
    01-05-2003
    Bài viết
    54
    Like
    0
    Thanked 0 Times in 0 Posts
    Cho tui hỏi ở B5, surface bác nói đó là surface nào? surface nguồn hay là đích?
    Tui làm mãi mà hông được, thôi thì bác có hướng dẫn nào có ví dụ cụ thể thì cho tui xin nhá, thanks

  9. #19
    Tham gia
    04-08-2003
    Location
    HCM
    Bài viết
    60
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi babylearntochat
    Cho tui hỏi ở B5, surface bác nói đó là surface nào? surface nguồn hay là đích?
    Tui làm mãi mà hông được, thôi thì bác có hướng dẫn nào có ví dụ cụ thể thì cho tui xin nhá, thanks
    - Surface đó là Primary (Front) Surface hoặc là cái Surface mà bác muốn blit lên í ...

    Quote Được gửi bởi babylearntochat
    Ví dụ như tớ có 2 surface:
    Sur1(800,600) chứa 1 bitmap 800,600 làm background
    Sur2(400,400) chứa 1 bitmap hình con người

    khi tui BltFast sur2 vào sur1 tại x=600,y=600, thì sur1 chẳgn có gì thay đổi cả,
    còn khi blit vào tọa độ 0,0 của sur1 thì hình con người lại hiện lên, tui nghĩ là phải blit vào sao cho sur2 ko vượt qúa giới hạn của sur1 phải không?
    Vậy có ai chỉ tui cách cắt bớt sur2 sao cho blit được vô sur1 ko?
    vô cùng cám ơn
    - Cái này thì tui nghĩ bác sai ở đâu đó rồi !... Clipping chỉ tránh blit vào những vùng vô ích thui ... Coi lại phần create, blit, flip ....

  10. #20
    Tham gia
    01-05-2003
    Bài viết
    54
    Like
    0
    Thanked 0 Times in 0 Posts
    Không đâu , tui đã thử blit lên các tọa độ khác nhau, nếu sur2 mà vượt quá sur1 (tức là mình chỉ blit 1 phần của sur2 lên sur1, phần còn lại vượt quá màn hình nên ko thấy) thì chỉ thấy sur1 thôi ( mà lẽ ra phải thấy sur1 làm nền và 1 phần của sur2 nằm trên sur1).
    Nếu sur2 kô tràn quá màn hình thì vẫn được bình thường

Trang 2 / 5 FirstFirst 12345 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •