AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Multiplikation

Ein Thema von Pfusch · begonnen am 12. Aug 2013 · letzter Beitrag vom 13. Aug 2013
Antwort Antwort
Seite 3 von 4     123 4      
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#21

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 09:20
OK, danke für die Aufklärung ich mach viel zu wenig Delphi in letzter Zeit

Nächste Frage: kommt das Programm in die onColission?
Aufrufe sind zwar da, aber falls die if's nie true sind wird's halt nix.
Gerade die letzte Bedingung (Ball.Coords.Y=Self.fCoords.Y) könnte durchaus problematisch sein.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#22

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 10:36
OT:
Und wie oft vergisst man auf der anderen Seite einfach ein break und hat einen schwer zu findenden Bug?
So gut wie nie. Mit etwas Erfahrung in diesen Sprachen mit diesen Sprachen reicht ein einfaches Überfliegen des Codes, um den Fehler zu finden; zumal man in den meisten Fällen eh case vermeiden sollte.
Aber zurück zum Thema
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#23

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 11:33
OT:
Und wie oft vergisst man auf der anderen Seite einfach ein break und hat einen schwer zu findenden Bug?
So gut wie nie.
Ich meine das relativ zum anderen Fall.
  Mit Zitat antworten Zitat
Pfusch

Registriert seit: 12. Aug 2013
7 Beiträge
 
#24

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 14:29
Vielen Dank für die vielen Ratschläge aber leider besteht das Problem weiterhin.

Die Bedingung für OnCollision stimmt auf jeden Fall und er kommt auch bis zum Case.

Delphi-Quellcode:
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;
wenn ich zb. Ball.YSpeed := 1; setze funktioniert es einwandfrei und es erreicht den Effekt den ich eigentlich mit *(-1) erreichen wollte.

Delphi-Quellcode:
procedure TBrick.onCollision(Edge : Integer; Ball : TBall);
  begin
       case Edge of
           1: Ball.YSpeed := 1;
           2: Ball.YSpeed := Ball.YSpeed * (-1);
           3: Ball.XSpeed := Ball.XSpeed * (-1);
           4: Ball.XSpeed := Ball.XSpeed * (-1);
       end;
  end;
Und Ball.YSpeed ist in diesem fall auch 100% -1 weil folgendes auch funktioniert:

Delphi-Quellcode:
procedure TBrick.onCollision(Edge : Integer; Ball : TBall);
  begin
       if Ball.YSpeed = -1 then Ball.YSpeed := 1;
  end;
  Mit Zitat antworten Zitat
Pfusch

Registriert seit: 12. Aug 2013
7 Beiträge
 
#25

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 14:47
Ok konnte das Problem jetzt eingrenzen:

Delphi-Quellcode:
procedure TBrick.onCollision(Edge : Integer; Ball : TBall);
  begin
  if Ball.YSpeed = -1 then
  begin
       Ball.YSpeed := Ball.YSpeed * (-1);
  end;
  end;
ergibt das Ball.YSpeed = 1 ist.

Delphi-Quellcode:
  if Ball.YSpeed = -1 then
  begin
       Ball.YSpeed := Ball.YSpeed + 2;
  end;
ergibt das Ball.YSpeed = 1 ist.

Delphi-Quellcode:
  procedure TBrick.onCollision(Edge : Integer; Ball : TBall);
  begin
  if Edge = 1 then
  begin
       Ball.YSpeed := Ball.YSpeed * (-1);
  end;
  end;
ergibt das Ball.YSpeed = -1 bleibt

Delphi-Quellcode:
  procedure TBrick.onCollision(Edge : Integer; Ball : TBall);
  begin
  if Edge = 1 then
  begin
       Ball.YSpeed := Ball.YSpeed + 2;
  end;
  end;
ergibt das Ball.YSpeed = 3 ist. Anscheinend wird onCollision 2mal hintereinander aufgerufen. Warum das so ist muss ich aber noch herausfinden
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#26

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 15:35
Ich vermute gaaaaaaaaanz stark, dass es in dem Scope der Methode noch ein "Edge" gibt, dass höhere Priorität als der Parameter hat. Weil es geht immer nur dann gut, wenn du "Edge" gerade eben nicht als Bedingung benutzt. Benenne den Parameter doch mal spaßeshalbar um, z.B. nach "aEdge", das wäre sogar noch styleguidekonform
Edit: Oder ggf. auch "Ball" mal nach "aBall" umbenennen, auch hier könnte ein ähnliches Problem sein. Hast du z.B. globale Variablen mit diesen Namen?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (13. Aug 2013 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#27

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 15:48
Hallo,

so wie ich das sehe, ist das Problem hier:   procedure TBrick.onCollision(Edge : Integer; Ball : TBall); .
Wenn "Ball" geändert werden soll, dann muss es lauten:   procedure TBrick.onCollision(Edge : Integer;var Ball : TBall); .

Ansonsten wird Ball nicht verändert (ohne var kein "call by reference").

Hier mal ein Beispiel:
Delphi-Quellcode:
procedure var_minus(var i: Integer);
begin
  i := i * -1;
end;

procedure minus(i: Integer);
begin
  i := i * -1;
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  i: Integer;
  j: Integer;

begin
  i := 1;
  j := 1;

  minus(i);
  var_minus(j);

  Label1.Caption := Format('i: %d, j: %d', [i, j]);
end;
Ergibt:
Code:
i: 1, j: -1
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (13. Aug 2013 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#28

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 15:58
Objekte werden immer als Referenz übergeben, deshalb ist "var" hier überflüssig.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#29

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 16:28
Objekte werden immer als Referenz übergeben, deshalb ist "var" hier überflüssig.
Ok - hast recht!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#30

AW: Problem mit Multiplikation

  Alt 13. Aug 2013, 16:32
Ich vermute gaaaaaaaaanz stark, dass es in dem Scope der Methode noch ein "Edge" gibt, dass höhere Priorität als der Parameter hat. [...]
Da halte ich dagegen, aber sowas von.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
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