![]() |
Break-Game, Kugel auf Rechtecklanden lassen ...
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 : 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 :
Delphi-Quellcode:
Mfg KleinAmann
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. |
Re: Break
Hi,
mach mal bitte die [delphi][/delphi]-Tags um Deinen Code :) |
Re: Break
hey sry ;(
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Delphi-Frage ;) |
Re: Break
Das geht so nicht:
Zitat:
|
Re: Break
Hi,
macht nichts. Kann jedem mal passieren, so schauts aber deutlich besser aus. Zum Einen:
Delphi-Quellcode:
wäre vielleicht ein
if (bar.Top = Kugel.Top)
Delphi-Quellcode:
besser, da es sonst wirklich genau gleich sein muss.
if (Kugel.Top >= Bar.Top)
Zum anderen das lange If-Gewurschtel. Das kannst Du sicher mit
Delphi-Quellcode:
o.Ä. ersetzen.
if ((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left))
|
Re: Break
hey,
erstmal STAUN danke für die schnellen Antworten bin ich nicht gewohnt in anderen Fourms ;) DANKE so ich hab mal then if ((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left)) ausprobiert, leider macht er es immer noch nicht =( * noch ne Frage bei mir Debugt der Compiler also Borland Delphi 2005 nicht mehr, bin mal ausversehna auf : run -> run with out debugging gekommen wie mach ich dies Rückgängig? * Naja vielen Dank für die Antworten bis jetzt ;) Mfg KleinAmann |
Re: Break
Einfach auf Run -> Run klicken oder alternativ auf F9 drücken.
Es wäre besser, wenn Du den Code zuerst einmal debuggst, Dir die Werte anschaust und guckst, warum er nicht in die Abfrage springt. Sonst raten wir hier nur rum. Und mein Beispielcode muss nicht zwingend genau das sein, was es zum Laufen bringt. Es sollte nur als ein Beispiel dienen. |
Re: Break
Hey,
Leider stimmt was komplett nicht, unzwar macht er es nciht einmla wenn die Top also die Höhe übereinstimmt. Das hat eigentlich immer funktioniert..
Delphi-Quellcode:
if (bar.Top = Kugel.Top)
then //if //((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left)) // then begin i := 2; Panel1.Visible := true; Panel1.Caption := 'test'; end;
Delphi-Quellcode:
unit game;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) bar: TShape; aX: TLabel; Label2: TLabel; Label3: TLabel; aY: TLabel; Kugel: TShape; Timer1: TTimer; Panel1: TPanel; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; 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 ((Kugel.Left - 25 >= Bar.left) or (Kugel.Left + 25 <= Bar.Left)) then begin i := 2; Panel1.Visible := true; Panel1.Caption := 'test'; 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. |
Re: Break
Was passiert, wenn Du auf größer gleich und nicht auf Gleichheit überprüft? (Oder auch auf <=, je nach, ob sich das Shape oben oder unten befindet)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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