Spel maken met C++

Status
Niet open voor verdere reacties.

wahagn

Gebruiker
Lid geworden
10 apr 2008
Berichten
154
hallo, ik wil hier aan ervaren c en c++ programeurs het volgende vragen:

ik wil een spel maken maar weet niet waar te beginnen:
ik wil het maken met c++, ik ken de taal (oppervlakig kennen) en weet ook het een en ander over opengl. ik wil nu een spel maken maar weet niet waar ik moet beginnen, ik bedoel ik open dev-C++ en dan moet ik op beginnen met die code maar weet niet hoe.(ik kan wel een aplicaties veranderen)

nu is mijn vraag; is er niet ergens op internet iets voor c++, bijvoorbeeld een soort begin van de code waar ook commentaar bij staat, van hier doe je dit en hier dit?? of een newbie tutorial waar uitgelegd is bij wat voor soort game wat voor opbouw van code je moet hebben?

hopelijk begrijpen jullie goed mijn vraag:):confused::confused::rolleyes:
 
Laatst bewerkt door een moderator:
Ik weet niet of er websites zijn met zo'n begin opbouw. Maar hoe ik meestal begin is de standaard functies schrijven, zoals het weergeven van een afbeelding of het bewegen van de achtergrond. Ook moet je met win32 een scherm weergeven. Pas als je alle functies hebt geschreven die je denkt nodig te hebben kan je verder met het ontwerpen van het spel.

P.S. Begin 2d leuker, makkelijker en mooier resultaat.

P.S. 2 Ik ben geen expert en heb maar 2 kleine spelletjes afgemaakt dus het is maar een tip.
 
nee ik kan ook wel een voorbeeld pakken en veranderen en dan heb ik 2d wat ik al zei .. maar ik wil 3d mmorpg
 
oeioei, mmorpg :S

dan zul je een protocol moeten schrijven voor je game.
Een server, en client maken.

Om een 3d wereld te maken zul je ook 3 modellen moeten kunnen maken.

Geen makelijk project eigenlijk.

Als je bv ziet naar world of warcraft, en weet hoeveel mensen hier aan mee werken en onderhouden. dat kun je niet alleen.

Maar opengl is wel goed om in te beginnen denk ik.

Op het internet vond ik ook niet veel over opengl programming dus ik heb er een boek overgekocht.
Als je echt een game wilt maken zul je wel geld moeten opdoen om boeken te kunnen kopen.
 
met modellen zit het wel goed. en over de team gesproken ik will zelf in mn eentje beginnen met opbouwen van een basis maar wil later wel een team, als al vertrouwen in hebben dan kunnen ze helpen met modellen en een computer die als server dient.
 
met modellen zit het wel goed. en over de team gesproken ik will zelf in mn eentje beginnen met opbouwen van een basis maar wil later wel een team, als al vertrouwen in hebben dan kunnen ze helpen met modellen en een computer die als server dient.

Veel succes...


In ieder geval zou ik hier beginnen: NeHe (begin bij les 1 en werk je omhoog)
 
ik kende die site al maar daar vind ik toch geen opbouw voor mn spel?? of heb ik iets over het hoofd gezien?
 
Eenmaal je denkt aan iets als een 3D mmorpg is het relatief onrealistisch om alles vanaf 0 op te bouwen (geloof me, bepaalde personen hebben daar al enkele eindwerken op versleten..)

Meestal ga je dan op zoek naar een Engine (een soort code-bibliotheek) die 'basiscodering' van je overneemt. In jouw geval zal je dus op zoek moeten naar Libs/Engines voor de volgende dingen:
* 3D-beeldweergave (evt met plugins voor rechtstreeks laden van modellen/meshes)
* Input (keyboard, muis, joystick?)
* Geluid (mono, stereo, 5.1 - achtergrondmuziek, ambientsounds, sfx)
* Phisics/Particles (voor je effecten zoals bvb spellcasts, maar ook rondrijdende paarden)
* AI (voor mobs, pathfinding/autotrace)
* Netwerking (evt met voorgeleverd protocol)

