Autor Beitrag
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 27.05.17 10:13 
Hallo Forum

Problemstellung:
Wenn man weiss womit man kollidieren kann, ist eine Kollisionsabfrage einfach:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//Abfrage
begin
  if Kollision(Image1, Image5) then
    // ...
end;

function Kollision(i1, i2: TImage): Boolean;
var
  b: Boolean;
begin
  b := (i1.Top < i2.BoundsRect.Bottom) and  // 1 -> 5
       (i1.Left < i2.BoundsRect.Right) and  // 1 -> 4
       (i1.BoundsRect.Bottom > i2.BoundsRect.Top) and // 1 -> 3
       (i1.BoundsRect.Right > i2.BoundsRect.Left);    // 1 -> 2
  result := b;
end;

flags

Wie erkennt man nun, ob das momentane/bewegte TImage, auf ein x-beliebiges TImage auftrifft?
Einloggen, um Attachments anzusehen!
_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 27.05.17 16:08 
Du kannst in einer Schleife deinen Kollisionstest für alle möglichen TImages ausführen.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 27.05.17 16:24 
Könnte ich, nur schein' ich das Wie nicht zu verstehen. Das Testprojekt ist leider futsch, aber schematisch probierte ich sowas aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure KollTest;
begin
  with Form1 do
  begin
    for i := 0 to 4 do
      if imgArray[i] <> img then
        if Kollision(img, imgArray[i]) then
          caption := 'yes' else
          caption := 'no';
  end;
end;

// --> Aufruf im MouseMove der TImage-Array, direkt nach dem Bewegungsablauf


Das Problem dabei ist, es wir immer nur das letzte Element aus dem Array mit dem aktuellen/bewegten Element verglichen:
ausblenden Quelltext
1:
2:
3:
4:
1 --> 5
2 --> 5
3 --> 5
4 <-> 5

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 27.05.17 16:34 
Was genau meinst du mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
1 --> 5
2 --> 5
3 --> 5
4 <-> 5


Vom Prinzip her ist deine Schleife richtig. Da du die caption aber bei jeder Kollisionerkennung überschreibst, siehst du am Ende natürlich nur das Ergebnis mit dem letzten Timage.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 27.05.17 16:40 
Damit mein' ich: Die Kollision ergibt True, wenn z.B. 1 nach 5 bewegt wird, und die Flächen sich überlappen. Das geht bis 4 nach 5, sowie 5 nach 4. Alles andere ergibt False für Kollision();

Idealerweise sollte jeder mit Jedem kollidiieren dürfen

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 27.05.17 16:48 
Okay, jetzt wäre natürlich dein genauer Code hilfreich. Wenn du so etwas machst, sollte es klappen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function KollTest;
var i, j : integer;
begin
  result := false;
  with Form1 do
  begin
    for i := 0 to 3 do
      for j := i+1 to 4 do
        if Kollision(imgArray[i], imgArray[j]) then
        result := true;  
  end;
end;


