本文整理汇总了C#中FarseerPhysics.Collision.Shapes.PolygonShape.SetAsEdge方法的典型用法代码示例。如果您正苦于以下问题:C# PolygonShape.SetAsEdge方法的具体用法?C# PolygonShape.SetAsEdge怎么用?C# PolygonShape.SetAsEdge使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FarseerPhysics.Collision.Shapes.PolygonShape
的用法示例。
在下文中一共展示了PolygonShape.SetAsEdge方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PrismaticTest
private PrismaticTest()
{
Body ground;
{
ground = BodyFactory.CreateBody(World);
PolygonShape shape3 = new PolygonShape(0);
shape3.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
ground.CreateFixture(shape3);
}
PolygonShape shape = new PolygonShape(5);
shape.SetAsBox(2.0f, 0.5f);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0.0f, 10.0f);
body.CreateFixture(shape);
_fixedJoint = new FixedPrismaticJoint(body, body.Position, new Vector2(0.5f, 1.0f));
_fixedJoint.MotorSpeed = 5.0f;
_fixedJoint.MaxMotorForce = 1000.0f;
_fixedJoint.MotorEnabled = true;
_fixedJoint.LowerLimit = -10.0f;
_fixedJoint.UpperLimit = 20.0f;
_fixedJoint.LimitEnabled = true;
World.AddJoint(_fixedJoint);
PolygonShape shape2 = new PolygonShape(5);
shape2.SetAsBox(2.0f, 0.5f);
Body body2 = BodyFactory.CreateBody(World);
body2.BodyType = BodyType.Dynamic;
body2.Position = new Vector2(10.0f, 10.0f);
body2.CreateFixture(shape2);
_joint = new PrismaticJoint(ground, body2, ground.GetLocalPoint(body2.Position), Vector2.Zero,
new Vector2(0.5f, 1.0f));
_joint.MotorSpeed = 5.0f;
_joint.MaxMotorForce = 1000.0f;
_joint.MotorEnabled = true;
_joint.LowerLimit = -10.0f;
_joint.UpperLimit = 20.0f;
_joint.LimitEnabled = true;
World.AddJoint(_joint);
}
示例2: EdgeShapes
private EdgeShapes()
{
// Ground body
{
Body ground = BodyFactory.CreateBody(World);
float x1 = -20.0f;
float y1 = 2.0f*(float) Math.Cos(x1/10.0f*(float) Math.PI);
for (int i = 0; i < 80; ++i)
{
float x2 = x1 + 0.5f;
float y2 = 2.0f*(float) Math.Cos(x2/10.0f*(float) Math.PI);
PolygonShape shape = new PolygonShape(0);
shape.SetAsEdge(new Vector2(x1, y1), new Vector2(x2, y2));
ground.CreateFixture(shape);
x1 = x2;
y1 = y2;
}
}
{
Vertices vertices = new Vertices(3);
vertices.Add(new Vector2(-0.5f, 0.0f));
vertices.Add(new Vector2(0.5f, 0.0f));
vertices.Add(new Vector2(0.0f, 1.5f));
_polygons[0] = new PolygonShape(20);
_polygons[0].Set(vertices);
}
{
Vertices vertices = new Vertices(3);
vertices.Add(new Vector2(-0.1f, 0.0f));
vertices.Add(new Vector2(0.1f, 0.0f));
vertices.Add(new Vector2(0.0f, 1.5f));
_polygons[1] = new PolygonShape(20);
_polygons[1].Set(vertices);
}
{
const float w = 1.0f;
float b = w/(2.0f + (float) Math.Sqrt(2.0f));
float s = (float) Math.Sqrt(2.0f)*b;
Vertices vertices = new Vertices(8);
vertices.Add(new Vector2(0.5f*s, 0.0f));
vertices.Add(new Vector2(0.5f*w, b));
vertices.Add(new Vector2(0.5f*w, b + s));
vertices.Add(new Vector2(0.5f*s, w));
vertices.Add(new Vector2(-0.5f*s, w));
vertices.Add(new Vector2(-0.5f*w, b + s));
vertices.Add(new Vector2(-0.5f*w, b));
vertices.Add(new Vector2(-0.5f*s, 0.0f));
_polygons[2] = new PolygonShape(20);
_polygons[2].Set(vertices);
}
{
_polygons[3] = new PolygonShape(20);
_polygons[3].SetAsBox(0.5f, 0.5f);
}
{
_circle = new CircleShape(0.5f, 1);
}
_bodyIndex = 0;
_angle = 0.0f;
}
示例3: BridgeTest
private BridgeTest()
{
Body ground;
{
ground = new Body(World);
PolygonShape shape = new PolygonShape(0);
shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
ground.CreateFixture(shape);
}
{
Vertices box = PolygonTools.CreateRectangle(0.5f, 0.125f);
PolygonShape shape = new PolygonShape(box, 20);
Body prevBody = ground;
for (int i = 0; i < Count; ++i)
{
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(-14.5f + 1.0f*i, 5.0f);
Fixture fixture = body.CreateFixture(shape);
fixture.Friction = 0.2f;
Vector2 anchor = new Vector2(-0.5f, 0.0f);
RevoluteJoint jd = new RevoluteJoint(prevBody, body,
prevBody.GetLocalPoint(body.GetWorldPoint(anchor)), anchor);
World.AddJoint(jd);
prevBody = body;
}
Vector2 anchor2 = new Vector2(0.5f, 0.0f);
RevoluteJoint jd2 = new RevoluteJoint(ground, prevBody,
ground.GetLocalPoint(prevBody.GetWorldPoint(anchor2)), anchor2);
World.AddJoint(jd2);
}
Vertices vertices = new Vertices(3);
vertices.Add(new Vector2(-0.5f, 0.0f));
vertices.Add(new Vector2(0.5f, 0.0f));
vertices.Add(new Vector2(0.0f, 1.5f));
for (int i = 0; i < 2; ++i)
{
PolygonShape shape = new PolygonShape(vertices, 1);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(-8.0f + 8.0f*i, 12.0f);
body.CreateFixture(shape);
}
for (int i = 0; i < 3; ++i)
{
CircleShape shape = new CircleShape(0.5f, 1);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(-6.0f + 6.0f*i, 10.0f);
body.CreateFixture(shape);
}
}
示例4: CharacterCollisionTest
private CharacterCollisionTest()
{
//Ground body
Fixture ground = FixtureFactory.CreateEdge(World, new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
// Collinear edges
PolygonShape shape = new PolygonShape(1);
shape.SetAsEdge(new Vector2(-8.0f, 1.0f), new Vector2(-6.0f, 1.0f));
ground.Body.CreateFixture(shape);
shape.SetAsEdge(new Vector2(-6.0f, 1.0f), new Vector2(-4.0f, 1.0f));
ground.Body.CreateFixture(shape);
shape.SetAsEdge(new Vector2(-4.0f, 1.0f), new Vector2(-2.0f, 1.0f));
ground.Body.CreateFixture(shape);
// Square tiles
PolygonShape tile = new PolygonShape(1);
tile.SetAsBox(1.0f, 1.0f, new Vector2(4.0f, 3.0f), 0.0f);
ground.Body.CreateFixture(tile);
tile.SetAsBox(1.0f, 1.0f, new Vector2(6.0f, 3.0f), 0.0f);
ground.Body.CreateFixture(tile);
tile.SetAsBox(1.0f, 1.0f, new Vector2(8.0f, 3.0f), 0.0f);
ground.Body.CreateFixture(tile);
// Square made from an edge loop.
Vertices vertices = new Vertices(4);
vertices.Add(new Vector2(-1.0f, 3.0f));
vertices.Add(new Vector2(1.0f, 3.0f));
vertices.Add(new Vector2(1.0f, 5.0f));
vertices.Add(new Vector2(-1.0f, 5.0f));
LoopShape loopShape = new LoopShape(vertices, 0);
ground.Body.CreateFixture(loopShape);
// Edge loop.
vertices = new Vertices(10);
vertices.Add(new Vector2(0.0f, 0.0f));
vertices.Add(new Vector2(6.0f, 0.0f));
vertices.Add(new Vector2(6.0f, 2.0f));
vertices.Add(new Vector2(4.0f, 1.0f));
vertices.Add(new Vector2(2.0f, 2.0f));
vertices.Add(new Vector2(-2.0f, 2.0f));
vertices.Add(new Vector2(-4.0f, 3.0f));
vertices.Add(new Vector2(-6.0f, 2.0f));
vertices.Add(new Vector2(-6.0f, 0.0f));
FixtureFactory.CreateLoopShape(World, vertices, 0, new Vector2(-10, 4));
// Square character
Fixture squareCharacter = FixtureFactory.CreateRectangle(World, 1, 1, 20);
squareCharacter.Body.Position = new Vector2(-3.0f, 5.0f);
squareCharacter.Body.BodyType = BodyType.Dynamic;
squareCharacter.Body.FixedRotation = true;
squareCharacter.Body.SleepingAllowed = false;
squareCharacter.OnCollision += CharacterOnCollision;
squareCharacter.OnSeparation += CharacterOnSeparation;
// Square character 2
Fixture squareCharacter2 = FixtureFactory.CreateRectangle(World, 0.5f, 0.5f, 20);
squareCharacter2.Body.Position = new Vector2(-5.0f, 5.0f);
squareCharacter2.Body.BodyType = BodyType.Dynamic;
squareCharacter2.Body.FixedRotation = true;
squareCharacter2.Body.SleepingAllowed = false;
// Hexagon character
float angle = 0.0f;
const float delta = Settings.Pi/3.0f;
vertices = new Vertices(6);
for (int i = 0; i < 6; ++i)
{
vertices.Add(new Vector2(0.5f*(float) Math.Cos(angle), 0.5f*(float) Math.Sin(angle)));
angle += delta;
}
Fixture hexCharacter = FixtureFactory.CreatePolygon(World, vertices, 20);
hexCharacter.Body.Position = new Vector2(-5.0f, 8.0f);
hexCharacter.Body.BodyType = BodyType.Dynamic;
hexCharacter.Body.FixedRotation = true;
hexCharacter.Body.SleepingAllowed = false;
// Circle character
Fixture circleCharacter = FixtureFactory.CreateCircle(World, 0.5f, 20);
circleCharacter.Body.Position = new Vector2(3.0f, 5.0f);
circleCharacter.Body.BodyType = BodyType.Dynamic;
circleCharacter.Body.FixedRotation = true;
circleCharacter.Body.SleepingAllowed = false;
}
示例5: RopeTest
private RopeTest()
{
Body ground;
{
ground = new Body(World);
PolygonShape shape = new PolygonShape(0);
shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
ground.CreateFixture(shape);
}
{
const float y = 15;
Body prevBody = ground;
for (int i = 0; i < Count; ++i)
{
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0.5f + 1.0f*i, y);
if (i == Count - 1)
{
Vertices box = PolygonTools.CreateRectangle(1.5f, 1.5f);
PolygonShape shape = new PolygonShape(box, 1);
shape.Density = 100;
Fixture fixture = body.CreateFixture(shape);
fixture.Friction = 0.2f;
fixture.CollisionFilter.CollisionCategories = Category.Cat2;
fixture.CollisionFilter.CollidesWith = Category.All & ~Category.Cat2;
body.Position = new Vector2(1.0f*i, y);
body.AngularDamping = 0.4f;
}
else
{
Vertices box = PolygonTools.CreateRectangle(0.5f, 0.125f);
PolygonShape shape = new PolygonShape(box, 1);
shape.Density = 20;
Fixture fixture = body.CreateFixture(shape);
fixture.Friction = 0.2f;
fixture.CollisionFilter.CollisionCategories = Category.Cat1;
fixture.CollisionFilter.CollidesWith = Category.All & ~Category.Cat2;
}
Vector2 anchor = new Vector2(i, y);
RevoluteJoint jd = new RevoluteJoint(prevBody, body, prevBody.GetLocalPoint(ref anchor),
body.GetLocalPoint(ref anchor));
jd.CollideConnected = false;
World.AddJoint(jd);
prevBody = body;
}
_rj = new RopeJoint(ground, prevBody, new Vector2(0, y), Vector2.Zero);
const float extraLength = 0.01f;
_rj.MaxLength = Count - 1.0f + extraLength;
World.AddJoint(_rj);
}
}
示例6: TheoJansenTest
private TheoJansenTest()
{
_offset = new Vector2(0.0f, 8.0f);
_motorSpeed = 2.0f;
_motorOn = true;
Vector2 pivot = new Vector2(0.0f, 0.8f);
// Ground
{
Body ground = BodyFactory.CreateBody(World);
PolygonShape shape = new PolygonShape(0);
shape.SetAsEdge(new Vector2(-50.0f, 0.0f), new Vector2(50.0f, 0.0f));
ground.CreateFixture(shape);
shape.SetAsEdge(new Vector2(-50.0f, 0.0f), new Vector2(-50.0f, 10.0f));
ground.CreateFixture(shape);
shape.SetAsEdge(new Vector2(50.0f, 0.0f), new Vector2(50.0f, 10.0f));
ground.CreateFixture(shape);
}
// Balls
for (int i = 0; i < 40; ++i)
{
CircleShape shape = new CircleShape(0.25f, 1);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(-40.0f + 2.0f*i, 0.5f);
body.CreateFixture(shape);
}
// Chassis
{
PolygonShape shape = new PolygonShape(1);
shape.SetAsBox(2.5f, 1.0f);
_chassis = BodyFactory.CreateBody(World);
_chassis.BodyType = BodyType.Dynamic;
_chassis.Position = pivot + _offset;
Fixture fixture = _chassis.CreateFixture(shape);
fixture.CollisionFilter.CollisionGroup = -1;
}
{
CircleShape shape = new CircleShape(1.6f, 1);
_wheel = BodyFactory.CreateBody(World);
_wheel.BodyType = BodyType.Dynamic;
_wheel.Position = pivot + _offset;
Fixture fixture = _wheel.CreateFixture(shape);
fixture.CollisionFilter.CollisionGroup = -1;
}
{
//_motorJoint = new RevoluteJoint(_wheel, _chassis, pivot + _offset);
_motorJoint = new RevoluteJoint(_wheel, _chassis, _wheel.GetLocalPoint(_chassis.Position), Vector2.Zero);
_motorJoint.CollideConnected = false;
_motorJoint.MotorSpeed = _motorSpeed;
_motorJoint.MaxMotorTorque = 400.0f;
_motorJoint.MotorEnabled = _motorOn;
World.AddJoint(_motorJoint);
}
Vector2 wheelAnchor = pivot + new Vector2(0.0f, -0.8f);
CreateLeg(-1.0f, wheelAnchor);
CreateLeg(1.0f, wheelAnchor);
_wheel.SetTransform(_wheel.Position, 120.0f*Settings.Pi/180.0f);
CreateLeg(-1.0f, wheelAnchor);
CreateLeg(1.0f, wheelAnchor);
_wheel.SetTransform(_wheel.Position, -120.0f*Settings.Pi/180.0f);
CreateLeg(-1.0f, wheelAnchor);
CreateLeg(1.0f, wheelAnchor);
}
示例7: SliderCrankTest
private SliderCrankTest()
{
Body ground;
{
ground = BodyFactory.CreateBody(World);
PolygonShape shape = new PolygonShape(0);
shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f));
ground.CreateFixture(shape);
}
{
Body prevBody = ground;
// Define crank.
{
PolygonShape shape = new PolygonShape(2);
shape.SetAsBox(0.5f, 2.0f);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0.0f, 7.0f);
body.CreateFixture(shape);
Vector2 anchor = new Vector2(0.0f, -2.0f);
_joint1 = new RevoluteJoint(prevBody, body, prevBody.GetLocalPoint(body.GetWorldPoint(anchor)),
anchor);
_joint1.MotorSpeed = 1.0f*Settings.Pi;
_joint1.MaxMotorTorque = 10000.0f;
_joint1.MotorEnabled = true;
World.AddJoint(_joint1);
prevBody = body;
}
// Define follower.
{
PolygonShape shape = new PolygonShape(2);
shape.SetAsBox(0.5f, 4.0f);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0.0f, 13.0f);
body.CreateFixture(shape);
Vector2 anchor = new Vector2(0.0f, -4.0f);
RevoluteJoint rjd3 = new RevoluteJoint(prevBody, body,
prevBody.GetLocalPoint(body.GetWorldPoint(anchor)), anchor);
rjd3.MotorEnabled = false;
World.AddJoint(rjd3);
prevBody = body;
}
// Define piston
{
PolygonShape shape = new PolygonShape(2);
shape.SetAsBox(1.5f, 1.5f);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0.0f, 17.0f);
body.CreateFixture(shape);
Vector2 anchor = Vector2.Zero;
RevoluteJoint rjd2 = new RevoluteJoint(prevBody, body,
prevBody.GetLocalPoint(body.GetWorldPoint(anchor)), anchor);
World.AddJoint(rjd2);
_joint2 = new FixedPrismaticJoint(body, new Vector2(0.0f, 17.0f), new Vector2(0.0f, 1.0f));
_joint2.MaxMotorForce = 1000.0f;
_joint2.MotorEnabled = true;
World.AddJoint(_joint2);
}
// Create a payload
{
PolygonShape shape = new PolygonShape(2);
shape.SetAsBox(1.5f, 1.5f);
Body body = BodyFactory.CreateBody(World);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0.0f, 23.0f);
body.CreateFixture(shape);
}
}
}