Scrollen Box2D DebugDraw

7

Ich entwickle ein Spiel mit Box2D (Javascript-Implementierung - Box2DWeb) und möchte wissen, wie ich das Debug-Draw verschieben kann. Ich weiß, die übliche Antwort lautet: Verwenden Sie kein Debug-Draw, sondern nur zum Debuggen. Ich bin nicht, aber nicht alle meine Objekte befinden sich auf demselben Bildschirm, und ich würde gerne sehen, wo sie sich in der Physikdarstellung befinden.

Wie kann ich die Debug-Zeichnung schwenken?

Wie Sie sehen können, wird das Debug-Draw-Zeug oben links angezeigt, aber es zeigt nur einen kleinen Teil der Welt.

Die Box2D-Debug-Zeichnung befindet sich oben links Hier ist ein Beispiel für das, was ich meine:
http://onedayitwillmake.com/ChuClone/

Das Spiel ist Open Source. Wenn Sie etwas durchgehen und notieren möchten, dass ich vielleicht etwas tue, das offensichtlich falsch ist:
https://github.com/onedayitwillmake/ChuClone

Hier ist meine hackige Methode , mit der ich jetzt durch die b2DebugDraw-Ansicht scrolle, in der ich b2DebugDraw eine Eigenschaft offsetX und offsetY hinzugefügt habe Geben Sie hier die Bildbeschreibung ein

onedayitwillmake
quelle
Am Ende habe ich der von mir verwendeten Implementierung eine offsetX / offsetY-Eigenschaft hinzugefügt.
Informationen
Kein Ideal, daher das Kopfgeld!
Tag wird
Ich spiele nur herum, um das gleiche Problem zu lösen. Für box2d hatte ich Glück mit dem Code hier: stackoverflow.com/questions/12340965/…
philipp

Antworten:

1

Ich habe diese Frage selbst gestellt und die Antwort ist recht einfach. Übersetzen Sie einfach den Debug-Draw-Kontext.

        debugDraw.SetDrawScale( camera.scaleWorldToScreen ); //My camera is doing the worldToScreen/screenToWorld conversion, so it has the scales.

        debugCtx.save();
        debugCtx.clearRect( 0, 0, debugCanvas.width, debugCanvas.height );
        debugCtx.translate( camera.position[0], camera.position[1] ); //translate it to the camera position
        debugCtx.scale( 1, -1 ); //invert the y coord.
        world.DrawDebugData();
        debugCtx.restore();
JCM
quelle
1

Ich bin nicht sicher, ob dies auf Ihren Fall zutrifft oder nicht, aber die C ++ - Implementierung von box2d fordert eine Klasse auf, Rending-Jobs auszuführen. Sie müssen box2d also eine Klasse zur Verfügung stellen, die ihm sagt, wie man Objekte zeichnet. Sie können alle angegebenen box2d-Daten in Ihrer Debugdraw-Klasse manuell auffüllen.

Ali1S232
quelle
2
Oder Sie können einfach vorher glTranslate (oder ein gleichwertiges Element) erstellen und einen einfacheren (oder Standard-) DebugDrawer verwenden.