Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Multiplikation (https://www.delphipraxis.net/176104-problem-mit-multiplikation.html)

Pfusch 12. Aug 2013 18:38

Problem mit Multiplikation
 
Hallo, unzwar habe ich folgendes Problem in einer simplen Anweisung:

Ball.YSpeed := Ball.YSpeed * -1;

YSpeed ist im Testfall -1, wenn ich es aber wie oben mit -1 multipliziere bleibt es -1. Wenn ich es mit
z.B. -3 multipliziere kommt -3 heraus, aber bei einer Multiplikation mit 3 kommt auch -3 heraus. Ich kann überhaupt nicht nachvollziehen warum das nicht funktioniert. Bitte um eine schnelle Antwort

Delphi-Laie 12. Aug 2013 18:41

AW: Problem mit Multiplikation
 
Quelltext?

Furtbichler 12. Aug 2013 18:55

AW: Problem mit Multiplikation
 
Herzlich Willkommen im Forum!

Aber das...
Zitat:

Zitat von Pfusch (Beitrag 1224502)
Bitte um eine schnelle Antwort

Lass mal lieber.

Hetzen is hier nich.:-D

Pfusch 12. Aug 2013 19:53

AW: Problem mit Multiplikation
 
Naja Quellcode wird jetzt auch nicht viel ändern weil Ball.YSpeed an einem anderem Punkt nur auf -1 gesetzt wird. Wenn ich z.b. folgendes if ausführe wird Ball.YSpeed auf 1 gesetzt weil es ja -1 ist. Diese Anweisung funktioniert ohne Probleme. Warum aber eine simple Multiplikation mit -1 nicht funktioniert?

if Ball.YSpeed = -1 then
begin
Ball.YSpeed := 1;
end;

fYSpeed ist als single deklariert, falls es vlt. daran liegt:

fYSpeed : Single;

Im Endeffekt will ich nur einen Vorzeichenumkehr machen, die halt mit *-1. Habe nun auch schon andere Varianten ausprobiert:

Ball.YSpeed := 0-Ball.YSpeed;

funktioniert auch nicht und YSpeed ist immer noch negativ.

vagtler 12. Aug 2013 20:45

AW: Problem mit Multiplikation
 
Zitat:

Zitat von Pfusch (Beitrag 1224508)
Naja Quellcode wird jetzt auch nicht viel ändern [,,,]

Ändern bestimmt nicht, aber erklären wird es sich.

Bjoerk 12. Aug 2013 20:54

AW: Problem mit Multiplikation
 
Immer diese Balls. Das Buch ist (sorry) kakke. Mach aus dem Single ein integer. Dann klappt auch die Abfrage.

Medium 12. Aug 2013 21:03

AW: Problem mit Multiplikation
 
Momentchen, du hast ein "fYSpeed", benutzt in deinem Code aber immer nur "Ball.YSpeed". Wo kommt jetzt dieses fYSpeed ins Spiel?

Pfusch 12. Aug 2013 21:40

AW: Problem mit Multiplikation
 
@Bjoerk
Weiß zwar nicht von welchem Buch du redest aber der Quellcode ist nur von mir selbst^^. Liegt es am Single das es nicht funktioniert, weil ich nämlich einen Float Wert bräuchte, deswegen ist es mit Integer nicht möglich.

@Medium
Ball.fYSpeed und fYSpeed sind dasselbe, war nur zu faul Ball. zu schreiben, sorry falls dich das verwirrt hat.

Medium 12. Aug 2013 22:19

AW: Problem mit Multiplikation
 
Du hattest jedoch "Ball.YSpeed", nicht "Ball.fYSpeed" geschrieben. Solche Kleinigkeiten sind verflucht wichtig. Nicht nur im Code selbst, sondern auch, wenn man darüber spricht/schreibt. Das Beste ist es, wenn du einfach direkt die jeweiligen Stellen in Delphi markiertst und in deinen Beitrag kopierst. Spart die die lästige Schreibarbeit, und deine potenziellen Helfer haben eine Chance tatsächlich hilfreich zu werden.
So wie es jetzt alles da steht, gibt es überhaupt keinen Grund, dass die Vorzeicheumkehrung mittels "*-1" nicht gehen sollte. Und ich kann aus eigener Erfahrung für eine Palette an Delphi-Versionen bestätigen, dass es das stets problemlos konnte. (Es wäre sicherlich auch schon ein wenig aufgefallen wenn nicht.) Also muss an deinem restlichen Code etwas sein, was hier in die Suppe spuckt. (Ich habe ja vorsichtig eine Verquickung von Properties mit Records unter Verdacht, aber ohne deinen tatsächlichen Code gibt es einfach keine Grundlage hier weiter zu machen.)

Pfusch 12. Aug 2013 22:42

AW: Problem mit Multiplikation
 
So, habe dann die ganzen wichtigen Bereiche in dem Ball vorkommt kopiert

die Klasse:

unit uBall;

interface

type
TBall = Class

private
fXSpeed : Single;
fYSpeed : Single;

public
Constructor Create(xspeed, yspeed : Single);
property YSpeed: Single read fYSpeed write fYSpeed;
property XSpeed: Single read fXSpeed write fXSpeed;

implementation

constructor TBall.Create(xspeed, yspeed : Single);
begin
self.fXSpeed := xspeed;
self.fYSpeed := yspeed;
end;

end;

hier wird der ball erzeugt:

Ball: TBall;


TBall.Create(0,-1)

und hier die betreffende methode die nicht funktioniert, in dem fall war Edge=1:

procedure TBrick.onCollision(Edge : Integer; Ball : TBall);
begin
case Edge of
1: Ball.YSpeed := Ball.YSpeed * -1;
2: Ball.YSpeed := Ball.YSpeed * -1;
3: Ball.XSpeed := Ball.XSpeed * -1;
4: Ball.XSpeed := Ball.XSpeed * -1;
end;
end;

Der Auruf ist:

Brick.OnCollision(1,Ball);


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Seite 1 von 4  1 23     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