Billiard-Physik
Übersicht

![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
gut, klappt, jetzt hab ich mal versucht aus der "k2\id%" Aktionen zu schlussfolgern.
Hat wie immer nicht so ganz geklappt. Ich hab einfach ne Select Abfrage eingebaut. Code: [AUSKLAPPEN] For k1.TKugel = Each TKugel
For k2.TKugel = Each TKugel If Handle(k1)<>Handle(k2) Then R# = 1 D# = InRange(EntityX(k1\mesh),EntityZ(k1\mesh),EntityX(k2\mesh),EntityZ(k2\mesh),R#) If D#<2*R# Then Text 10,10,"Kollision!" If k1\id%=weiss Or k2\id%=weiss Then Text 10,30,"Die Weiße kollidiert! Aktion erfordert!" Select k2\id% Case 1 MoveEntity one\mesh,wForce#,0,0 Case 2 MoveEntity two\mesh,wForce#,0,0 Case 3 MoveEntity three\mesh,wForce#,0,0 Case 4 MoveEntity four\mesh,wForce#,0,0 End Select EndIf EndIf Next Next |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso fragst du die k2\id ab, um dann eine Kugel zu bewegen, die offentsichtlich zwar durch eine andere Variable angesprochen wird, allerdings auf den gleichen Eintrag zeigt?
Und: Was funktioniert denn nicht? Gibt es einen Error, bewegt sich die Kugel nicht, oder was geschieht? Wenn sich die Kugel nicht bewegt, sieh' mal nach, ob du schonmal vorher "wforce#" verändert hast. ![]() |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich dachte wenn k1 die Weiße ist, dann ist k2 irgendeine der anderen Kugeln? ![]() naja, also wForce# ist Global mit dem Wert 4 deklariert. Die Eins bewegt sich ja, aber die anderen die sie berührt müssten dann ja auch mit dem Wert nach hinten rollen. Oder? ![]() |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast schon recht wenn du denkst dass wenn k1 die Weiße ist die andere nicht die Weiße ist, denn du prüfst ja ob die beiden _nicht_ die selben sind und fährst nur fort wenn das auch zutrifft.
Wenn k1 die weiße ist und k2 ebenfalls dann überspringst du ja den Rest, das müsste also passen. Andersweitig kann ich dir aber auch grad nicht helfen =/ MfG DaysShadow |
||
Blessed is the mind too small for doubt |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du machst dir das zu einfach. Ich würde sagen, du schmeißt den Code nochmal um und gehst folgende Schritte durch (Wenn du Vektoren nicht kannst, sieh' dir diese Seite an: http://www.mathe-online.at/mathint/vect1/i.html, sie hat mir zum Thema gut geholfen):
![]() ![]() ![]() ![]() ![]() Wieso Vektorrechnung? Sie benutzt keine trigonometrischen Funktionen, sondern nur die Grundrechenarten, was die Sache schnell macht. Falls du dich nicht an Vektoren herantraust, was ja auch okay ist, dann musst du versuchen, mit Winkeln herumzuhantieren. So, ich muss jetzt weg, ich hoffe ich konnte helfen. ![]() |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, ich habe von ZaP mal ein paar Ausschnitte bekommen wie man das machen sollte.
Ich habe diesen Code mal (fast 1zu1 ![]() Meine Frage nun, wieso prallt nix ab etc. wenn ich die Weiße gegen die anderen prallen lasse? Code: [AUSKLAPPEN] Const BALL=1,TISCH=2
Global wForce#=4,stoss Local idcounter%=0 Type TKugel Field id% Field x#,y#,z# Field mesh Field speedx#,speedy# Field mass# End Type ;---------------------------------------------------------------------| Graphics3D 640,480,32,1 SetBuffer BackBuffer() Global cam = CreateCamera() ;---------------------------------------------------------------------| table = LoadMesh("models\table.3ds") Global white.TKugel = New TKugel Global one.TKugel = New TKugel Global two.TKugel = New TKugel Global three.TKugel = New TKugel Global four.TKugel = New TKugel Global five.TKugel = New TKugel Global six.TKugel = New TKugel Global seven.TKugel = New TKugel Global eight.TKugel = New TKugel Global nine.TKugel = New TKugel Global ten.TKugel = New TKugel Global ele.TKugel = New TKugel Global twe.TKugel = New TKugel Global thi.TKugel = New TKugel Global fut.TKugel = New TKugel Global fif.TKugel = New TKugel ;Hier lade ich die Meshes ;---------------------------------------------------------------------| For k.TKugel = Each TKugel k\id%=idcounter% idcounter%=idcounter%+1 Next For k.TKugel = Each TKugel EntityType k\mesh,BALL Next EntityType table,TISCH ;---------------------------------------------------------------------| Collisions BALL,TISCH,2,2 While Not KeyHit(1) Cls physics() updBalls() RenderWorld() UpdateWorld() Flip Wend End ;---------------------------------------------------------------------| Function physics() For k.TKugel = Each TKugel k\speedx# = k\speedx# * 0.99 k\speedy# = k\speedy# * 0.99 If k\speedx# < 0.001 And k\speedx# > -0.001 Then k\speedx# = 0.0 If k\speedy# < 0.001 And k\speedy# > -0.001 Then k\speedy# = 0.0 For k2.TKugel = Each TKugel If k2\mesh <> k\mesh Then k\x# = EntityX(k\mesh) k\y# = EntityY(k\mesh) k\z# = EntityZ(k\mesh) k2\x# = EntityX(k2\mesh) k2\y# = EntityY(k2\mesh) k2\z# = EntityZ(k2\mesh) If EntityDistance(k\mesh, k2\mesh) <= 0.122 ; >> kollision Text 10,10,"Kollision!" collision_normal_degree# = ATan2(k2\z#-k\z#, k2\x#-k\x#) vectorX# = Cos(collision_normal_degree#) vectorY# = Sin(collision_normal_degree#) movement_vector1# = k\speedx# * vectorX# + k\speedy# * vectorY# movement_vector2# = k2\speedx# * vectorX# + k2\speedy# * vectorY# speedfactor# = (2.0 * (movement_vector1# - movement_vector2#)) / (k\mass# + k2\mass#) k\speedx# = k\speedx# - speedfactor# * k\mass# * vectorX# k\speedy# = k\speedy# - speedfactor# * k\mass# * vectorY# k2\speedx# = k2\speedx# + speedfactor# * k2\mass# * vectorX# k2\speedy# = k2\speedy# + speedfactor# * k2\mass# * vectorY# EndIf EndIf Next Next End Function Function updBalls() For k.TKugel = Each TKugel TranslateEntity k\mesh,0,-1,0 Next If KeyHit(54) Then stoss=1 If stoss=1 Then MoveEntity white\mesh,wForce#,0,0 EndIf End Function Mfg, N0X PS.: @ZaP: Wenn ich den Code nicht so verwenden darf, sag bescheid. |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil du keine Ball-Ball kollision sondern nur Ball-Tisch Kollision hast? | ||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Passiert trotzdem nix. | ||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bewegen sich die anderen Kugeln auch?
Es gibt immer wieder Probleme mit Kollisionen von 2 Bewegenden Entitys. Daher würde ich dir vorschlagen, eine eigene Kollisionsroutine zu schreiben. EntityDistance ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
da_poller hat Folgendes geschrieben: Noobody hat Folgendes geschrieben:
Ausserdem hast du bei einem Billardspiel ja nur zwei Dimensionen, die du berücksichtigen musst; die Kugeln bewegen sich ja nur auf dem Tisch und können sich in der Höhe nicht bewegen.
das halte ich für ein gerücht.. (zumindest gibt es mittel und wege bei denen die 3te dimension die ein oder andere partie retten kann! *klugscheiß* Beim Poolbilliard ist eine springende Kugel automatisch ein Foul! |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
viken... wozu besitze ich dann ein jump queue? oO sry für ot, aber ein jumpshot ist im pool billard(8ball, 9 ball sowie 14/1) ein erlaubtes und genutztes mittel. für detailfragen bitte aber dann pm. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group