Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kleines Pferdespiel (https://www.delphipraxis.net/145479-kleines-pferdespiel.html)

zapper54 4. Jan 2010 11:40

Re: Kleines Pferdespiel
 
Danke Blup!

Hab mir auch das Programm vor 10 Minuten nochmal durch den Kopf gehen lassen, und bin auf die gleiche Sache, wie du mit dem Gras gekommen. Aber danke für die Idee mit den scrollbars. Das werde ich mal ausprobieren. Trotzdem ist da noch das Problem mit dem Pferd, dass sich nicht mehr weiter bewegt.

Kann mir da noch jemand helfen????

Blup 5. Jan 2010 09:29

Re: Kleines Pferdespiel
 
Wie oft eine Gif-Animation abgespielt wird, steht in der Gif-Datei.
Viele Einstellungen lassen sich aber nachträglich ändern.
Delphi-Quellcode:
uses
// im Abschnitt "uses" hinzufügen
  GIFImg;

// nach dem Laden des Bildes einmal ausführen z.B. im FormCreate
with ImagePferd.Picture do
begin
  if Graphic is TGIFImage then
    TGIFImage(Graphic).AnimateLoop := glContinously;
end;

zapper54 5. Jan 2010 14:44

Re: Kleines Pferdespiel
 
Danke Blup!

Also am Code hat er erstmal nichts zu meckern, aber dann, wenn ich starten will, sagt er: "[Fataler Fehler] Tommy.pas(7): Datei nicht gefunden: 'GIFImg.dcu'" (Das passiert bei der Eingabe im Abschnitt uses. Ich hab aber alles so eingegeben, wie beschrieben.

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GIFImage, ExtCtrls, StdCtrls, jpeg, GIFImg;
Hab ich was falsch gemacht? Ich meine, irgendetwas muss ja falsch sein...

Frankfurtoder 5. Jan 2010 15:51

Re: Kleines Pferdespiel
 
Hast du mal versucht ohne deine GIFImg zu kompilieren, denn immerhin gibt es zumindest die unit GIFImage.

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, [b]GIFImage[/b], ExtCtrls, StdCtrls, jpeg, GIFImg;
Hast du gesucht ob du irgendwo auf der Festplatte eine solche Datei hast?
Hast du die Unit mal bei Google gesucht? Immerhin bekommst du den Fehler, dass Delphi die Datei nicht finden kann. Wie wäre es damit sie sich zu beschaffen? Vielleicht kann man sich diese frei runterladen.

Wenn dir Delphi schon genau sagt was los ist (Datei nicht gefunden), dann wirst du die Datei wohl einfach nicht haben, oder? ;)

Blup 5. Jan 2010 17:19

Re: Kleines Pferdespiel
 
Wahrscheinlich handelt es sich um eine andere Version von TGIFImage die auch einen anderen Dateinamen "GIFImage" hat.
Natürlich muss die tatsächlich verwendete Unit angegeben werden, bzw. stand bei dir schon drin.

Versuchs dann so:
Delphi-Quellcode:
var
  Options: TGIFDrawOptions;

with ImagePferd.Picture do
begin
  if Graphic is TGIFImage then
  begin
    Options := TGIFImage(Graphic).DrawOptions;
    Include(Options, goLoopContinously);
    TGIFImage(Graphic).DrawOptions := Options;
  end;
end;

zapper54 5. Jan 2010 20:55

Re: Kleines Pferdespiel
 
Vielen, vielen Dank Blup (natürlich auch den anderen, die sich die Mühe gemacht haben, mir zu helfen)!

Ich denke, dass ich bald fertig sein werde...

Trotzdem gibt es noch folgende Frage von mir:

Zitat:

Mein Pferdchen ist ein Gif-Image, dass mit einem Timer auf und Abbewegt wird. Das Pferd bleibt dabei aber an der gleichen Stelle, es bewegen sich nur die Sprünge (einfache, rechteckige Images) auf das Pferd zu. Nun soll natürlich auch etwas passieren, wenn das Pferd mal gegen einen dieser Blöcke stößt. Egal ob von oben, von vorne oder von sonstwo. Daher meine Frage:

Gibt es eine Möglichkeit zu sagen, dass immer eine Aktion passiert, wenn das Pferde-Image ein Sprung-Image berührt, oder muss ich einen Haufen Koordinaten aufzählen???
Vielen Dank schon mal für eure Antworten!!!

zapper54 6. Jan 2010 14:12

Re: Kleines Pferdespiel
 
Hat keiner eine Idee?

Geht das nicht anders, als haufenweise Koordinaten aufzuschreiben???

Blup 7. Jan 2010 08:35

Re: Kleines Pferdespiel
 
Wenn eine Liste der Hinderniss vorliegt, brauchst du nur die Rechtecke auf Überschneidung zu prüfen.
z.B. so:
Delphi-Quellcode:
var
  Hindernisse: TObjectList;

{...}
Hindernisse := TObjectList.Create;
Hindernisse.OwnsObjects := False;
Hindernisse.Add(ImageHindernis1);
{...}

function IsKollision(APferdImage: TImage): Boolean;
var
  Hinderniss: TObject;
  Rx, R1: TRect;
begin
  R1 := APferdImage.BoundsRect;
  for i := 0 to Hindernisse.Count - 1 do
  begin
    Hinderniss := Hindernisse[i];
    if Hinderniss is TImage then
    begin
      Result := IntersectRect(Rx, R1, TImage(Hinderniss).BoundsRect);
      if Result then
        Exit;
    end;
  end;
  Result := False;
end;
Eine Kollisionsprüfung auf Pixelebene ist aber wesentlich aufwendiger.
Die VCL ist einfach nicht für Spiele gedacht.
Auf Hier im Forum suchenAndorra hat Matze ja bereits hingewiesen.

mb1996 7. Jan 2010 17:13

Re: Kleines Pferdespiel
 
Hi,
ich denke mal du machst es ganz einfach mit IF.

[code]
...
if Pferd1.left=Block1.left then
begin
if Pferd1.top=Block1.top then
begin
...
{Das Verhalten bei dem aufprall}
end;
end;

implementation 7. Jan 2010 20:04

Re: Kleines Pferdespiel
 
Zitat:

Zitat von mb1996
Delphi-Quellcode:
...
if Pferd1.left=Block1.left then
begin
if Pferd1.top=Block1.top then
begin
...
{Das Verhalten bei dem aufprall}
end;
end;

Wohl eher so:
Delphi-Quellcode:
if (Pferd.Left+Pferd.Width=Block1.Left) or (Pferd.Left=Block1.Left+Block1.Width)
  or (Pferd.Top+Pferd.Height=Block1.Top) then ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Seite 2 von 3     12 3      

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