Spiele mit C++ & DirectX programmieren.. wie fange ich an?



  • Hi!

    Würde mich auch mal interessieren, ob man sowas auch gut mit dem Borland Builder hinbekommt. Eigentlich ist das ja mehr was für VC++, oder?



  • meiner meinung nach sollte man bei allem was man programmiert, egal ob ein spiel oder etwas anderes, sich zuerst ein allgemeines system programmieren, mit dem man dann das spezielle system (das eigentliche programm, das man schreiben möchte) erstellt.

    ein gutes beispiel:

    wenn du ein programm schreiben möchtest, das die funktionalität eines "buttons" (ein knopf, wie in windows, auf den man klicken kann und der eine aktion auslöst, meistens "OK" oder "Abbrechen" 🙂 ) besitzt, dann sollte man nicht hingehen und das programm so schreiben, das man nur die funktionalität des "knopf-drücken-und-wieder-loslassen-und-dann-aktion" hat, und zwar nur für diesen einen button, genau an der stelle im programm, an der er benutzt wird, sondern mann sollte sich gedanken darüber machen, welches allgemeine system dieser button, mit anderen buttons, oder auch anderen steuerelementen, wie z.b. checkboxes (kästchen das man aktivieren und wieder deaktivieren kann) oder comboboxes (eine dropdown listbox, wie das hier im forum zur auswahl der themengebiete) gemeinsam hat, und dann ein allgemeines system schreiben, das für all diese steuerlemente gilt. wenn man das hat, dann schreibt man die buttons, checkboxes und comboboxes (etc.) nur als spezielle form dieses allgmeinenen systems. das hat vorallem den vorteil, das man 1. so viele steuerelemente wie man nur möchte benutzen kann und nicht für jeden button (etc.) alles wieder neu schreiben muss und es hat 2. den vorteil, das man viel schneller viel mehr unterschiedliche steuerelemente programmieren kann, weil diese das allgemeine system benutzen. das ist dem prinizp von basisklassen in der objektorientierten programmierung gleich, nur eine abstrakte stufe "höher" (auf der stufe der systeme).

    das gleiche prinzip sollte man nun auch bei spielen anwenden. man schreibnt sich suerst ein allgeiemeines system, das die komplette funktionalität das eigentlichen spiels erfüllt, und schreibt dann das eigentliche spiel nur als spezialisierung des allgemeinen system. das allgemeine system könnte man dann als engine bezeichnen; also eine softwaremaschine, die die hauptarbeit des spiel realisiert. das spiel ist dann eigentlich nur eine art "makro-verarbeitungs-und-animations-programm", das nur noch konfiguriert und designt wird.

    man könnte sagen, das wenn man ein spiel spielt, man nichts anderes tut, als sich animationen anschaut, abläufe von makros beobachtet und dazu noch selbst, mit hilf der eingabegeräte, das geschenen etwas beeinflusst.

    damit es nicht ganz zu schwierig für dich wird, solltest du erst einmal ein paar klassen schreiben, die polygone mit directx auf den bildschirm bringen. dann solltst du dir 3d-modelle besorgen, die du laden kannst, und diese dann anstelle der polygone auf den bildschirm bringen.
    damit kann man dann schon ein kleines spiel schreiben (siehe directx demos und beispiele)

    natürlich ist noch viel mehr notwendig, aber ohne 3d-modelle ist es unmöglich ein 3d-spiel zu schreiben.

    wenn dir das zu kompliziert ist, dann schreib dir eine 2d-engine und ein 2d-spiel. da brauchst du keine 3d-modelle sondern nur bitmaps (so wie in supermarioland, das waren auch nur bitmaps)

    als IDE bzw. compiler würde ich microsoft visual studio .net empfehlen, die c++ version gibt es schon ab 124 EURO. die benutze ich auch und die kann alles was man braucht. das einzige was an dieser "abgespeckten" c++ version von visual studio enterprise architekt schlecht ist, ist, das der kompiler etwas langsameren code erstellt. aber das ist nicht sehr tragisch und hat keinen wirklichen einfluss auf die qualität der programme) ausserdem gibt es ja noch den intel c++ compiler für visual studio .net, der superschnellen code erstellt (natürlich auch für P4-prozessoren mit sse2). allerdings ist der nicht ganz billig (ich glaube 399 EURO)



  • Was für einen C++ Compiler soll ich am besten verwenden?

    besorg dir am besten einen kostenlosen Compiler und eine kostenlose IDE, da du bei deinen Vorkentnissen wahrscheinlich eh sehr früh aufgeben wirst und das viele Geld wär umsonst ausgegeben

    Übersicht der kostenlosen Compiler + Linkliste



  • @KXII

    schön, wie du das konzept der objektorientierten programmierung verstanden hast!
    😛



  • @gibbets2000

    ích glaube meine überlegungen gehen noch etwas weiter. bei der objektorientierten programmierung bezieht sich das konzept nur auf die einzelobjekte. meine darstellung betrachtet aber das gesamtsystem, also eine gruppe von objekten. das hat eigentlich nichts direkt mit oo programmierung zu tun. schön wäre es wenn, es eine programmiersprche gäbe, die dieses konzept als grundlage nehemen würde und nicht nur die objekte... c++ ist meiner meinung nach eine sehr unvollkomene sprache und an vielen stellen verbesserungsfähig! alleine das bedingte includieren von headerdateien ist sowas von überflüssig...



  • Original erstellt von KXII:
    c++ ist meiner meinung nach eine sehr unvollkomene sprache und an vielen stellen verbesserungsfähig! alleine das bedingte includieren von headerdateien ist sowas von überflüssig...

    Jau, Java macht da schon einiges besser, ist nur leider saulahm, und leider auch net ganz "bugfrei".

    C# hab' ich mir noch net angesehen... aber... naja... 🙄



  • ich muss mir auch mal c# genau anschauen. vielleicht ist das ja eine "verbesserte" version von c++. wahrscheinlich ist es aber nur ein mischmasch aus visual c++ und visual basic, den man für schnelle spiele nicht gebrauchen kann.



  • Original erstellt von KXII:
    wahrscheinlich ist es aber nur ein mischmasch aus visual c++ und visual basic, den man für schnelle spiele nicht gebrauchen kann.

    Wohl eher Java-like C++, oder?!? Mit vernünftiger Klassen-Struktur / -Hierarchie (echt lobenswert).
    Aber leider wird der 2. Halbsatz trotzdem darauf zutreffen... 🙄



  • Mischmasch aus VB und C++ ist schon mal völlig falsch.
    C# ist eigentlich Java, bietet aber keine Verbesserungen. Für die Spieleentwicklung wäre es vielleicht interressant gewesen, wenn es nicht auch wie Java auf ner Art VM laufen würde.
    Von daher ist es eigentlich nichts groß anderes, allerdings hat sich Java schon mehr etabliert als C#.
    Für Spiele "muss" man leider nach wie vor C++ verwenden



  • Original erstellt von Optimizer:
    Für Spiele "muss" man leider nach wie vor C++ verwenden

    wieso leider? was gibt es an c++ auszusetzen?



  • mag ja sein, das c# eher mit java zu vergleichen ist, aber viele wissen nicht, das man auch mit visual-basic klassen erstellen kann, und im prinzip genauso wie in c++ programmieren kann. genaugenommen kann man mit visual basic sogar so ziemlich alles machen, was man auch mit visual c++ machen kann, nur viel schneller und einfacher als mit c++, nur das die programme etwas langsamer ablaufen (hat jemand von euch schon mal eine activex dll mit visual c++ und mit visual basic geschrieben? ...). ich bin kein visual basic fan, habe aber schon ein paar programme damit geschrieben und wenn es nicht auf die geschwindigkeit ankommt, dann ziehe ich visual basic allemal visual c++ vor! c++ ist eigentlich dreck, nur leider will das niemand einsehen, und deshalb gibt es bis heute keine verbesserte version!



  • Borloand's C++ Bulider hat mir sehr gut gefallen. Einfache Applikationserstellung wie in Visual Basic als Sprache C++. Ich verstehe auch nicht warum alle auf VisualC++ stehen.



  • Original erstellt von KXII:
    c++ ist eigentlich dreck, nur leider will das niemand einsehen, und deshalb gibt es bis heute keine verbesserte version!

    dann erklär doch mal genau, was daran dreck ist! 😡



  • im prinzip kann ich mich kingruedi nur anschließen:
    arbeite dich erstmal in c++ ein, das kommt dir echt nur zugute. und gib vor allem nicht voreilig viel geld aus...

    @KXII
    ähm, also was die geschwindigkeit beim programmieren mit vb angeht:
    da einer meiner lehrer ein absoluter vb-fan ist, müssen wir uns leider (die gründe für das "leider" folgen gleich) auch mit vb auseinandersetzen.
    wenn man mit klassen (und somit auch dlls) arbeitet, stößt man des öfteren auf das problem, dass vb einfach nicht checken will, dass ich die dlls schon dem projekt hinzugefügt habe, also muss ich fast jedes mal nach dem laden des projekts die ganzen verbindungen wieder hinzufügen (bzw erstmal entfernen, auf "ok" klicken, wieder auf projekte->verbindungen gehn und sie wieder einfügen). das ganze bei (im moment) 28 dlls..., da nervt das dann schonmal ungemein.
    den datenbankzugriff möchte ich garnicht erst erwähnen..., einfach schrecklich...
    dann solche umständlichen sachen, dass er bei einer OR-verknüpfung in einer if-clause grundsätzlich auch die zweite bedingung prüft, auch wenn die erste bereits "true" ergibt (was java und c++ nicht machen). das verkompliziert die ganze sache meist nur...
    solche beispiele könnte man sicher noch ein paar bringen...



  • @!

    wer das nicht erkennt hat sich wohl nie darüber gedanken gemacht, was er beim programmieren eigentlich macht, und vorallem keine gedanken darüber, wie er das, was er beim programmieren erreichen möchte am einfachsten erreichen kann. ich sage nur: man kann sich die hose auch mit der beißzange anziegen 🙂



  • @meian

    dein problem mit den dlls kenne ich nicht. bei mir funktioniert das ohne probleme. einmal angeklickt sind sie immer aktiv. allerdings frage ich mich wieso ihr 28 dll's benutzt. entweder ihr seid supergurus oder ihr habt da einfach schwachsinn programmiert, und jede zeile eures programms in eine extra dll gepackt 🙂

    was die geschwindigkeit angeht:

    man sollte natürlich geübt sein im umgang mit vb. wenn man nicht weis wo was ist oder wie was geht, dann braucht man für alles länger. aber das ist überall so, in jedem bereich des lebens, und nicht nur beim programmieren!

    ich bin kein fan von vb, deshalb möchte ich nicht weite speziell auf vb eingehen. ich wollte nur sagen, das c++ nicht so gut ist, wie viele denken und das man den komfort, den man z.b. in vb hat, durchaus auch in c++ haben könnte, wenn man nur wollte, und das ohne programmausführungsgeschwindigkeitsverlust.

    ich bin bei der planung einer solchen programmiersprache, wie ich sie oben beschrieben habe (-> verbesserte version von c++). allerdings wird es noch ewig dauern, bis ich mal erste ansätze vorzeigen kann. momentan habe ich zuviel mit anderen dingen zu tun.



  • @KXII
    mhh, wundert mich jetzt echt, dass du das problem nicht kennst 🙄
    vielleicht liegts an der version? wir verwenden 5.0, also leicht angestaubt.

    die 28 dlls kommen daher, dass unsere klasse 28 leute umfasst, und dass jeder, (fast) unabhängig von den anderen, einen teil des programms erstellt, wobei diese teile trotz allem nicht gerade klein sind.
    (wir erstellen ein programm zur verwaltung eines krankenhauses)

    aber noch ne frage:
    was ist bei der programmierung mit visual c++ und der mfc so viel unkomfortabler als mit vb?
    sofern man weiss was man macht und nicht jede kleinigkeit nachlsesn muss, sehe ich da nicht sooo nen großen unterschied.



  • Original erstellt von KXII:
    **@!

    wer das nicht erkennt hat sich wohl nie darüber gedanken gemacht, was er beim programmieren eigentlich macht, und vorallem keine gedanken darüber, wie er das, was er beim programmieren erreichen möchte am einfachsten erreichen kann. ich sage nur: man kann sich die hose auch mit der beißzange anziegen :)**

    du willst dich doch nur darum drücken, deine Kritikpunkte zu nennen. hast wohl Angst, dass wir einen Fehler darin finden.



  • ... aber sicher doch 🕶

    ich habe ehrlich gesagt keine lust hier im forum detailliert darüber zu sprechen. es reicht doch wenn ich das hervorhebe, was ein guter c++ programmierer sehen müsste. wer glaubt c/c++ sei das nonplusultra der programmiersprachen, naja, der soll dann halt weiter damit programmieren, vielleicht erkennt er irgendwann, das man sich auch noch bessere sachen vorstellen kann. ausserdem brauche ich niemand der mir irgendetwas beweist oder bestätigt. es gibt dinge, die sind einfach 100%tig klar, und da gibt es kein "wenn und aber". als beispiel bringe ich gerne immer wieder das bedingte includieren der headerdateien. das kann absolut ohne performanceverlust vom compiler übernommen werden. die bezieheungen unter klassen sind alle eindeutig und berechenbar, man muss nur in den klassen angeben, wie die beziehungen sind das richtige einbinden kann der compiler übernehmen. ich weiss, das ist noch nicht genug um eine neue sprache zu rechtfertigen, aber es gibt noch mehrere solcher 100%iger dinge. kannst dich ja mal selbst auf die suche machen.



  • du wirst dir durch das explizite Aufführen von #includes doch keinen Zacken aus der Krone brechen! Und bei einer großen Anzahl von Klassen _gibt_ es da einen Performanceunterschied! Was willst du außerdem machen, wenn es 2 Klassen mit gleichem Namen, aber in 2 verschiedenen Namespaces gibt? Oder bei Templates?

    Führe ruhig noch mehr Punkte an!


Anmelden zum Antworten