Enkele voorbeelden die je kan uitzoeken:
beeld
Ogre3D: grote userbase, handig als je in VisualStudio ontwikkeld, een vrij grote merde in andere IDE's imo
IrrLicht: 3D-renderer+particle engine+inputhandler - crossplatform!: zeer licht in het gebruik van systeemresources, mijn persoonlijke aanrader en favoriet
SDL: 2D-engine, gebruikt door zowel Ogre als IrrLicht, voor als je toch zelf je 3D-handlers wil schrijven :p
geluid
OpenAL: de meest primitieve audio-engine, vraagt nog veel eigen code, maar kan ook bijna alles
IrrKlang: OpenAL uitgebreid en afgesteld op IrrLicht
SDL_Mixer: vrij eenvoudig in gebruik
Netwerk:
SDL_Net: ik heb nog geen andere netEngines gebruikt, maar echt handig vond ik deze niet
RakNet: heeft zeer goede reviews
Phisics
Newton, PhysX, ODE (<- aanrader)

Er zijn wel meer engines en libs, maar hiermee kan je toch al wat gerichter zoeken denk ik.
 
Ik wens je in ieder geval veel succes maar ik denk dat dit toch redelijk onbegonnen werk is tenzij je minstens 10 jaar tijd hebt.

Ik zou zoiezo al een render engine gebruiken (zoals ogre) omdat dit zelf maken enorm moeilijk is en deze toch al een heel goed startpunt geven.
En de rest hangt er vanaf hoe ver je het spel wil uitwerken. Maar ik zou eerst ogre3D al eens proberen en als je daar dan al goed mee kan werken en dus dingen kan maken dan de sound/physics/netcode toevoegen.

EDIT:

Wat je misschien ook kan doen is eens kijken naar XNA. Dat is een soort van wrapper voor DirectX voor windows en de XBOX 360. Hierin zitten al sound engines en netcodes in en is een eenvoudigere manier om 3D te programmeren
 
Laatst bewerkt:
ik heb irlicht wel gebruikt maar ben er mee gestopt want ik probeerde de demo daarvan als basis te gebruiken allen hij compilen lukte niet dus heb ik (hir op deze of andere) forum gevraagd om oplossing maar ben niet verder gekomen en doordat er allemaal problemen waren met irrlicht zoals dat een gemaakte world in irredit: e plaatjes die ik erin had gebruikt konden niet gevonden worden als ik het compilende en na weer het op een forum gevraagd te hebben kwam er geen oplossingondanks de hoeveelheid reacties
.

maar op NeHe kan ik niks voor en opbouw vinden... net zoals ik eerder zei als jullie wel iets hebben gezien vertel het dan...

en van XNA begreep ik dat het te ingewikeld was


Edit:

ik heb irrlicht 1.5 gedownload en bij bijna elke example die ik probeer ete comilen komt een error.. zou dit te maken kunnen hebben met dat ik niks voor phisics gewonload heb??

en zo niet kunne ***lie me helpen als ik de errors beschrijv?? en ovrigens moet ik als ik irrlicht download de comiler laten weten waar die zich bevind?( zoja, zoals ik al zei heb ik irrlicht vroeger gebrobberd te gebruiken voor mn spel toen heb ik dat niet gedaan) en hoe?
 
Laatst bewerkt:
Ik heb nooit porblemen gehad met de IrrLicht Demo's.. Je moet natuurlijk wel de tutorialpages op hun site even doornemen ;p (wel problemen gehad met meshes, maar dat lag uiteindelijk aan het meshtype)

Ja, als je gebruikt maakt van een library moet je dat aan je linker (niet je compiler, maar meestal wel samen geleverd zoals gcc) laten weten. Bij GNU-compliant Compilers, zoals gcc en de M$-compilers, gebeurt dat met de parameter -l (kleine L) gevolgd door de naam/het pad van de lib.
In de meeste IDE's kan je dit ook relatief eenvoudig via projectinstellingen (Eclipse CDT is uitermate handig vind ik).

Moest je problemen hebben met de tutorials van IrrLicht (hier te vinden), mag je hier altijd een topic aanmaken, en probeer ik je verder te helpen zoveel ik kan.

Voor andere engines wil ik dat ook proberen, uit interesse, maar ik heb ze nog net niet allemaal rondslingeren :p
 
ook nu lukt het compile van demo niet en ik heb bij project en instellingen gekeken:
daar staat bij linker de library wel bij van irrlicht dus daar licht het niet aan:confused:. maar zo als ik eerder vroeg zal ik toch maar de errors die ik krijg hier vermelden??

P.S het is niet dat alleen de demo niet compileert maar de meerendeel van de examples maar daar kriijg ik ander soort errors.

EDIT:

