SetVideoMode( 640,
480, 16, FALSE ); // function
สำหรับเปลี่ยน mode
การแสดงผลไปที่ 640x480 16Bits
สี window screen
และถ้าให้ค่าพารามิเตอร์จาก
FALSE เป็น TRUE ก็จะเป็น Full
screen ครับ SetGamePath( "\\PROMAN\\DEMO\\" ); // function สำหรับระบุตำแหน่ง directory ของ game เราครับ |
. . . . . .ทีนี้มาดู function สำหรับแสดงภาพบ้าง ผมได้เขียนเป็น class CBitmap ไปเรียบร้อยวิธีการใช้งานก็แบบนี้ครับ |
CBitmap pic1; pic1.Load( "SWASDEE1.BMP" ); // function โหลดภาพ BITMAP ถ้าสำเร็จจะ return TRUE pic1.Draw( pSysVPage, 0, 0, -1, -1, DRAW_NOCOLORKEY ); // function แสดงภาพพารามิเตอร์คือ Virtual Page, x, y, w, h, mode ถ้า w และ h มีค่า -1 แสดงว่า ให้ค่าทั้งสองเป็นค่าอัตโนมัติ ขนาดเท่ากับภาพจริง DRAW_NOCOLORKEY คือแสดงผลไม่ตรวจสอบค่าสีสำหรับ Transparent แต่ถ้าเป็น DRAW_COLORKEY แสดงว่ามีการตรวจสอบสี Transparent pic1.Draw( pSysVPage, 100, 100 ); // จะใช้แบบนี้ก็ได้จะเป็น mode DRAW_NOCOLORKEY |
. . . . . .pSysVPage คืออะไร เพื่อนๆคงงง ตรงนี้ละครับที่ผมทำการสร้าง หน่วยความจำเสมือนให้ใช้งาน และง่ายในการเขียน หรืออ่านค่าสีในหน่วยความจำ หน่วยความจำนี้จะมีตำแหน่งเป็นผืนยาว.............ตลอด ไม่ต้องมากังวลเรื่องจัดการส่วนแสดงผล อย่างที่บอกได้ใน กราฟฟิก 2D ครับ ให้เพื่อนๆเขียนค่าสีลงไปได้เลย ไม่เกินตำแหน่งหรือเท่ากับ pSysVPage -> dwSize นะครับ มาดูการใช้หน่วยความจำเสมือนครับ |
BYTE *ScreenPtr =
pSysVPage -> lpSurface; // แต่ก่อนจะเป็นแบบนี้ BYTE *ScreenPtr = MK_FP( 0xA000, 0x0000 ); จำได้ไหมเอ๋ย ScreenPtr[0] = 1; ScreenPtr[1] = 1; ScreenPtr[65536] = 1; ScreenPtr[65537] = 1; ScreenPtr[204800] = 1; ScreenPtr[pSysVPage -> dwSize-1] = 1; |
. . . . . .จะเห็นได้ว่าง่ายกว่าเดิมมาก เพียงแต่เราระบุตำแหน่งไปเลย ไม่ต้องมานั่งปวดหัวอีกต่อไป หลังจากที่เราเขียนสีแล้ว ต้องทำการคัดลอกข้อมูลไปยังหน้าจอจริงโดยใช้ function FlipScreen ซึ่งมีวิธีการใช้งานแบบนี้ครับ |
CBitmap pic1; pic1.Load( "SWASDEE1.BMP" ); // โหลดภาพ pic1.Draw( pSysVPage, 0, 0 ); // แสดงภาพ FlipScreen( ); // คัดลอกไปยังหน้าจอจริง |