Bild flimmert bei Bewegung, Probleme beim Löschen von Elementen



  • Powerpaule schrieb:

    Na ja ich hatte ebenfalls mal ein Partikelsystem mit einer std:list geschrieben, und das hat jedenfalls zu erheblichen Performance-Einbußen geführt, pro Sekunde wurden im Schnitt einige Hundert Objekte erzeugt/entfernt, dann hab ich's mit der oben beschrieben Methode gemacht, und es war um Welten besser... deswegen meinte ich das. Hatte mich ehrlich gesagt auch etwas gewundert, aber vielleicht war auch noch irgendwas anderes Hemmendes dabei..

    Kann ich mir nicht vorstellen. Du hast aber schon im Release Modus getestet, oder? Ansonsten ist es schon kein Wunder..

    btw. war es eigentlich eine gute idee mit c++ ein SPiel zu programmieren oder eher eine schlechte? Gibt es eventuell Programmierprachen womit man leichter Spiele programmieren kann?

    Auf jeden Fall gibt es einfachere Sprachen. Die Frage ist aber eher wo du die Grenzen ziehen willst zwischen selber machen und schon fertiges benutzen. Z.b kannst du ja auch einen Game Builder nehmen. Kommen auch gute Sachen bei raus. Afaik bietet Blitzbasic einen recht einfachen (aber halt auch limitierten) Einstieg in Spieleprogrammierung.

    Das schöne an C++ ist halt, dass du an keine Grenzen stossen wirst, an welche du mit anderen Sprachen nicht schon früher gestossen wärst.



  • Ich denk mal ich bleibe mal bei c++, weil dies zudem die einzige Programiersprache ist, die ich kenne. Dennoch sind mir gewisse Sachen unbekannt.
    Das ist zwar ein Schulprojekt, dennoch ,öchte ich gerne alles ausreizen Zum Beispiel wollte ich das mit dem canvas machen, aber ich weiß absolut nicht, was das jetzt genau ist und was man damit machen kann. Ich weiß zwar das ein canvas eine Leinwand ist, aber ich weiß absolut keine Befehle, wie man das ausführt. Kann man an bestimmten Stellen im Kanvas ein Bild einfügen? Wenn ja, dann müsste ich erstmal herausfinden, wie die Befehle sind.



  • Gib mal im C++Builder-Editor irgendwo TCanvas ein und drücke F1. Damit hast du alle Informationen auf einen Schlag.
    TForm, TImage und so weiter haben alle ein Canvas-Objekt, auf dem du nach Belieben herumzeichnen kannst.



  • Ich habe ein paar von meinen Schulfreunden gefragt und die meinten, dass C++ zu langsam ist, um Spiele gut zu programmieren. Ein anderer meint, dass C++ keine richtige reale Zeit bestimmten kann, da die Zeit nur real ist, solange das Programm keine Engpässe enthält.



  • Ich glaube deine Schulkameraden sollten lieber ihre Mäuler halten :xmas1:



  • Deine Schulkameraden ver*****en dich. Sollte dir aber spätestens beim zweiten Punkt aufgefallen sein. Klingt mehr nach Philosophie als sonst irgendwas 🙂



  • es war mir schon klar, dass sie mich für dumm verkaufen wollen. Ich hab mir aber eher gedacht, dass sie sich mit C++ weniger auskennen.

    PS. Ein anderer hat gemeint, dass beim Spiel die Hardware mitspielen soll und nicht nur die Software. Also ich finde das ist schon eher ein Tipp, jedoch habe ich spätestens dann keine Ahnung, wie man das schreiben soll. Ich probier das Programm erstmal mit der SFML zu schreiben, da es mir so scheint, dass eigentlich alles da ist, was ich für die Spieleprogrammierung brauche. (und laut Features hat es sogar Hardwarebeschleunigung^^). Es muss ja kein Spiel sein, was für heutige Verhältnisse gut verkaufbar ist^^.



  • Ja, klar spielt die Hardware eine wichtige Rolle. Aber wenn du jetzt nicht gerade hochperformanten und speziell für eine Hardware angepasste Code schreibebn willst, dann spielt das mal keine Rolle. Und es gilt: Je teurer und neuere Teile verbaut sind, desto besser läufts. (natürlich nur Grundsätzlich und bei einem Vertraunswürdigen Verkäufter)

    Aber im Hobbybereich spielt das so gut, wie keine Rolle in heutigen Zeiten. 😉



  • Leider besitze ich einen Rechner der vor etwas mehr als 5 Jahren aktuell war. Ich hab schon gemerkt, dass das Programm auf schnelleren PCs besser läuft. Leider ist mein PC schon sehr veraltet und ich hab auch kein Geld mir einen neuen zu kaufen.



  • xbruceleex schrieb:

    Leider besitze ich einen Rechner der vor etwas mehr als 5 Jahren aktuell war. Ich hab schon gemerkt, dass das Programm auf schnelleren PCs besser läuft. Leider ist mein PC schon sehr veraltet und ich hab auch kein Geld mir einen neuen zu kaufen.

    Das würd ich jetzt nicht unbedingt als alt einstufen.
    Höchstwahrscheinlich wird der Takt deines Prozessors schon in GHz angegeben. Das reicht locker wenn du es "ordentlich" machst, d.h. für jedes Frame alles immer wieder neu mit Draw/CopyRect alles auf eine Zeichenfläche schiebst oder wenn du es mit SFML machst - selbst ohne Hardwarebeschleunigung.
    So ähnliche Spiele wie du gerade eins bastelst liefen auch schon auf nem 486er mit <50 MHz (da aber wohl nur mit Hardwarebeschleunigung).



  • Also ich kann mit SFML nicht arbeiten, da es immerwieder Linker Probleme gibt bzw. irgendwie die Library nicht erkennt. jedenfalls kompiliert der VC++ nicht.

    Einich komme mit Draw/CopyRect nicht klar. Kann mir jemand ein Beispiel geben, womit es funktioniert? Google hat mir da nicht wirklich weitergeholfen.



  • Du musst die Library auch dem Projekt hinzufügen etc.

    Na ja also auf meinem Rechner mit 2,1 Ghz (Athlon XP) geht das mit dem Canvas auf jeden Fall ausreichend für ganz simple Spiele, selbst in hohen Auflösungen (quasi Fullscreen).

    Ein ganz simples Beispiel:

    // Den Hintergrund weiß malen
    Form1->Canvas->Brush->Color = clWhite;
    Form1->Canvas->Brush->Style = bsSolid;
    Form1->Canvas->Pen->Color = clWhite;
    Form1->Canvas->Rectangle(0, 0, Form1->Width, Form1->Height);
    
    // Bild laden
    Graphics::TBitmap* bitmap = new Graphics::TBitmap;
    bitmap->LoadFromFile("bild.bmp");
    
    // Auf Form zeichnen an Position 10|10
    Form1->Canvas->Draw(10, 10, bitmap);
    
    [..]
    
    delete bitmap;
    

    Das ist natürlich sehr simpel, du musst das dann schon noch ausbauen, dass Bilder zum Beispiel natürlich nur einmal zu Beginn geladen werden und das Ganze alles in einer Schleife läuft (notfalls geht auch TTimer..) und immer wieder neu gezeichnet wird und die Bewegungen der Objekte etc.
    Kannst natürlich auch alles (erstmal) nur durch einfache Kreise zeichnen, die Funktionen dafür findest du in BCB-Hilfe.



  • Wieso denn auf einmal VC++, ich dachte, du benutzt C++Builder? 😕
    Du musst einfach nur die Include-Files in (d)einen Include-Ordner schieben und die SFML-Libs dazulinken.



  • also ganz einfach mit #include <SFML\Audio.hpp> oder was man da hinschreiben kann funktioniert so nicht. Ich muss irgendwie Dem Programm beibringen, dass er noch eine datei aus dem ordner lib auslesen soll, denn bisher hab ich keine Ahnung wie man das macht



  • Beim C++Builder geht das unter Projekt/Dateien zum Projekt hinzufügen, iirc.
    Beim VC++ hab ich keine Ahnung, müsste aber nicht so schwer zu finden sein. Such mal nach Linkereinstellungen oder sowas.



  • ich hab die datei jetzt eingefügt, aber jetzt kommt:

    [Linker Error] 'D:\VC2005\SFML-GRAPHICS.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

    ich hab keine Ahnung was der C++ Builder von mir will.



  • Die Lib ist nicht ganz korrekt, du brauchst eine für den Borland C++ Builder.



  • hmmm, dann habe ich ein problem. Denn ich habe auf der Seite kein Packet für Borland Builder gesehen und in Google habe ich bisher auch nichts gefunden. Kann man die eventuell selbst erstellen?



  • Schau dir das mal an: http://www.richelbilderbeek.nl/CppLinkErrorLibContainsInvalidOmfRecord.htm

    hatte das Problem vor Ewigkeiten auch mal, und irgendwie ging's einfach zu lösen, weiß nicht mehr ob's das war, probier's einfach mal.^^



  • hmm, also es kommt immernoch ein Problem. Ich habe jetzt die .lib Dateien jetzt alle convertiert und jetzt wenn ich die neue .lib in mein projekt einfüge kommt folgendes als Fehlermeldung:

    [Linker Error] Unresolved external 'sf::Image::Image()' referenced from D:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\DESKTOP\PROJECT\UNIT1.OBJ
    ...
    //Es sind eigentlich mehr Fehler aber der erste Teil des Satzes ist bei allen Fehler derselbe.

    Dasselbe kommt auch, wenn ich die .lib Dateien nicht in das Projekt dazunehme


Anmelden zum Antworten