Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi schiff(canvas) (https://www.delphipraxis.net/62206-schiff-canvas.html)

Informatik_Doppelstundler 1. Feb 2006 12:01


schiff(canvas)
 
Hi. Ich habe ein Problem: Ich möchte in einem image ein simpel gezeichnetes schiff nach rechts unten bewegen. dazu benutz ich nen timer...irgendwie klappt das aber alles nicht und er zeichnet nur unten nen komischen kreis, der eigentlich nicht der figur des schiffes entspricht :? .
Hier der Code:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   while (b<300) do
   begin

   a:=a+1;
   b:=b+1;
   c:=b+1;
   d:=d+1;
   e:=e+1;
   f:=f+1;
   g:=g+1;
   h:=h+1;
   Mitte1:=(a+g) div 2;
   Mitte2:=(d+h) div 2;
   x:=strtoint(edit2.text);
   y:=x*((c-g)div(d-h));
           with paintbox1.canvas do
                  begin
                  rectangle (-1,-1,1000,1000);
                  arc (a,a,b,b,c,d,e,f);
                  MoveTo (c,d);
                  lineto (g,h);
                  MoveTo (Mitte1,Mitte2);
                  lineto (Mitte1+x, Mitte2-y);
                  end;
   end;
end;

Die Anfangsvariabeln des (funktionierenden) einmasters sind folgende:
Delphi-Quellcode:
a:=10; //Anfangswerte des Rechtecks
b:=80; //Endpunkte des Rechtecks
c:=10; //Ellipsenbegrenzungslinie nach links
d:=40; //          -"-
e:=80; //Ellipsenbegrenzungslinie nach rechts
f:=60; //          -"-
g:=75; //Endpunkt 1 der Ellipsenrandlinie (Linie des Decks)
h:=59; //Endpunkt 2 der Ellipsenrandlinie (Linie des Decks)

:coder2:

Ferber 1. Feb 2006 13:31

Re: schiff(canvas)
 
Denk es wäre sinnvoll das Schiff als Objekt zu definieren, dass du dann mit dem Timer bewegst.
Das Schiff müsste die Methoden 'Zeichnen' und 'Löschen' implementieren, sonst kriegst du nur ein Linienmuster von links oben nach rechts unten heraus. :)

Ist das klassische Einsteigerbeispiel für OOP.

Delphi-Quellcode:
type
  TSchiff = class(TObject)
  private
    hier die Variablen definieren
  public
    constructor Create(aCanvas:TCanvas);
    procedure Draw(x,y:Integer);
    procedure Hide(x,y:Integer);
    procedure Move(FromPoint, ToPoint:TPoint);
  end;
Besser wäre es ein generisches 'TGraphicObject' zu definieren, von dem du dann spezialisierte grafische Objekte ableitest.

Delphi-Quellcode:
type
  TGraphicObject = class(TObject)
  private
    FPosition:TPoint;
  public
    constructor Create(aCanvas:TCanvas); virtual;
    procedure Draw(x,y:Integer); virtual;
    procedure Hide(x,y:Integer); virtual;
    procedure Move(FromPoint, ToPoint:TPoint); virtual;
  end;

  TSchiff=class(TGraphicObject)
    constructor Create(aCanvas:TCanvas); override;
    procedure Draw(x,y:Integer); override;
    procedure Hide(x,y:Integer); override;
    ...
  end;
 
  TKriegsschiff=class(TSchiff)
    ...
  end;

  TPolizeiboot=class(TSchiff)
    ...
  end;
mfg :)

KuH_am_SchuH 1. Feb 2006 13:46

Re: schiff(canvas)
 
warum bewegst du nich einfach ein bitmap :P ?

Ferber 1. Feb 2006 13:56

Re: schiff(canvas)
 
Zitat:

Zitat von KuH_am_SchuH
warum bewegst du nich einfach ein bitmap :P ?

Klar sind Bitmaps und Sprites einfacher, aber IMHO geht's hier um das Lernen der Grundlagen. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

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-2025 by Thomas Breitkreuz