Programmera spel i C++ för nybörjare/Installation av 2.3.X och VS 2013

Från Wikibooks

Året är 2015, och mycket har hänt både med Windows och SFML sedan installationshandledningen till SFML version 1.6 skrevs.

Vad behövs numera? (2015)

Det finns flera olika versioner där:

  • Community 2013
  • Express 2013 for Web
  • Express 2013 for Windows
  • Express 2013 for Windows Desktop
  • Team Foundation Server 2013 Express

Jag vet att Community 2013 fungerar, därför rekommenderar jag den. Ladda ner den och installera den på din dator.

  • Det står att den vill installera "C:\Program (x86)\Microsoft Visual Studio 12.0" men det är helt ok. Det är versionen för 2013 du får, inte 2012.
  • Det är en stor installation som kräver 10 GB ledigt utrymme. Det tar över en timme på trådlöst nätverk.
  • Har du inte Windows 8.1. professional edition är det helt onödigt att ta med verktyg för att skapa appar. De verktygen fungerar endast i professional edition. Av någon anledning installerades emulatorn för Windows Phone 8.1 trots att jag inte kryssade i det alternativet.
  • Du måste installera uppdatering KB2883200 efteråt, om det inte redan är gjort, för att allt skall fungera. Troligen är det redan gjort om du har automatisk uppdatering påslagen.

Logga in, första gången Community edition används. Det krävs ett Microsoft konto (live, hotmail eller liknande). Första gången du loggar in tar det litet extra lång tid.

Klar? Ta hem SFML. Skapa en mapp som heter sfml på c:\sfml spara zip-filen där och packa sedan även upp alla filerna där.

Det finns en bra installationsbeskrivning här, på engelska: http://www.sfml-dev.org/tutorials/2.3/start-vc.php

Här har du ett bildspel som visar installationen steg för steg: https://docs.google.com/presentation/d/1UiZdJTQJdyXBpXceSlcHDicFh0ew1ogY_UzmWzW0w5I/edit?usp=sharing

  • Välj ett nytt C++ projekt (Visual Basic är av någon anledning standard första gången)
  • Välj ett tomt windows 32 konsollprojekt (console).
  • När det kommer upp en textruta med frågan om du vill skapa ett tomt projekt, kryssar du i den.
  • När du sedan trycker på [Finish] kommer du att ha ett nytt projekt utan någonstans att skriva C++ kod. Det åtgärdar du genom att öppna mappen "Source" i högra rutan, högerklicka och välja att skapa en ny .cpp fil. Döp den till main.cpp, för enkelhetens skull.

OBS gör du inte på det här sättet kommer inte Visual Studio att skapa .exe-filer!

Var hamnar projektets main.cpp fil?

C:\Users\<dittnamn>\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\main.cpp


Koppla ihop med SFML[redigera]

Inställningar under "All Configurations"[redigera]

I menyraden längst upp väljer du: [Project] och sedan det nedersta alternativet [ConsoleApplication1 Properties] Klicka på:

 [C/C++]
 [General]

Längst upp på den högra sidan står det ”Additional Include Directories”. I textrutan bredvid fylller du i sökvägen till din SFML include mapp; C:\sfml\SFML-2.3.1-windows-vc12-32-bit\SFML-2.3.1\include för mig. Tryck därefter på [Verkställ] knappen. Om du av misstag trycker på [OK] knappen är det ingen katastrof, men du måste öppna properties igen och du måste återigen ändra alternativrutan till [All Configurations] innan du fortsätter. Den återställs nämligen automatiskt när fönstret stängs.

OBS! om du inte hittar den rubriken får du istället gå in under:

 VC++ Directories

Där väljer du

Include Directories

och på höger sida söker du upp C:\sfml\SFML-2.3.1-windows-vc12-32-bit\SFML-2.3.1\include, det händer av någon okänd anledning på en del av datorerna som man nyinstallerar Visual Studio på. Efter du gjort detta kommer rubriken med C++ att komma upp, precis som det beskrivits här ovan. Stäng bara ner pop-up fönstret först och öppna det sedan igen.


Sök därefter upp rubriken under C/C++ som heter [Linker]. Klicka på:

 [Linker]
 [General]

I mitten på högra sidan står det: ”Additional Library Directories”. I den tomma textrutan bredvid skriver du in sökvägen till C:\sfml\SFML-2.3.1-windows-vc12-32-bit\SFML-2.3.1\lib (för mig). Klicka därefter på [Verkställ].


Inställningar under "Debug"[redigera]

Nu är du klar med alla inställningar som VS 2013 Express behöver i ”All Configurations” läget. Nu är det dags att ställa in allt som behövs i ”Debug mode”, dvs. när du programmerar.

