SgLib Simple Graphics Library SgLib är en förenkling av glut som I sin tur bygger på open GL. Om du inte känner till glut och open GL, räcker det att veta att sglib är en samling filer som gör det lättare att göra grafiska applikationer(program). Skapa en ny windows applikation. Skapa en Win32 Consol applikation om du vill ha debugutskrifter(genoma att använda cout) i ett svart fönster(vid sidan av ditt spelfönster). Gör du en hello world applikation så får du automatiskt en main som duger. Eller... Skapa en Win32 applikation där du bara har kvar winmain funktionen. Denna kod är det enda som behöver vara kvar. #include "stdafx.h" #include "ManicMainer.h" int APIENTRY _twinmain(hinstance hinstance, HINSTANCE hprevinstance, LPTSTR lpcmdline, int ncmdshow) // TODO: Place code here. return 0; Notera att det går bra att börja med att göra sitt program i en konsollapplikation, eftersom koden innanför main kommer att vara exak t densamma. Dock fungerar inte cout i en ren Win32 applikation. Förberedelser för att använda sglib Kopiera in följande filer från hemsidans projektflik, underrubrik resurser: Kopiera glut32.dll hit. Zippa upp sglib.zip h i t. Kopiera 2 glut32.lib hit. 3 1 För den avancerade användaren finns det naturligtvi s effektivare metoder, men denna är den lättaste.
En komplett sglib applikation. #include "stdafx.h" #include "ManicMainer.h" #include "sglib\sglib.hpp" #define WIDTH 200 #define HEIGHT 200 #define XPOS 100 #define YPOS 100 class CManicGame:public Application public: CManicGame() Application::init("Manic Mainer!",WIDTH,HEIGHT,XPOS,YPOS); // Initialize game! // Sätter upp att ontimer skall anropas med ett visst intervall(1). Application::setAndStartTimer(1); void ondraw() Graphics g; // Rensar skärmen. g.drawcircle(30,70,10); void ontimer() Indikerar att vi använder sglib Skapar fönstret vi kan rita i med graphicsklassen updatedisplay();//obs!! anropa aldrig OnDraw() själv! Anropas var gång fönstret flyttas eller updatedisplay anropas. Anropas med det intervall du angav i setandstarttimer. ; Allt som behövs i main!!! int APIENTRY _twinmain(hinstance hinstance, HINSTANCE hprevinstance, LPTSTR lpcmdline, int ncmdshow) CManicGame app; app.showmodal(); // Visar fönstret och går in i eventloopen. return 0; Resultated av denna oerhörda kodmängd är detta:
Om du tittar i sglib.hpp så ser du v ad du kan göra mer med graphics objektet. Att göra en bitmapp som går att rita ut. För tillfället är det bara 24 bitars BMP filer som går att använda. Ett enkelt sätt att förvissa sig om att din bild är på detta format är att kopiera in den i mspaint och spara den som bmp därifrån. Då kan du använda paintshop eller vilket annat verktyg du vill för att skapa bilden. Rita en bitmapp Lägg till en variabel av typen Sprite till din applikationsklass class CManicGame:public Application Sprite player; int m_x, m_y; // Player position. public:... I konstruktorn kan du ladda bitmappen: CManicGame() Application::init("Manic Mainer!",WIDTH,HEIGHT,XPOS,YPOS); // Initialize game! player.initfrombmp("player.bmp"); player.addtransparentcolor(255,255,255); // Vitt är genomskinligt! // Sätter upp att ontimer skall anropas med ett visst intervall(1). Application::setAndStartTimer(1); I ondraw ritar du den: void ondraw() Graphics g; player.draw(g,m_x,m_y); g.drawcircle(30,70,10); I ontimer kan du flytta den: void ontimer() if(application::iskeydown(sg_right)) m_x = (m_x + 3) ; if(application::iskeydown(sg_left)) m_x = (m_x - 3) ; if(application::iskeydown(sg_down)) m_y = m_y - 3; if(application::iskeydown(sg_up)) m_y = m_y + 3; updatedisplay();
Klasserna som kommer med sglib 1.0 Application Graphics Bitmap init( ) setandstarttimer( ) showmodal( ) updatedisplay( ) iskeydown( ) v o n D r a w ( ) v ontimer( ) v onkeydown( ) v onmousedown( ) v onmouseup( ) v onmousemove( ) setclearcolor() ; setcolor( ) setcoloralpha() sgsetpensize() drawline( ) drawrect( ) drawfilledrect( ) d r a w C i r c l e ( ) drawfilledcircle( ) drawtriangle( ) drawfilledtriangle( ) drawquad( ) drawfilledquad( ) d r a w T e x t ( getwindowwidth(); getwindowheight(); width height pbuf draw() initfrombmp() addtransparentcolor() Detaljer om metoderna kan du läsa om i sglib.hpp eller källkoden..
Teknisk information för den som är intresserad När jag bygger sglib så har jag ett custom steg på slutet av bygget. Detta för att slippa ha massa olika inkluderingsfiler för studenten att hålla reda på: För linux porterare, notera pragma definitionen i orginalfilen för sglib.hpp. Notera också att iskeydown i application inte fungerar för linux än... Tar tacksamt emot kod för detta... Såhär är libbet uppbyggt: (Där sglib.hpp byggs enligt ovan av de andra filerna). C Cpp sglib.hpp sglib.h sginternal.h GLUT OpenGL WIN32/Linux