Merge pull request #1645 from vlidholt/master
Adds teleporting methods for moving sprite kinematic bodies
This commit is contained in:
commit
dd956b9fe6
@ -148,6 +148,16 @@ class Node {
|
|||||||
invalidateTransformMatrix();
|
invalidateTransformMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void teleportRotation(double rotation) {
|
||||||
|
assert(rotation != null);
|
||||||
|
if (_physicsBody != null && parent is PhysicsNode) {
|
||||||
|
_physicsBody._body.setTransform(_physicsBody._body.position, radians(rotation));
|
||||||
|
_physicsBody._body.angularVelocity = 0.0;
|
||||||
|
_physicsBody._body.setType(box2d.BodyType.STATIC);
|
||||||
|
}
|
||||||
|
_setRotationFromPhysics(rotation);
|
||||||
|
}
|
||||||
|
|
||||||
/// The position of this node relative to its parent.
|
/// The position of this node relative to its parent.
|
||||||
///
|
///
|
||||||
/// myNode.position = new Point(42.0, 42.0);
|
/// myNode.position = new Point(42.0, 42.0);
|
||||||
@ -172,6 +182,23 @@ class Node {
|
|||||||
invalidateTransformMatrix();
|
invalidateTransformMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void teleportPosition(Point position) {
|
||||||
|
assert(position != null);
|
||||||
|
if (_physicsBody != null && parent is PhysicsNode) {
|
||||||
|
PhysicsNode physicsNode = parent;
|
||||||
|
_physicsBody._body.setTransform(
|
||||||
|
new Vector2(
|
||||||
|
position.x / physicsNode.b2WorldToNodeConversionFactor,
|
||||||
|
position.y / physicsNode.b2WorldToNodeConversionFactor
|
||||||
|
),
|
||||||
|
_physicsBody._body.getAngle()
|
||||||
|
);
|
||||||
|
_physicsBody._body.linearVelocity = new Vector2.zero();
|
||||||
|
_physicsBody._body.setType(box2d.BodyType.STATIC);
|
||||||
|
}
|
||||||
|
_setPositionFromPhysics(position);
|
||||||
|
}
|
||||||
|
|
||||||
/// The skew along the x-axis of this node in degrees.
|
/// The skew along the x-axis of this node in degrees.
|
||||||
///
|
///
|
||||||
/// myNode.skewX = 45.0;
|
/// myNode.skewX = 45.0;
|
||||||
|
@ -112,6 +112,13 @@ class PhysicsNode extends Node {
|
|||||||
for (box2d.Body b2Body = b2World.bodyList; b2Body != null; b2Body = b2Body.getNext()) {
|
for (box2d.Body b2Body = b2World.bodyList; b2Body != null; b2Body = b2Body.getNext()) {
|
||||||
// Update visual position and rotation
|
// Update visual position and rotation
|
||||||
PhysicsBody body = b2Body.userData;
|
PhysicsBody body = b2Body.userData;
|
||||||
|
|
||||||
|
if (b2Body.getType() == box2d.BodyType.KINEMATIC) {
|
||||||
|
body._targetPosition = null;
|
||||||
|
body._targetAngle = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update visual position and rotation
|
||||||
body._node._setPositionFromPhysics(new Point(
|
body._node._setPositionFromPhysics(new Point(
|
||||||
b2Body.position.x * b2WorldToNodeConversionFactor,
|
b2Body.position.x * b2WorldToNodeConversionFactor,
|
||||||
b2Body.position.y * b2WorldToNodeConversionFactor
|
b2Body.position.y * b2WorldToNodeConversionFactor
|
||||||
|
Loading…
x
Reference in New Issue
Block a user