AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Transparenten Kreis zum übermalen der Bewegung zeichnen !?
Thema durchsuchen
Ansicht
Themen-Optionen

Transparenten Kreis zum übermalen der Bewegung zeichnen !?

Ein Thema von Semih · begonnen am 28. Nov 2012 · letzter Beitrag vom 29. Nov 2012
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 28. Nov 2012, 13:13
@Semih

Gehe ich richtig in der Annahme, dass du auf einer TImage zeichnest? Wenn ja, dann ist der erste Schritt einfach eine Bitmap von der Größe der zu erstellen, wie auch die der von TImage. Dann zeichnest du zuerst den Hintergrund auf der Bitmap, dann deinen Kreis und zuletzt einfach alles auf die Bitmap der TImage.

Die temporäre Bitmap ist nur dazu da um auf ihr alles immer und immer wieder neu zu zeichnen. Erst das komplette Ergebnis landet auf der TImage.
  Mit Zitat antworten Zitat
Semih

Registriert seit: 28. Nov 2012
6 Beiträge
 
#2

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 28. Nov 2012, 13:17
Ehm nicht direkt ich zeichne das auf dem Canvas also TCanvas ! Vielleicht hab ich das auch nur falsch verstanden !

Ich link einfach mal mein Quelltext

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls, mmsystem;

type
  TForm1 = class(TForm)
    Ibackground: TImage;
    Lheader: TLabel;
    Lneu: TLabel;
    Lhigh: TLabel;
    Lquit: TLabel;
    Ipfeil: TImage;
    Timer1: TTimer;
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(sender:Tobject);
    end;
    Tkreis= class
      x:integer;
      y:integer;
      radius:integer;
      farbe:longint;
      dx:integer;
      dy:integer;
      constructor erzeugen(xpos, ypos ,r : integer; colr:longint; dvx, dvy:integer);
    procedure zeichnen(Canv:Tcanvas; colr: longint);




  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Vmenue:integer; // 0 = Menü 1 , 1 = Menü 2
  Vgame:integer; // 0 = nicht im Spiel , 1 = Im Spiel
  Kreis1:Tkreis;

implementation
constructor Tkreis.erzeugen (xpos, ypos ,r : integer; colr:longint; dvx, dvy:integer);
begin
x := xpos;
y := ypos;
radius := r;
farbe := colr;
dx:= dvx;
dy:=dvy;
end;

{$R *.dfm}
procedure tkreis.zeichnen(Canv:Tcanvas;colr:longint);
begin
  with canv do
  begin
    brush.color:=colr;
    pen.Color:=Form1.color;
    ellipse(x-radius,y-radius,x+radius,y+radius);
  end;
end;
///////////////////////////// KEYS /////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//////////////////////////// DOWN KEY //////////////////////////////////////////
  if Vgame = 0 then
  If Key = VK_Down then
    begin
    sndPlaySound('Click01.wav',SND_SYNC);
    if IPfeil.top = 216 then
    Ipfeil.top:= Ipfeil.top + 80
    else
    if Ipfeil.top= 296 then
    Ipfeil.top:= Ipfeil.top + 80
    else Ipfeil.top:= 216;
    end;

//////////////////////////// UP KEY ////////////////////////////////////////////
  if Vgame = 0 then
  if Key = VK_Up then
    begin
    sndPlaySound('Click01.wav',SND_SYNC);
    if IPfeil.top = 216 then
    Ipfeil.top:= 376
    else
    if Ipfeil.top= 296 then
    Ipfeil.top:= 216
    else Ipfeil.top:= 296;
    end;

//////////////////////////// EINGABETASTE //////////////////////////////////////
  if Vgame=0 then
  if Key = VK_RETURN then
begin
  sndPlaySound('Click01.wav',SND_SYNC);
//////////////////////////// MENÜ 0
  if Vmenue=0 then
  if Ipfeil.top = 216 then
  begin
  Lneu.caption:='Einzelspieler';
  Lhigh.caption:='Mehrspieler';
  Lquit.caption:='zurück';
  Vmenue:=1;
  end
      else
      if Ipfeil.top = 296 then Showmessage('Tut mir leid es gibt noch keine Highscores!')
        else close
