Einzelnen Beitrag anzeigen

Halbgard

Registriert seit: 26. Jun 2008
6 Beiträge
 
#1

Problem mit Ballbewegung (Anfänger)

  Alt 6. Sep 2008, 11:10
Morgen

Ich bin gerade dabei, mit nem Freund sowas in der Art wie Brixx zu machen,
er kümmert sich um das mathematische Zeug, und ich versuch das dann irgendwie in den Quelltext zu basteln, also er dann auch mit.
Aber auf jeden Fall, ich bin gerade dabei, erst einmal einen Ball, nachdem man auf einen Button geklickt hat, in dem Fenster hinundher bewegen zu lassen.
Das wollt ich mit nem Timer machen, (hab dazu noch keine Tuts gefunden,) aber der Ball bewegt sich net wirklich

Delphi-Quellcode:
type
  TBall=Class
    x,y,r:Integer;
    BallFarbe:TColor;
    procedure anzeigen;
  End;

{...}

procedure TBall.anzeigen;
begin
  form1.Canvas.Pen.Color:=BallFarbe;
  form1.Canvas.brush.color:=ballfarbe;
  Form1.Canvas.Ellipse(x,y,x+2*r,y+2*r);
end; //nun, der Ball wird dann schonmal angezeigt...^^"

procedure TForm1.Button1Click(Sender: TObject);
var Ball:Tball;
begin
  Timer1.Enabled:=true;
  Ball:=Tball.Create;
  ball.BallFarbe:=clgreen;
  ball.BallFarbe:=clgreen;
  ball.x:=100;
  ball.y:=100;
  ball.r:=10;
  ball.anzeigen;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var ball:TBall;
    BallLeftRight,BallUpDown:Integer;
begin
BallLeftRight:=1; //Jenachdem, wo er "anstößt", ändert sich seine Richtung.
BallUpDown:=2;
Ball:=TBall.create;
if ball.x+2*ball.r=400 then BallLeftRight:=2;
if Ball.x=0 then BallLeftRight:=1;
if Ball.y=0 then BallUpDown:=2;
if Ball.y+2*ball.r=400 then BallUpDown:=1;

Case BallUpDown of
  1:ball.y:=ball.y+1;
  2:ball.y:=ball.y-1;
End;

Case BallLeftRight of
  1:ball.x:=ball.x+1;
  2:ball.x:=ball.x-1;
End;

ball.anzeigen; //glaub, das is eher unnötig??
end; //den Quelltext vom Timer hatte ich erst in ner eigenen Procedure drinne,
     //aber das hatte auch net geklappt, also das er die Procedure immer wieder-
     /holt.
Das war der Erste Teil.

Hier mein zweites Problem.

Okai, des weiteren hab ich schonmal versucht, die Rechtecke hinzumalen.
Die haben jedoch nur nen schwarzen Rand, und keinen roten, und ne Füllfarbe schon garnicht, wenn sie angezeigt werden...^^"

Delphi-Quellcode:
type
  TBlock=class
    {var
      x,y,l,b:Integer;}
  //Werden noch net wirklich gebraucht.
    RandFarbe:TColor;
    FuellFarbe:TColor;
    procedure aufbauen;virtual;
  end;
  
  TPunktBlock=class(TBlock)
    procedure aufbauen;override;
    procedure verschwinden;
  end;

{...}

procedure TBlock.aufbauen;
begin
  Form1.Canvas.Pen.color:=RandFarbe;
  Form1.Canvas.Brush.color:=FuellFarbe;
end;

{----------------------------------}

procedure TPunktBlock.aufbauen;
var i:Integer;
begin
  for I := 1 to 10 do
    begin
      Form1.canvas.Rectangle(i*30,15,i*30+20,30);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject); //Der gleiche, wie oben
var Punktblock:TPunktblock;
begin
  Punktblock:=TPunktblock.Create;
  Punktblock.fuellFarbe:=ClGreen;
  PunktBlock.RandFarbe:=CLRed;
  Punktblock.aufbauen;
  Button1.Visible:=false;
  Timer1.Enabled:=true;
end;
Okai, Danke für eure Antworten schonmal, und dass ihr mir bei sowas helft
Ähhm, wenn das komplett falsch ist, könntet ihr mir dann evlt n link geben oder auch erklären??

gut, also dann,
Hoffe die Fragen sind klar gestellt
Aso, ja, ich müsste die ganzen Objekte am Ende noch zerstören, aber ich denke mal, das das damit nicht zusammenhängt. Ich will die dann ja auch später verschwinden lassen, wenn der Ball ihre Koordinaten berührt.

Grüße,
Halbgard
  Mit Zitat antworten Zitat