Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi break it problem (https://www.delphipraxis.net/147030-break-problem.html)

speedy23 31. Jan 2010 16:47

Re: break it problem
 
inwiefern? na im timer oder net? solange der timer läuft wird alle 0,1 sek das shape 5 pixel verschoben oder hab ich das system nicht verstanden? (offensichtlich... :oops:)

mkinzler 31. Jan 2010 16:52

Re: break it problem
 
Dann verwende besser Konstanten
Delphi-Quellcode:
const dx=5, dy=5;

speedy23 31. Jan 2010 17:00

Re: break it problem
 
daran liegt das glaube ich leider nicht... ich zeig dir mal den kompletten code, vllt kannst du mir dann weiterhelfen, wenn du magst.



Code:

implementation
const dx=5;
      dy=5;
{$R *.dfm}
 var x,y:integer;
procedure TForm1.PauseknopfClick(Sender: TObject);
begin
  {Spiel pausieren und button pause unsichtbar --> Start sichtbar}
 pauseknopf.visible:=false;
 timer1.enabled:=false;
end;

procedure TForm1.StartknopfClick(Sender: TObject);
begin
  {macht den pauseknopf sichtbar, setzt spiel fort}
  timer1.Enabled:=true;
  pauseknopf.Visible:=True;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

      if reflektor.left > 110 then
      begin
       case ord(key) of
        vk_left:reflektor.left:=reflektor.left-14;
       end;
      end;

      if (reflektor.left < 426) then
      begin
       case ord(key) of
         vk_right:reflektor.left:=reflektor.left+14;
       end;
      end;
   end;

procedure TForm1.Timer1Timer(Sender: TObject);
var dx,dy:integer;
begin


  if (Shape1.Top <= 0) or (Shape1.Top >= image1.ClientHeight - Shape1.Height) then
  begin
    dy := -dy;
  end;
  if (Shape1.Left <= 0) or (Shape1.Left >= image1.ClientWidth - Shape1.Width) then
  begin
    dx := -dx;
  end;

  Shape1.Left := Shape1.Left + dx;
  Shape1.Top := Shape1.Top + dy;
end;





procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;

end;

procedure TForm1.NeuesSpiel1Click(Sender: TObject);

begin
 timer1.enabled:=true;

end;

end.

rollstuhlfahrer 31. Jan 2010 17:10

Re: break it problem
 
HI,

um die schönen Formatierungen wie in den obrigen Posts hinzubekommen, verwende NICHT Code sondern Delphi-Tags. Die gibts übrigens in der Menüleiste unter "Oft genutzt".

so, zu deinem Problem:
  • Warum verwendest du lokale Variablen, die genauso heißen, wie deine Konstanten?
  • Wie willst du denn damit Werte ungleich 0 erreichen?
  • Mal debuggen und gucken, was dx und dy so für werte haben.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var x,y:integer;
begin
  // x = dx;
  // y = dy;

  if (Shape1.Top <= 0) or (Shape1.Top >= image1.ClientHeight - Shape1.Height) then
  begin
    dy := -dy;
  end;
  if (Shape1.Left <= 0) or (Shape1.Left >= image1.ClientWidth - Shape1.Width) then
  begin
    dx := -dx;
  end;

  Shape1.Left := Shape1.Left + dx;
  Shape1.Top := Shape1.Top + dy;
end;
Bernhard

speedy23 31. Jan 2010 17:21

Re: break it problem
 
sorry aber nur das mit den variablen habe ich verstanden... was meinst du mit dem rest? wieso muss ich ungleich null erreichen? und debuggen... habsch noch nie gemacht?

edit| tut mir leid das ich euch so auf die nerven gehe aber ich finde den fehler einfach nicht... ich versteh das so...

Delphi-Quellcode:
rocedure TForm1.Timer1Timer(Sender: TObject);
var dx,dy:integer;
begin


  if (Shape1.Top <= 0) or (Shape1.Top >= image1.ClientHeight - Shape1.Height) then //wenn oberseite
    // vom kreis=0  oder der kreis die höhe des images überschreitet , dann reflektiere            
  begin
    dy := -dy; //richtungsänderung
  end;
  if (Shape1.Left <= 0) or (Shape1.Left >= image1.ClientWidth - Shape1.Width) then
  begin
    dx := -dx; // richtungsänderung
  end;

  Shape1.Left := Shape1.Left + dx; // das verrücken ohne kollision vom kreis
  Shape1.Top := Shape1.Top + dy;
end;

EWeiss 31. Jan 2010 17:24

Re: break it problem
 
Hier :)

rollstuhlfahrer 31. Jan 2010 17:28

Re: break it problem
 
nochmal: für deine Richtungsänderung kannst du keine Konstanten nehmen, da wie der Name schon sagt, Konstanten konstant sind und du denen somit keinen ANDEREN Wert als den einmal zugewiesenen geben kannst. Also brauchst du ne Variable (da die variabel ist), der du dann den Wert der Konstanten zuweist und dann die Richtungsänderung ausführst.

Bernhard

speedy23 31. Jan 2010 17:36

Re: break it problem
 
Delphi-Quellcode:
begin
  // x:=DX;
  // y:=dy;

  if (Shape1.Top <= 0) or (Shape1.Top >= image1.ClientHeight - Shape1.Height) then
  begin
    dy := -dy;
  end;
  if (Shape1.Left <= 0) or (Shape1.Left >= image1.ClientWidth - Shape1.Width) then
  begin
    dx := -dx;
  end;

  Shape1.Left := Shape1.Left + dx;
  Shape1.Top := Shape1.Top + dy;
end;
ich verstehe einfach nicht was ich tun soll könntest du nicht evtl sagen was ich durch was ersetzen muss... ichv erstehe deine gedanken mit den konstanten klar die können sich dann nciht verändern
aber ich denke ich soll mit konstanten arbeiten

mkinzler 31. Jan 2010 17:41

Re: break it problem
 
Die Konstanten waren für den Wert 5 gedacht.

Delphi-Quellcode:
   x:=DX;
   y:=dy;

  if (Shape1.Top <= 0) or (Shape1.Top >= image1.ClientHeight - Shape1.Height) then
  begin
    y := -dy;
  end;
  if (Shape1.Left <= 0) or (Shape1.Left >= image1.ClientWidth - Shape1.Width) then
  begin
    x := -dx;
  end;

  Shape1.Left := Shape1.Left + x;
  Shape1.Top := Shape1.Top + y;

speedy23 31. Jan 2010 17:44

Re: break it problem
 
danke für die antwort :)
leider funktinoiert es weiterhin nicht
der punkt wird kreiert und flimmert auf einer stelle ohne jegliche bewegung... was zu hölle mach ich denn falsch?

|edit
soll ich evtl den ganzen quelltext nochmal posten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.
Seite 2 von 6     12 34     Letzte »    

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