kijk zoals je hieronder ziet zijn dat allemaal errors te maken met irrKlang (foto 1,2,3,4)

maar daaronder zie je dat de mijn compiler weet waar de lib van irrKlang is (foto 5)

dus ik heb irrKlang ik heb die map naast die van Irrlicht en Dev-Cpp geplaats...
 

Bijlagen

Laatst bewerkt:
Het linken van de lib is inderdaad correct, het probleem dat je nu hebt bevindt zich in de code.

Een library is eigenlijk een verzameling van implementaties (klassiek de files die eindigen op .c of .cpp). Wat je nu hebt gedaan is aan je linker zeggen dat wanneer hij iets nodig heeft van irrKlang, hij dat in die lib kan vinden.
Echter weet je compiler niet wat er in die lib zit, en daarvoor dienen header-files (degene die eindigen op .h)

Zoals je kan zien in de foutmelding in naamloos5.bmp, kan de compiler irrKlang.h niet vinden die vanuit main.cpp wordt aangeroepen. Je moet er dus voor zorgen dat die headerfile op de juiste plaats staat.

Wat ik meestal doe als ik met libraries werk, is het volgende:
  • maak een map aan genaamd lib in je projectmap, hierin plaats je alle voorgecompileerde libs (eindigend op .a .dll .so .la .lib)
  • maak per lib een nieuwe map aan met de naam van die lib, bvb in de map lib die je daarnet aanmaakte. Daarin komen de headerfiles van die lib in. Voor irrKlang zou dat dan /lib/irrKlang/ worden.
  • kijk in je compilatie-errors naar de errors die zeggen dat een bepaalde header-file niet kan gevonden worden (lijnen zoals xxx.h: No such file or directory) en pas de regels met die foutmelding aan zodat ze naar het juiste bestand wijzen
 
ik snap wel dat ik die map met lib aanmaak en dat ik daar headerfiles daarin stop, maar ik snap dat laatse niet: verander de regels zodat ze naar het juiste bestand wijzen hou meot dat dan want er staat geen link,... maar : include <irrKlang.h>..
dus moet ik hem laten weten waar het is ik heb het met parameters dus die linker geprobeerd maar dat lukt niet
 
oke.. ik vermoed dat je het verschil tussen #include "header.h" en #include <header.h> doorhebt.
In het eerste geval wordt de header gezocht in de relatieve directory tov de file, in het tweede geval wordt er in de include-path's gekeken. Die includepath's kan je aan de compiler meegeven (commando ontsnapt me en niet op eigen pc..), en bevatten binnen je IDE normaal altijd alle headers van de STL (standaard bibliotheek).
Wanneer je de lib aan de linker meegeeft, zeg je deze waar hij de code(implementatie) kan vinden, maar niet waar de header-files staan.

Om je probleem op te lossen kan je dus je directory met headerfiles als includepath aan de compiler opgeven, maar hier ben ik persoonlijk niet zo'n voorstander van (hoewel het wel 'minder' werk is).
Of je past de include-regel aan zodat die ipv #include <irrKlang.h> het relatieve pad bevat (iets als #include "lib/irrKlang/irrKlang.h").

Tenslotte wil ik graag nog even benadrukken dat de linker en de compiler 2 verschillende dingen zijn, hoewel ze via hetzelfde programma worden opgeroepen.
Wanneer je van je broncode een uitvoerbaar bestand maakt, wordt eerst de compiler opgeroepen. Deze loopt over alle implementatiefiles (.cpp) en kijkt op dat moment of alle functies/typesdie erin gebruikt worden gekend zijn (= gedefiniëerd zijn -> header-files bevatten definities). Ook voert die een aantal optimalisaties door, en nog wat veranderingen waar ik zelf niet zo heel veel over weet :p.
Het resultaat van de compiler is een verzameling van object-files. Normaalgezien wordt er per codefile (.cpp) een objectfile (.o) aangemaakt.
Vanaf nu is het werk van de compiler gedaan en komt de linker aan de beurt. De linker zorgt ervoor dat alle nodige code voor de uitvoer aanwezig is. Deze zoekt dus van alle definities die gebruikt zijn de geoptimaliseerde/voorgecompileerde code op, zowel in objectbestanden als in libraries (wanneer je .ddl/.so gebruikt, zit hier een verschil in). De linker brengt al deze code samen in een uitvoerbaar bestand (je .exe), nadat er opnieuw geoptimaliseerd werd.