Die Funktion prüft, ob irgendwas mit irgendwas anderem kollidiert und gibt entsprechend true/false zurück.

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 27.05.17 17:10 
Spitze, dein KollTest() ist erfolgsversprechend! Dankesehr Jann1k! Code nachkonstruiert und für funktionstüchtig erklärt:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
private
  img: TImage;
  imgArray: array[0..4of TImage;
  mouseDown: Boolean;
  oldPos: TPoint;

function Kollision(i1, i2: TImage): Boolean;
var
  b: Boolean;
begin
  b := (i1.Top < i2.BoundsRect.Bottom) and
       (i1.Left < i2.BoundsRect.Right) and
       (i1.BoundsRect.Bottom > i2.BoundsRect.Top) and
       (i1.BoundsRect.Right > i2.BoundsRect.Left);
  result := b;
end;

function KollTest: Boolean;
var
  i: Byte;
begin
  result := false;
  with Form1 do
  begin
    for i := 0 to 4 do
      if imgArray[i] <> img then
        if Kollision(img, imgArray[i]) then
        result := true;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  imgArray[0] := Image1;  // Images existieren bereits im Design
  imgArray[1] := Image2;
  imgArray[2] := Image3;
  imgArray[3] := Image4;
  imgArray[4] := Image5;
end;

procedure TForm1.AlleDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  img := TImage(Sender);
  mouseDown := true;
  oldPos.X := X;
  oldPos.Y := Y;
end;

procedure TForm1.AlleMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if mouseDown then
  begin
    img.Left := img.Left + X - oldPos.X;
    img.Top := img.Top + Y - oldPos.Y;
    if KollTest then
      Caption := 'Yes' else
      Caption := 'No';
  end;
end;

procedure TForm1.AlleUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mouseDown := false;
end;


Das Thema hat sich erledigt !!!

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1325
Erhaltene Danke: 117

Mac OSX
TypeScript (Webstorm), Kotlin, Clojure (IDEA)
BeitragVerfasst: Sa 27.05.17 17:25 
Moin,

auch wenn es bei höchstens fünf Iterationen keine wirkliche Rolle spielt: Bei der Implementierung einer solchen any-Überprüfung ist es idiomatischer, wenn man nach dem ersten positiven Test die Iteration abbricht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function KollTest: Boolean;
var
  i: Byte;
begin
  result := false;
  with Form1 do
  begin
    for i := Low(imgArray) to High(imgArray) do
      if imgArray[i] <> img then
        if Kollision(img, imgArray[i]) then 
        begin
          result := true;
          break;
        end;
  end;
end;


Weiterhin sollte man die Grenzen der Iteration natürlich auch nicht hardcodieren, da sich so sehr leicht recht unnötige Fehler einschleichen können ;-)

Viele Grüße

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 27.05.17 17:59 
Berechtigter Einwand. Das break bringt an der Stelle etwas, wenn auch nur ganz, ganz wenig.
Schleifenlängen hardcodieren sollte man nicht, jupp. Ist doch nur ein Test. ;)

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 29.05.17 21:48 
Entschuldigt bitte, dass ich das Thema erneut angehen muss. Die Kollisionsabfrage habe ich soweit verstanden. Die "Abbruchbedingung" will mir noch nicht gelingen.
Wenn also das bewegte img-Objekt auf das stehende imgArray[i] trifft, soll img am Rand von imgArray[i] anhalten, aber sich dennoch in anderen Richtungen frei bewegen können, ohne dass ich zwischendurch die Maustaste auslassen und nochmal hinklicken muss.

Das Beispiel von vorhin soll beibehalten werden. Im Moment helfe ich mir fogendermaßen aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.AlleMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if mouseDown then
  begin
    img.Left := img.Left + X - oldPos.X;
    img.Top := img.Top + Y - oldPos.Y;
    if KollTest then
    begin
      mouseDown := false;
      // ... überfragt
    end;
  end;
end;

Setze ich mouseDown nicht auf false und weise dem img.Top und img.Left vorgemerkte Werte zu, so dass sich die Objekte "abstossen", habe ich einen unschönen Effekt und das funktioniert auch nur beim ersten ausgewählten/selektierten TImage.
Wechsel ich die TImage zwischendurch, habe ich falsche "vorgemerkte Werte" und das momentane TImage springt irgendwo hin.
Abstossen ist irgendwie nicht das richtige bzw. ich handhabe es falsch.

Wie schaffe ich es nun, das momentane img-Objekt soweit auf ein x-beliebiges imgArray[i] zuzubewegen, dass bei einer Kollision, das momentane img-Objekt vor dem kollidierten imgArray[i] stehen bleibt, sich dennoch drum herum bewegen lässt, ohne dass ich die Maustaste zwischendurch auslassen muss?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 29.05.17 22:08 
Hey,