Ändra alternativet i den övre vänstra alternativrutan till Debug från All Configurations. Efter det söker du upp rubriken

 [Linker]
 [Input]

Överst på högra panelen står då: ”Additional Dependencies”. Där fyller du i de bibliotek du tänker använda:

sfml-system-d.lib
sfml-window-d.lib
sfml-graphics-d.lib

Eller, för alla 5:

sfml-system-d.lib
sfml-window-d.lib
sfml-graphics-d.lib
sfml-network-d.lib 
sfml-audio-d.lib

Du måste fylla i dem uppifrån och ner, inte i rad. Annars fungerar det inte. Symbolen -d i namnet visar att den tillhör debug-läget.

Inställningar under "Release"[redigera]

Efter det söker du upp rubriken:

 [Linker]
    [Input]

Överst på högra panelen står då: ”Additional Dependencies”. Klicka på rutan till höger som är full av text. Då syns en liten pil-ner ikon. Klicka på den så att markeringen <Edit…> syns och efter det att du klickat på <Edit…> skall redigeringsfönstret öppna sig.


Sök därefter upp rubriken under C/C++ som heter [Linker]. Klicka på:

 [Linker]
 [Input]

Under "Additional dependencies" fyller du i de bibliotek du tänker använda:

sfml-system.lib
sfml-window.lib
sfml-graphics.lib

Eller, för alla 5:

sfml-system.lib
sfml-window.lib
sfml-graphics.lib
sfml-network.lib 
sfml-audio.lib


DLL-filerna som krävs[redigera]

Vi skapar dynamiska projekt, inte statiska. Det innebär att samtliga .dll filer som finns i SFML-bibliotekets "bin" mapp måste kopieras till samma mapp som main.cpp ligger. I exemplet:

C:\Users\<dittnamn>\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\

Filer för att ljudet skall fungera:

openal32.dll
sfml-audio-2.dll
sfml-audio-d-2.dll

Filer för att grafiken skall fungera:

sfml-graphics-2.dll
sfml-graphics-d-2.dll

Filer för att nätverksfunktioner skall fungera:

sfml-network-2.dll
sfml-network-d-2.dll

Filer för att systemfunktioner skall fungera:

sfml-system-2.dll
sfml-system-d-2.dll

Filer för att fönsterfunktioner skall fungera:

sfml-window-2.dll
sfml-window-d-2.dll

När du skapat ett eget program måste motsvarande .dll-filer skickas med för att programmet skall fungera. Då bör de ligga i samma mapp som programmets .exe-fil.


Skapa ditt program[redigera]

Du bygger exe-filerna genom att trycka in tangentkombinationen [CTRL]+[SHIFT]+[B]. Om allt gått som det skall byggs en exe-fil i

 C:\Users\<dittnamn>\Documents\Visual Studio 2013\Projects\ConsoleApplication1\Debug\

eller en i

 C:\Users\<dittnamn>\Documents\Visual Studio 2013\Projects\ConsoleApplication1\Release\

beroende på om du bygger filen i debug eller release läge. Pröva alltid bägge lägena för att se om det blir något fel. Det är .exe-filen i "Release" mappen som du skall skicka med om du vill dela med dig av ditt spel till andra, tillsammans med motsvarande .dll-filer (se nedan).


Fel som visar att tomt projekt inte fungerar[redigera]

Du kör exe-filen med [CTRL]+[F5].

Om du får ett felmeddelande liknande detta:

'"c:\users\ingemar\documents\visual studio 2013\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe"' is not recognized as an internal or external command, operable program or batch file.
Press any key to continue . . .

då är din main.cpp fil inte en del av ditt projekt och ingen exe-fil skapades. Då måste du klicka på mappen "source" i högra fältet och välja "existing" din .cpp fil och köra igen.

Detta problem fanns inte i äldre versioner av VS utan är ett nytt problem.


Länka dynamiskt, inte statiskt[redigera]

Får du 67 fel bara på denna kod:

#include <SFML/Graphics.hpp>

int main()
{
	sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");

	return 0;
}

Då är koden statiskt länkad. Du undviker detta genom att alltid länka dynamiskt. Då får du också alltid kopiera in alla dll-filerna i samma bibliotek som du hittar main.cpp.

Kodexempel[redigera]

Om allt gått som det är tänkt skall du kunna köra detta kodexempel som skapar ett litet svart fönster med en stor grön cirkel:

#include <SFML/Graphics.hpp>

int main()
{
   sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
   sf::CircleShape shape(100.f);
   shape.setFillColor(sf::Color::Green);

   while (window.isOpen())
   {
       sf::Event event;
       while (window.pollEvent(event))
       {
           if (event.type == sf::Event::Closed)
               window.close();
       }

       window.clear();
       window.draw(shape);
       window.display();
   }

   return 0;
}