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
vagtler

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

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 20:45
Naja Quellcode wird jetzt auch nicht viel ändern [,,,]
Ändern bestimmt nicht, aber erklären wird es sich.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 20:54
Immer diese Balls. Das Buch ist (sorry) kakke. Mach aus dem Single ein integer. Dann klappt auch die Abfrage.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 21:03
Momentchen, du hast ein "fYSpeed", benutzt in deinem Code aber immer nur "Ball.YSpeed". Wo kommt jetzt dieses fYSpeed ins Spiel?
"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)
  Mit Zitat antworten Zitat
Pfusch

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

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 21:40
@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.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 22:19
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.)
"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)
  Mit Zitat antworten Zitat
Pfusch

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

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 22:42
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);
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 23:19
Sei doch so gut und setze deinen Code in Delphi Tags, damit die Formatierung (sofern eine vorhanden) beibehalten bleibt. Das ist der Delphi-Helm in der Mitte von den Editor-Symbolen.

Dan sieht dein Quellcode nämlich so aus:

Delphi-Quellcode:
procedure TForm1.Testprocedure;
begin
  ShowMessage('Delphi TagsTest');
end;
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 23:48
Ob nun Integer oder Float macht doch hier überhaupt keinen Unterschied. Es wird ja nirgends ein Vergleich mit Konstanten gemacht, sondern nur gerechnet. Leider ist das noch immer ein wenig wenig Code. Es ist z.B. nicht ersichtlich, in welchem Scope sich die Variable "Ball" befindet, und beim fehlenden "end;" der Klassendeklaration hoffe ich, dass es wirklich einfach nur nicht mit kopiert wurde. Ich denke Bjoerk liegt schon mal ganz gut, seltsam ist jedoch, dass es bei dir dann keine Zugriffsfehler hagelt. Fazit: Die Erzeugung ist definitiv schon mal ein Fehler, aber leider immer noch zu wenig Kontext.

Zum Schluss noch ein kleiner Tipp. Man kann in case-Statements ganz nett Dinge zusammenfassen:
Delphi-Quellcode:
procedure TBrick.onCollision(Edge: Integer; Ball: TBall);
begin
  case Edge of
    1, 2: Ball.YSpeed := Ball.YSpeed * -1;
    3, 4: Ball.XSpeed := Ball.XSpeed * -1;
  end;
end;
Ist Kosmetik, reduziert aber Arbeit bei Änderungen
"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)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 23:19
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.
Es geht doch aber offensichtlich um Bildschirm-Koordinaten, und dafür benötigt man keine Float-, sondern Integer-Werte. Dennoch, bei mir funktioniert das einwandfrei:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
   Zahl : Single;
   S : String;

begin
   S := Label1.Caption;
   Zahl := StrToFloat(S);
   Zahl := Zahl * -1;
   S := FloatToStr(Zahl);
   Label1.Caption := S;
end;
Wieso funktioniert dein Beispiel nicht?
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Problem mit Multiplikation

  Alt 12. Aug 2013, 23:33
@Bjoerk
Weiß zwar nicht von welchem Buch du redest aber der Quellcode ist nur von mir selbst^^.
Ok, Sorry, wollte dich nicht vollquatschen, hatte das nur vermutet.

In deinem Code muß es aber heißen:

 Ball := TBall.Create(0,-1);
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:10 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