2015-08-11 49 views
7

koordine eder. İki doku arasındaki çarpışmanın tam noktasını bulmalıyım.JBox2D - çarpışmayı bul ben JBox2D kullanarak Java bir program yazıyorum

Bir çarpışma olur olmadığını belirlemek için kodu var ve tabii ki sadece dokular çarpışan olduğunu belirlemek için çarpışma nesnesi kimliğini çağırabilir. Ben anlamaya görünüyor olamaz ne

çarpışma kendi gerçek koordinatlarını almak için nasıl. Belgeleri okudum, ancak çok karmaşık ve bu sorunu doğrudan ele almıyor. çarpışma meydana geldiği

import org.jbox2d.callbacks.ContactImpulse; 
import org.jbox2d.callbacks.ContactListener; 
import org.jbox2d.collision.Manifold; 
import org.jbox2d.common.Vec2; 
import org.jbox2d.dynamics.Fixture; 
import org.jbox2d.dynamics.contacts.Contact; 


public class MyContactListener implements ContactListener{ 


    //When they start to collide 
    public void beginContact(Contact c) { 

    System.out.println("CONTACT"); 

    Fixture fa = c.getFixtureA(); 
    Fixture fb = c.getFixtureB(); 

    Vec2 posA = fa.getBody().getPosition(); 
    Vec2 posB = fb.getBody().getPosition(); 



} 

public void endContact(Contact c) { 

} 

public void preSolve(Contact c, Manifold m) {} 

public void postSolve(Contact c, ContactImpulse ci){} 

} 

cevap

1

bazen çarpışma tek nokta olmadığını bilmeli, bilmek, ama puan kümesi:

İşte benim kod.

extracted from manual

(this manual çıkarılan görüntü) Yukarıdaki kılavuzu olarak

söyler:

Box2D çakışan şekilleri irtibat noktalarını hesaplamak için işlevleri vardır. [...] Bu noktalar [...] onları manifold bir yapıya dönüştürür. [...]

Normalde ancak simülasyon üretilen sonucu kullanmak olasılıkla doğrudan temas manifoldları hesaplamak gerekmez. [...] Bu verileri gerekiyorsa, genellikle kullanmak en iyisidir WorldManifold yapısı [...].

Sen Contact c sınıf içinde erişebilirsiniz:

public void beginContact(Contact c) { 
    System.out.println("CONTACT"); 

    WorldManifold worldmanifold; 
    worldmanifold = c.getWorldManifold(); 

    for(Vec2 point : worldmanifold.points){ 
     System.out.println("Contact at : [" + point.x + ", " + point.y "]"); 
    } 
} 

Önemli: Bu kitaplığı (JBox2D) hiç kullanmamış, libGDX görünüşte bir kullandığından ancak, (aşinayım benzer bir (Box2D)). Ayrıca, JBox2D Java için Box2D (C++ bir) ise bilmiyorum ve JBox2D ve Box2D (libGDX bir) hiç ilişkin ise. Bu yüzden belki bazı yöntemleri (point.xpoint.getX() olabilir) değiştirebilirsiniz.

Sen de this site kontrol edebilir, ancak bu C içindir ++ (sana cevap vermek onların cevabı kullanın).

İlgili konular