Einzelnen Beitrag anzeigen

Semih

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

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