da musst du dann ein bischen tiefer in die Trickkiste greifen. Kurzer Abriss wie ich es machen würde:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
- TImages als Kugeln betrachten (mit Mittelpunkt und Radius)
- Kollision zwischen den 2 Kugeln erkennen (geht bei Kugeln auch viel einfacher als bei Rects)
- Vektor zwischen den 2 Kugeln bestimmen
- eine der beiden Kugeln so lange in Richtung des Vectors verschieben, bis sie nicht mehr kollidieren
  - Anmerkung: letzten Punkt könnte man auch ausrechnen
        - neuer Punkt von Kugel 1 = Punkt Kugel 2 + Normierter Vektor * (Radius Kugel 1 + Raduis Kugel 2)


Zum Test kannst du das ja mit den TImages weiter machen, aber für deinen produktiv Code würde ich mir eine entsprechene Klasse schreiben, die alle benötigten Eigenschaften deiner Kugeln kapselt (Mittelpunkt und Radius) und dann mit dieser Klassen die Kollisionsberechnung machen. Zum Zeichen kannt du der Klasse ja noch eine Render oder Paint Methode geben, die dann das TImage an die richtige Stelle schiebt. Auf alle Fälle sollte man sowas nicht über die TImages direkt machen.

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 29.05.17 22:39 
Die letzten 2 Zeilen aus dem Pseudocode klingen interessant. Für Kreis-Kollisionen existiert bereits eine Methode. Ich möchte es hier nur so simpel wie möglich angehen, um alle Tücken durchzugehen. Viele (externe) Beiträge enden genau an dieser Stelle und das ist echt schade. Bevor ich überhaupt an eine Klasse denken kann, mach' ich es zum Testen einfach mal mit zich TImage.
Dann bis später.

Nachtrag

Folgende Anpassungen wurden durchgeführt:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
function KollisionKreis(k1, k2: TImage): Boolean;  // neue Methode 
var
  b: Boolean;
  x, y, r: Single;
begin
  x := k1.Left - k2.Left;
  y := k1.Top - k2.Top;
  r := (k1.Width + k2.Width) / 2;
  b := r * r >= x * x + y * y;
  result := b;
end;

function KollTest: Boolean;
var
  i: Byte;
begin
  result := false;
  with Form1 do
  begin
    for i := Low(imgArray) to High(imgArray) do
      if imgArray[i] <> img then
        if KollisionKreis(img, imgArray[i]) then   // neue Methode hier eingetragen
          result := true;
  end;
end;

procedure TForm1.AllleMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  xx, yy: Integer;
begin
  if mouseDown then
  begin
    img.Left := img.Left + X - oldPos.X;
    img.Top := img.Top + Y - oldPos.Y;
    if KollTest then
    begin
      mouseDown := false;
      xx := (X - oldPos.X);         //  neue Änderungen
      yy := (Y - oldPos.Y);         //
      img.Left := img.Left - xx;    //
      img.Top := img.Top - yy;      //
      mousedown := true;            //
    end;
  end;
end;


Wie man sieht, wird manchmal eine Kollision erkannt, obwohl keine (optisch) gegeben ist.
Liegt das nun an der Routine oder an der Komponente TImage per se?

anime
Einloggen, um Attachments anzusehen!
_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
cryptnex
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 23
Erhaltene Danke: 5



BeitragVerfasst: Di 30.05.17 15:16 
Zitat:
Wie man sieht, wird manchmal eine Kollision erkannt, obwohl keine (optisch) gegeben ist.
Liegt das nun an der Routine oder an der Komponente TImage per se?

Du vergleichst jeweils die linkere obere Koordinate der beiden rechteckigen TImages miteinander. Du möchtest aber die Abstände der Mittelpunkte vergleichen. ;-)
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 30.05.17 19:27 
Richtig, die Mittelpunkt-Abstände interessiere mich, und die rechne ich mitn "Pythagoras" aus, siehe Methode KollisionKreis()!

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
cryptnex
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 23
Erhaltene Danke: 5



BeitragVerfasst: Di 30.05.17 20:30 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Richtig, die Mittelpunkt-Abstände interessiere mich, und die rechne ich mitn "Pythagoras" aus, siehe Methode KollisionKreis()!

