AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein RPG Spiel - Flackern bei mehreren Grafiken
Thema durchsuchen
Ansicht
Themen-Optionen

RPG Spiel - Flackern bei mehreren Grafiken

Ein Thema von Pryoxer · begonnen am 8. Mai 2013 · letzter Beitrag vom 11. Mai 2013
Antwort Antwort
Benutzerbild von Pryoxer
Pryoxer

Registriert seit: 8. Feb 2013
21 Beiträge
 
Delphi XE4 Starter
 
#1

RPG Spiel - Flackern bei mehreren Grafiken

  Alt 8. Mai 2013, 19:04
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

Gruß
Lukas
Angehängte Dateien
Dateityp: rar Desktop.rar (28,0 KB, 3x aufgerufen)
Lukas
... if (Image1.left<image1.left) ... = Fehlermeldung

Geändert von TBx (11. Mai 2013 um 19:34 Uhr) Grund: verlinkte Datei angehängt, ist ziemlich witzlos, wenn die irgendwann nicht mehr existiert
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: RPG Spiel - Flackern bei mehreren Grafiken

  Alt 8. Mai 2013, 19:55
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) Width auf 32 und 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.
fork me on Github

Geändert von sx2008 ( 8. Mai 2013 um 20:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Pryoxer
Pryoxer

Registriert seit: 8. Feb 2013
21 Beiträge
 
Delphi XE4 Starter
 
#3

AW: RPG Spiel - Flackern bei mehreren Grafiken

  Alt 8. Mai 2013, 20:04
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 )

Zu den anderen fehler wenn ich das mal erfolgreich integriert habe

Gruß
Lukas
Lukas
... if (Image1.left<image1.left) ... = Fehlermeldung
  Mit Zitat antworten Zitat
Benutzerbild von Pryoxer
Pryoxer

Registriert seit: 8. Feb 2013
21 Beiträge
 
Delphi XE4 Starter
 
#4

AW: RPG Spiel - Flackern bei mehreren Grafiken

  Alt 8. Mai 2013, 20:26
So ok ich hab das ganze jetzt mit der Imagelist gemacht wie du es gesagt hast (jetzt flackert es auch nicht mehr , danke )

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

Danke im Voraus

Mfg
Lukas
Lukas
... if (Image1.left<image1.left) ... = Fehlermeldung
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: RPG Spiel - Flackern bei mehreren Grafiken

  Alt 8. Mai 2013, 21:11
Du bist ja ganz schön fix.

Also das Problem ist die procedure pause .
Innerhalb dieser Procedure wird Application.ProcessMessages aufgerufen.

Wenn der Spieler Pfeil-nach-oben drückt, wird 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 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 procedure pause auch einen Timer verwenden.
Im Timer-Event 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 private verschieben. Schlüsselwort var entfällt dann.
fork me on Github

Geändert von sx2008 ( 8. Mai 2013 um 21:20 Uhr)
  Mit Zitat antworten Zitat
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.
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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