Deze uitleg om je te laten begrijpen dat het de compiler is die nood heeft aan headers, en de linker die nood heeft aan libs.
 
bedankt voor alles :thumb::) Het probleem van irrKlang is opgelost maar ik moet je toch nog 1 keer lastig vallen omdat er nu nog 1 error is overgebleven: die zit op lijn 49 en heeft te maken met kleuren (rgb). in CMainMenu.cpp.
z.f.
 

Bijlagen

hm... ik heb de code op de svn even doorgenomen en kan nog niet met 100% zekerheid een oplossing geven. Het enige wat me opvalt is dat de functie gedefiniëerd is als SColorHSL::toRGB(SColor &color) en dus een reference moet meekrijgen als parameter.
In de demo wordt echter een copy van het object doorgegeven.

Wat je error zou moeten oplossen volgens mij is de bewuste regel 49 van CMainMenu.cpp wijzigen naar het volgende:
Code:
color.toRGB(&rgb);
(dus met een & voor de variabele).

Op die manier geef je de adreswaarde (de pointer) van rgb door, in plaats van de waarde. Ik weet niet hoeveel je al dan niet van pointers kent, maar hoe meer je programmeert, hoe vaker je ze zal tegenkomen en nodig hebben. Als je wil, kan ik wel even enkele links doorlezen om diegene die volgens mij goed zijn vervolgens hier te plaatsen.

Ik zal zodra ik kan de demo ook nog eens bij mij uittesten (ik heb nog niet met IrrLicht gewerkt sinds versie 1.5) en in elk geval contact opnemen met Nico (de hoofdontwikkelaar) om dit te laten nakijken/verbeteren.
 
nee dat werkt niet. ik krijg nog seeds precies dezelfde fout. ik snap niet wat je bedoelt links doorlezen en hier plaatsen, bedoel je een paar sites waar uitgelegd is wat pointers zijn ofzo??
 
Laatst bewerkt:
hm... Ik zonet zelf de IrrLichtSDK gedownload versie 1.5 en irrKlang1.1.3c en heb geen enkel compilatieprobleem wanneer ik compileer.

Als IDE heb ik wel CDT van Eclipse gebruikt, maar de ide zou geen invloed mogen hebben.
Ik ben als volgt tewerk gegaan:
Nieuw leeg project aangemaakt, daarin de volgende bestanden gekopiëerd:
  • main.cpp
  • CMainMenu.h
  • CMainMenu.cpp
  • CDemo.h
  • CDemo.cpp
Vervolgens heb ik een map /lib aangemaakt met daarin:
  • libIrrlicht.a uit irrlicht-1.5/lib/Win32-gcc/
  • libirrKlang.a uit irrKlang-1.1.3/lib/Win32-gcc/
toen heb ik aan de linker laten weten waar die deze libs kon vinden:
Code:
-L "C:\pad_naar_je_projectfolder\Demo\lib"
en ook welke libs dat zijn
Code:
-lIrrLicht -lirrKlang
De volgende stap was het toevoegen van de headerfiles aan mijn project:
  • irrLicht:
    • map aanmaken: /lib/irrLicht/
    • de inhoud van irrlicht-1.5/include/ naar deze map kopiëren
  • irrKlang:
    • map aanmaken: /lib/irrKlang/
    • de inhoud van irrKlang-1.3.3/include/ naar deze map kopiëren
Als laatste moeten enkel nog de verwijzingen in het demoproject die naar deze headerfiles wijzen aangepast worden:
  • main.cpp: lijn 4: #include "lib/irrLicht/irrlicht.h"
  • CMainMenu.h: lijn 7: #include "lib/irrLicht/irrlicht.h"
  • CDemo.h: lijn 10: #include "lib/irrLicht/irrlicht.h"
  • CDemo.h: lijn 21: #include "lib/irrKlang/irrKlang.h"

Tenslotte kan je ook de pragma-commands naar deze libs in commentaar zetten/verwijderen, ze zijn te vinden in main.cpp (lijn 18) en CDemo.cpp (lijn 25)

Wanneer ik toen compileerde ging dat zonder enige error/waarschuwing.
Om het programma uit te voeren moet je wel nog de .dlls van de 2 libs in dezelfde folder als je executable zetten en de correcte mediafolder/files aanmaken (doorzoek je code eens op "../../media" om ze allemaal te vinden, dat zouden tussen de 30 en 40 verwijzingen moeten zijn)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan