Break

Imod

Mitglied
Hey Leutz,

Ich habe früher viel C++ Programmiert bin aber vor einiger Zeit auf Delphi umgestiegen.

Nun bin ich dabei ein naja einfaches Game zu schreiben, mein Problem liegtnach
if (bar.Top = Kugel.Top)
then if

vermute ich Code.

Und zwar soll, wenn der Ball auf das Rechteck fliegt wieder zurück kehren.
Dummerweiße erkennt mein Programm nicht dass der Ball die gleiche .left wie mein
Balken(Rechteck) hat. Dass rechteck hat eine Width von 25 darum auch immer +1/-1
da er ja , egal auf welcher Fläche er landet es Merken soll.

Ich hoffe ihr habts kapiert ...

Hier der Code :

PHP:
var
  Form1: TForm1;
  counter : integer;
  xK : integer;
  yK: integer;
  i : integer;

implementation

{$R *.dfm}


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
yy : string;
xx : string;
begin
yy := IntToStr(Y);
xx := IntToStr(X);
aY.Caption := yy;
aX.Caption := xx;

if Y > 350 then if Y < 426 then bar.Top := Y;
if X < 501 then bar.Left := X;                 // Bar der Maus nachlaufen lassen!
end;



procedure TForm1.FormActivate(Sender: TObject);
begin
counter := 1;
xK := 300;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Kugel.Left := xK;
if (i = 1) then begin counter := counter +1;
                      yK := counter; end else
if (i = 2) then begin counter := counter -1;
                      yK := counter; end;

if (bar.Top = Kugel.Top)
  then if
   (bar.Left =
   (Kugel.Left) or (Kugel.Left +1) or (Kugel.Left -1) or
   (Kugel.Left +2) or (Kugel.Left -2) or (Kugel.Left +3) or (Kugel.Left -3) or
   (Kugel.Left +4) or (Kugel.Left -4) or (Kugel.Left +5) or (Kugel.Left -5) or
   (Kugel.Left +6) or (Kugel.Left -6) or (Kugel.Left +7) or (Kugel.Left -7) or
   (Kugel.Left +8) or (Kugel.Left -8) or (Kugel.Left +9) or (Kugel.Left -9) or
   (Kugel.Left +10) or (Kugel.Left -10) or (Kugel.Left +11) or (Kugel.Left -11) or
   (Kugel.Left +12) or (Kugel.Left -12) or (Kugel.Left +13) or (Kugel.Left -13) or
   (Kugel.Left +14) or (Kugel.Left -14) or (Kugel.Left +15) or (Kugel.Left -15) or
   (Kugel.Left +16) or (Kugel.Left -16) or (Kugel.Left +17) or (Kugel.Left -17) or
   (Kugel.Left +18) or (Kugel.Left -18) or (Kugel.Left +19) or (Kugel.Left -19) or
   (Kugel.Left +20) or (Kugel.Left -20) or (Kugel.Left +21) or (Kugel.Left -21) or
   (Kugel.Left +22) or (Kugel.Left -22) or (Kugel.Left +23) or (Kugel.Left -23) or
   (Kugel.Left +24) or (Kugel.Left -24) or (Kugel.Left +25) or (Kugel.Left -25))
    then begin
    i := 2; end;
if Kugel.Top < 410 then
begin
  Kugel.Top := Kugel.Top + yK;
end else begin
  yK := 160; xK := 372; Panel1.Visible := true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i := 1
end;

end.

Mfg ImoD
 
hey,

sry mein Internet ist ausgefallen Router störung ... sry

undzwar mit ungelich <=/>=
geht es sehr gut
 
könntest du ev. eine Zeichnung von dem machen, was du willst? ich kann es mir relativ schlecht vorstellen.

so vom Schiff aus würde ich sagen, dass der Fall bar.Top == Kugel.Top nie eintrifft, weil du keine Toleranzgrenze festgelegt hast. Oben beachtest du zwar eine Art Range

Code:
(if Y > 350 then if Y < 426 then bar.Top := Y;
if X < 501 then bar.Left := X;                // Bar der Maus nachlaufen lassen!
end; ),

aber unten ignorierst du sie wieder.
 
hey,

wie meinst du das genau?
und wie bau ich so ne toleranz grenze ein, hab so was noch nie gemacht =(

Mfg Domi
 
Code:
if (bar.Top = Kugel.Top)
  then if

testet ja, ob die Y-Koordinate des Balkens und der Kugel gleich sind. Sobald sich in deinem Programm Werte schnell ändern , darfst du nicht mehr mit "=" arbeiten.
Man sagt sogar, dass man bei Schleifen eine Zählvariable nie nur auf Gleichheit testen soll.

falsch:
Code:
i := 0;
while not i == 532 do
  inc(i);
end;

richtig:
Code:
i := 0;
while i < 532 do
  inc(i);
end;

bei visuellen Komponenten kommt noch dazu, dass nicht jeder Pixel registriert wird, über den du mit der Maus fährst. (Zeichne mal in MSPaint mit dem Bleistift einen schnellen Kreis, dann sieht mans).

Wenn man Komponenten hat, die sich bewegen, checkt man nicht den Bereich, welchen sie nicht übertreten dürfen, sondern man legt den Bereich fest, in welchem sie sich aufhalten dürfen, oder nicht dürfen.

ich hoffe, ich habe dir jetzt nicht lauter Zeugs erzählt, dass du sowieso schon weisst. Wenn was unklar ist, einfach fragen.

grz
 
hey,

erstmals vielen Dank.

Leider weiß ich nicht wie ich so einen Breich festlegen soll

Mfg Domi
 
Zurück