//////////////////////////// MENÜ 1
  else
  if Vmenue=1 then
  if Ipfeil.top = 216 then
  begin
  Lneu.Visible:=false;
  Lhigh.visible:=false;
  Lquit.Visible:=false;
  Ipfeil.visible:=false;
  Lheader.Visible:=false;
  Vgame:=1;
  Kreis1:=Tkreis.erzeugen(Form1.ClientWidth div 2, Form1.ClientHeight div 2,15,$000000,2,2);
  Kreis1.zeichnen(form1.canvas,kreis1.farbe);
  Timer1.Enabled:=true;
  end
    else
    if Ipfeil.top = 296 then Showmessage ('Tut mir leid es gibt noch keinen Mehrspieler Modus!')
      else
      begin
      Lneu.caption:='Neues Spiel';
      Lhigh.caption:='Highscore';
      Lquit.caption:='Beenden';
      Vmenue:=0;
      end;
   end;
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure anzeigen (kreis:Tkreis);
begin

Kreis.zeichnen(form1.canvas,form1.color);

  if kreis.x>=Form1.clientWidth-kreis.radius then Kreis.dx:=Kreis.dx*(-1);
  if Kreis.x<=0+kreis.radius then Kreis.dx:=kreis.dx*(-1);
  if kreis.y>=Form1.clientheight-kreis.radius then Kreis.dy:=Kreis.dy*(-1);
  if Kreis.y<=0+kreis.radius then Kreis.dy:=kreis.dy*(-1);

  kreis.x:=kreis.x+kreis.dx;
  kreis.y:=kreis.y+kreis.dy;
  Kreis.zeichnen(form1.canvas,kreis.farbe);
end;

Procedure tform1.timer1timer(sender:tobject);
begin
anzeigen(kreis1);
end;



end.
Andere Frage kann man nicht irgendwie die Color Informationen des Timage abfragen und sagen Tkreis soll sie übernehmen ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 28. Nov 2012, 13:21
Erstens heißt der Konstruktor jeder Klasse Create und zweitens baust Du Dir da ein schönes Speicherleck, indem Du immer wieder neue Kreise erzeugst, sie aber nirgends freigibst (oder ich habe es übersehen). Was spricht denn gegen die simple Shape-Lösung? Zumindest wären die Speicherprobleme damit vom Tisch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Semih

Registriert seit: 28. Nov 2012
6 Beiträge
 
#4

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 28. Nov 2012, 13:29
Ich denke da spricht nichts gegen ... wiegesagt bin ich jedoch nicht wirklich geläufig damit und bräuchte eine art hilfe anleitung, whatever :/

Wie meinst du das.. jeder Konstruktor einer Klasse heißt create ? Weil ich den Konstruktor oben erzeugen gennant habe ?( Das sollte nur vorrübergehen sein, wollte schauen ob alles klappt )
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 28. Nov 2012, 13:32
Eben deswegen, ja. Jede Klasse erbt von der "Mutter aller Klassen" TObject, welche bereits einen Konstruktor namens Create und einen Destruktor namens Destroy mitbringt. Aus diesem Grund sollte man sich an diese Namensgebung auch halten, spätestens dann, wenn man sie überschreiben möchte.

[edit] Falls Dich das Thema mit der Speicherbitmap eher interessieren sollte, habe ich eine recht gute Erklärung auf Englisch gefunden (Punkt 4). [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (28. Nov 2012 um 13:35 Uhr)
  Mit Zitat antworten Zitat
Semih

Registriert seit: 28. Nov 2012
6 Beiträge
 
#6

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 29. Nov 2012, 12:28
Okay nochmal danke .. hatte deine Erklärung für Tshape bis jetzt gerade übersehen !
Werde es mal versuchen schaut ja ganz einfach aus !
  Mit Zitat antworten Zitat
Semih

Registriert seit: 28. Nov 2012
6 Beiträge
 
#7

AW: Transparenten Kreis zum übermalen der Bewegung zeichnen !?

  Alt 29. Nov 2012, 12:59
Hab es hinbekommen !
Danke nochmal für die Hilfe
  Mit Zitat antworten Zitat
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 19:40 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