Stimmt.
ausblenden Quelltext
1:
2:
Delta x = (L1 + B1/2) - (L2 + B2/2) 
Delta y = (T1 - H1/2) - (T2 - H2/2)

Wobei L für Left, T für Top und B für Breite und H für Höhe steht. Sind denn Breiten und Höhen von allen Images identisch? Falls ja, fällt das tatsächlich aus den Differenzen raus und ich bin selbst erstmal einmal ideenlos.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 30.05.17 21:23 
Die TImage Objekte sind alle gleich groß (64x64), um die vereinfachste Berechnung schnell durchzugehen. Vielleicht ist die Komponente nur etws "eigen" oder die Schleife braucht beim Durchgehen imgArray etwas zu lang. Das gilt es herauszufinden.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 31.05.17 11:25 
Hey,

in deiner Methode AllleMove verschiebst du die TImage, machst den KollisionsTest und wenn eine Kollision erkannt wurde schiebst du die Image an ihren alten Platz zurück. Wenn das Delta zwischen neuer und alter Maus Position jetzt sehr groß ist, dann siehst du da den Spalt zwischen deinen Kugeln. Guck dir nochma den Pseudo-Code von oben an. Wenn die Kollision erkantn wurde soll die Image nicht auf ihren alten Platz zurück gesetzt werden, sondern es soll die Position ausgerechnet werden, wo beide Kugeln direkt nebeneinander liegen.

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
- TImages als Kugeln betrachten (mit Mittelpunkt und Radius)
- Kollision zwischen den 2 Kugeln erkennen (geht bei Kugeln auch viel einfacher als bei Rects)
- Vektor zwischen den 2 Kugeln bestimmen
- eine der beiden Kugeln so lange in Richtung des Vectors verschieben, bis sie nicht mehr kollidieren
    - Anmerkung: letzten Punkt könnte man auch ausrechnen
        - neuer Punkt von Kugel 1 = Punkt Kugel 2 + Normierter Vektor * (Radius Kugel 1 + Raduis Kugel 2)


€: nochmal die Anmerkung: schreib dir Klassen dafür. Da must du nich so viel mit deinem Left/Top/Width/Height rum rechnen, der Code wird übersichtlicher und vorallem sparst du Rechenzeit! Jedesmal wenn du die Position deiner TImage änderst muss die Form neu gerendert werden :/

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Frühlingsrolle
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1325
Erhaltene Danke: 117

Mac OSX
TypeScript (Webstorm), Kotlin, Clojure (IDEA)
BeitragVerfasst: Mi 31.05.17 21:16 
Moin,

ich war mal so frei, dir in JavaScript was zusammenzuschreiben. Vielleicht hilft's ja als Inspiration.

Gruß
Finn

Für diesen Beitrag haben gedankt: cryptnex, Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2296
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 31.05.17 23:32 
Dankeschön Bergmann89, dankeschön FinnO!

Ich werde es auch in einer Klassenbibliothek umsetzen, aber ... es soll erstmal funktional/prozedural reibungslos ablaufen, und dann ... kommt die "Schönschrift" dran.
Zitat:
es soll die Position ausgerechnet werden, wo beide Kugeln direkt nebeneinander liegen

Das werde ich nun beherzigen und umsetzen. Macht für mich auch Sinn.
FinnO's Inspiration hat auch ganz gut funktioniert und könnte als "Blaupause" für die Klassenbibliothek dienen.

Die Ideen sind allesamt gut. Jetzt liegt es nur noch an mir, sie richtig umzusetzen.

Eins noch: Es ist interessant, wie Lazarus das Rendern für graphische Objekte handhabt. Für gewöhnlich flackern die Inhalte bewegter TImage in Delphi auf der TForm. Nicht aber in Lazarus. Die Eigenschaft .Doublebuffered auf true zu setzen, ist in Lazarus nichteinmal notwendig.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)