Flackerndes Bild



  • Hallo Forum, ich habe un ein kleines, aber vieleicht auch ein großes problehm, und zwar habe ich mir einen snake clone gebastellt (meine ersten anfänge), aber leider flackert das bild übelst extreme.

    Ich habe einfach für die einzelnen teile der schlangte vierecke gezeichnet, nunja, wenn aber nun neu gezeichnet wird, dann flackert der ziehmlich stark, und wenn ich später erstmal bilder einbinde, warscheinlich noch mehr.

    Meine frage ist nun, wie mache ich das das das nicht mer flackert.

    Ich habe mir das so gedacht:

    Im rammspeicher definiere ich zwei bereiche, einmal für das moentanige bild und das neue bild, das alte bild wird angezeigt, wenn ein neues kommt, wird es in den speicher auf dem zweitren bereich geladen, und erst wenn es drauf ist wird der erste speicher mit dem neuen bild überspeichert.

    ich glaube das würde so gehen, nur leider weiß ich nicht wie ich das machen soll 😞

    Weiß einer vieleicht wie man das amcht? oder giebt es da vieleicht noch ne bessere möglichkeit?

    Tut mir leid wenn ich so warscheinlich dumme fragen stelle, ich befasse mich erst seit gestern mit der WinAPI, bin schon froh das ich es aleine hinbekommen habe nen snake clone zu machen^^

    MfG
    Showball!





  • Tausenden dank, giebt es dazu auch eine anleitung bei bildern?



  • Hab da mal was gelesen das wenn man das hier in seine Nachrichtenschleife einbaut, das es dann aufhört zu flackern:

    switch (message)
       {
       .
       .
       .
       case WM_ERASEBKGND:
          return (1); // Rückgabe muss ungleich "0" sein!
       .
       .
       .
       }
    

    hier die Quelle: http://www.winapi.net/index.php?inhalt=tipp4

    mfg Nanobot



  • Ehmja^^ aber bei meinem spiel, also meinem snake spiel ist das sehr ungünstig^^

    Aber tausenden dank, da verschwindet ja wirklich alles, was nicht gezeichnet wird, aber was einmal gezeichnet wurde das bleibt ja uch gezeichnet ^^

    Meine schlange wird ja unendlich lang, wie kann ich dann machen das die schlange da wieder die teile die verschwinden, wier aus dem speicher rausgenommenw erden, und dann au8ch nicht mehr angezeigt werden ?

    Und das der hintergrund verscheindet finde icha uch einw eng blöd^^



  • Showball schrieb:

    Tut mir leid wenn ich so warscheinlich dumme fragen stelle, ich befasse mich erst seit gestern mit der WinAPI, bin schon froh das ich es aleine hinbekommen habe nen snake clone zu machen^^

    Du beschäftigst dich seit gestern mit der WinAPI? Dann guck doch mal hier:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-187619-and-highlight-is-.html

    Der Thread ist komischerweise vom 22.07.2007. Wieso sagst du allen, dass du damit erst gestern angefangen hast? Willst du etwa den anderen damit zeigen wie toll du bist, was du in Wirklichkeit gar nicht bist?

    P.S.: Für deine Fragen brauchst du dich nicht zu entschuldigen. Keine Frage ist dumm!

    Willi



  • LOL??? wie oft willst du das eigentlich noch schreiben???

    hast du irgentwelche problehme? Zu wenig liebe von deiner mutter bekoomen und suchst hier jetzt auzfmerksamkeit?



  • So hab mir das mal angeguckt... du könntest es auch so lösen:

    Du hast sicherlich irgendwo diesen Befehl fürs neuzeichnen

    InvalidateRect(hWnd, &Rectangle, FALSE);
    

    &Rectangle, hier den Bereiche angeben der Neu gezeichnet werden soll.

    Zum schluss auf FALSE damit es nicht flackert.

    Und dann im WM_PAINT das Reststück der Schlange übermalen, indem du ein weißes Recheck über das Schlangenende malst.

    Ist zwar ein bisschen umständlich aber müsste eigentlich funktionieren^^

    mfg Nanobot



  • Jo, funktioniert einwandfrei, aber wird da denn auch der speicher im ramspeicher wieder freigegeben?



  • Showball schrieb:

    LOL??? wie oft willst du das eigentlich noch schreiben???
    hast du irgentwelche problehme? Zu wenig liebe von deiner mutter bekoomen und suchst hier jetzt auzfmerksamkeit?

    Jetzt wirst du ausfallend! Siehe meine Antwort bei dem anderen Thread.



  • Man braucht sowas nicht in jemden tread von jemanden schreiben, es reicht glaube ich wenn man sowas einmal schrreibt ...

    Es ist zwar nur eine kleine aber trotzdem eine vorm von verleumnung ^^

    Und sowas kann ich übelst nicht ab haben. hättest du dir den thread den ich da damals geschrieben zabe durcgelesn, wüsstest dudas ich mich erst seit gestern damit richtig beschäftige.



  • Ich habe mir nur den Eröffnungstext durchgelesen. Wie ich schon in dem anderen Thread schrieb, war das auch schon einen Form der Beschäftigung. Du hast dich damit beschäftigt, aber es vielleicht nicht verstanden. Jetzt beschäftigst du dich damit und verstehst es denke ich auch. Stimmt Verleumdung ist nicht gut, aber Arroganz auch nicht. 😉

    MfG WilMen :xmas1:



  • Jo, funktioniert einwandfrei, aber wird da denn auch der speicher im ramspeicher wieder freigegeben?

    Das siehst du dann eh, wenn der PC nach 3h Snake zocken abkackt xD



  • ^^ hab's jetzt die Nacht laufen lassen, PC leuft immernoch 🙂



  • Also wenn der PC immer noch "leuft", würde ich mir Gedanken machen, hauptsache er läuft noch 😃 ..., ne Spaß bei Seite: Ob der PC noch läuft oder nicht heißt nit viel. Es gibt eine Funktion, die Dir sagt, ob Du Dich auch korrekt um die Aufräumarbeiten kümmerst: GetGuiResources. Einfach 'vorher' und 'nachher' aufrufen - ist die Differenz des zurückgegebenen Wertes 0, ist alles okli-dokli 😉 .
    Hier ist das auch nochmal schön in einer Klasse gekapselt (und erklärt): http://www.relisoft.com/win32/gdileaks.html

    Falls Du mal eben auf die Schnelle prüfen willst, wieviel GDI-Objekte Dein Programm verwendet, geht das auch recht einfach mit dem TaskManager: Ansicht -> Spalten auswählen -> Haken bei "GDI-Objekte" setzen. Des weiteren ist der Verlauf der (steigenden) Speicherauslastung Deines Programms auch ein Zeichen für ein Memory-Leak, also einfach mal die Spalte "Speicherauslastung" (ebenfalls im TaskManager) beobachten 😉 .

    Detailierte Informationen zu dem Thememkomplex, siehe hier: http://msdn.microsoft.com/msdnmag/issues/01/03/leaks/

    Happy X-Mas! :xmas1:


Anmelden zum Antworten