Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RPG Spiel - Flackern bei mehreren Grafiken (https://www.delphipraxis.net/174765-rpg-spiel-flackern-bei-mehreren-grafiken.html)

Pryoxer 8. Mai 2013 19:04


RPG Spiel - Flackern bei mehreren Grafiken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
ich muss/will ein kleines Projekt für die Schule programmieren.
Ich hab auch schon eine Idee und zwar ein kleiner RPG Spiel.

Allerdings hab ich jetzt das Problem das wenn sich mein Character bewegt und ein Hintergrund (mehrer Bilder zb Wiese/Bäume/Blumen/etc) dass das ganze ziemlich anfägt zu flackern (lässt sich auch durch DubbleBuffered nicht beheben)

Ich hab jetzt erst seit einem 3/4 Jahr Informatik und ich persönlich weiß leider nicht wie ich das ändern könnte, weshalb ich jetzt hier in der DP einen neuen Thread aufgemacht habe.

Das Programm wie weit ich bis jetzt bin hab ich unten verlinkt
(Nur die Gehbewegung und so keine Hintergründe wie Wiese etc)

https://www.dropbox.com/s/ph8ob9hkrkrwtzx/Desktop.rar

Ichg hoffe das ihr mir vielleicht helfen könnt :D

Gruß
Lukas

sx2008 8. Mai 2013 19:55

AW: RPG Spiel - Flackern bei mehreren Grafiken
 
Wenn du jedesmal ein Bild neu von der Festplatte lädst, dann braucht das eben Zeit.
Speichere deine 16 Bitmaps doch in einer Imagelist.
Achte aber darauf, dass du alle Bildchen gleich gross machst (32 * 48 Pixel).
Zur Zeit sind manche aber 31 * 48 oder 33 * 48.
Vor dem Füllen der Imagelist (per Doppelklick)
Delphi-Quellcode:
Width
auf 32 und
Delphi-Quellcode:
Height
auf 48 einstellen.

Später kannst du so ein Bild aus der Imageliste zeichnen:
Delphi-Quellcode:
procedure TForm1.ZeichneSpieler(index:Integer { 0..15});
var
  bmp : TBitmap;
begin
  // Bild (Zählung beginnt mit 0) aus Imageliste holen
  // und auf Image kopieren
  if ImageList1.GetBitmap(index, bmp) then
    Image1.Picture := bmp;
  end;
end;
Du hast noch weitere Fehler in deinem Code, aber man kann nicht alles auf einmal ändern.

Pryoxer 8. Mai 2013 20:04

AW: RPG Spiel - Flackern bei mehreren Grafiken
 
ok danke schon mal für den Tipp mit der Image list (wusste zwar das es so was gibt aber net das man sie so verwendet :D )

Zu den anderen fehler wenn ich das mal erfolgreich integriert habe

Gruß
Lukas

Pryoxer 8. Mai 2013 20:26

AW: RPG Spiel - Flackern bei mehreren Grafiken
 
So ok ich hab das ganze jetzt mit der Imagelist gemacht wie du es gesagt hast (jetzt flackert es auch nicht mehr , danke :D )

Du hast aber auch gesagt im meinem Code seien noch ein paar Fehler. Könntest du mir sagen was?

Danke im Voraus

Mfg
Lukas

sx2008 8. Mai 2013 21:11

AW: RPG Spiel - Flackern bei mehreren Grafiken
 
Du bist ja ganz schön fix.

Also das Problem ist die
Delphi-Quellcode:
procedure pause
.
Innerhalb dieser Procedure wird
Delphi-Quellcode:
Application.ProcessMessages
aufgerufen.

Wenn der Spieler Pfeil-nach-oben drückt, wird
Delphi-Quellcode:
PlayerMoveUp
aufgerufen.
Dann wird eine Animation mit 5 Zuständen gestartet mit dazwischen 4 * pause.
Während dieser Zeit könnte der Spieler wieder eine andere Taste drücken.

Wie ich jetzt gesehen habe, verriegelst du weitere Richtungs-Tasten mit dem Boolean-Flag
Delphi-Quellcode:
Move
.
So wie's jetzt ist, ist es etwas unschön aber ich würd's jetzt nicht mehr als Fehler betrachten.
Damit kann der Spieler aber nicht auf halben Wege umdrehen.
Es kommt natürlich auf das Spiel an, ob man das überhaupt zulassen möchte.

Würdest du dir die Richtung und die Nummer der Animationssequenz merken, dann könntest du statt der
Delphi-Quellcode:
procedure pause
auch einen Timer verwenden.
Im Timer-Event
Delphi-Quellcode:
OnTimer
könnest du die Animationssequenznr hochzählen und jeweils das Spielerbild anpassen.
Würde der Spieler zurück wollen, könntest du die Animation umkehren.
Das ist natürlich etwas schwieriger als die Lösung, die du z.Zt. hast.


Ansonsten solltest du den Block mit Variablen:
Delphi-Quellcode:
var RunUp,RunLeft,RunRight,RunDown:boolean;
    Move:boolean;
    Speed:integer;
in die Klasse TForm1 unter
Delphi-Quellcode:
private
verschieben. Schlüsselwort
Delphi-Quellcode:
var
entfällt dann.

DP-Maintenance 11. Mai 2013 19:32

Dieses Thema wurde am "11. May 2013, 20:32 Uhr" von "TBx" aus dem Forum "Software-Projekte der Mitglieder" in das Forum "Programmieren allgemein" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz