Make your own free website on Tripod.com

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( ); // คัดลอกไปยังหน้าจอจริง