- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用一堆尸体制作一个布娃娃。我想用什么样的关节来连接它们?距离关节?
最佳答案
C# API 应该与 AS3.0 非常相似,看看 AS3.0 Flash Implementation Samples :
这里是示例布娃娃的代码:
/*
* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
package TestBed{
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Collision.Shapes.*;
import Box2D.Dynamics.Joints.*;
import Box2D.Dynamics.Contacts.*;
import Box2D.Common.*;
import Box2D.Common.Math.*;
public class TestRagdoll extends Test{
public function TestRagdoll(){
// Set Text field
Main.m_aboutText.text = "Ragdolls";
var circ:b2CircleShape;
var box:b2PolygonShape;
var bd:b2BodyDef = new b2BodyDef();
var jd:b2RevoluteJointDef = new b2RevoluteJointDef();
var fixtureDef:b2FixtureDef = new b2FixtureDef();
// Add 5 ragdolls along the top
for (var i:int = 0; i < 2; i++){
var startX:Number = 70 + Math.random() * 20 + 480 * i;
var startY:Number = 20 + Math.random() * 50;
// BODIES
// Set these to dynamic bodies
bd.type = b2Body.b2_dynamicBody;
// Head
circ = new b2CircleShape( 12.5 / m_physScale );
fixtureDef.shape = circ;
fixtureDef.density = 1.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.3;
bd.position.Set(startX / m_physScale, startY / m_physScale);
var head:b2Body = m_world.CreateBody(bd);
head.CreateFixture(fixtureDef);
//if (i == 0){
head.ApplyImpulse(new b2Vec2(Math.random() * 100 - 50, Math.random() * 100 - 50), head.GetWorldCenter());
//}
// Torso1
box = new b2PolygonShape();
box.SetAsBox(15 / m_physScale, 10 / m_physScale);
fixtureDef.shape = box;
fixtureDef.density = 1.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.1;
bd.position.Set(startX / m_physScale, (startY + 28) / m_physScale);
var torso1:b2Body = m_world.CreateBody(bd);
torso1.CreateFixture(fixtureDef);
// Torso2
box = new b2PolygonShape();
box.SetAsBox(15 / m_physScale, 10 / m_physScale);
fixtureDef.shape = box;
bd.position.Set(startX / m_physScale, (startY + 43) / m_physScale);
var torso2:b2Body = m_world.CreateBody(bd);
torso2.CreateFixture(fixtureDef);
// Torso3
box.SetAsBox(15 / m_physScale, 10 / m_physScale);
fixtureDef.shape = box;
bd.position.Set(startX / m_physScale, (startY + 58) / m_physScale);
var torso3:b2Body = m_world.CreateBody(bd);
torso3.CreateFixture(fixtureDef);
// UpperArm
fixtureDef.density = 1.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.1;
// L
box = new b2PolygonShape();
box.SetAsBox(18 / m_physScale, 6.5 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX - 30) / m_physScale, (startY + 20) / m_physScale);
var upperArmL:b2Body = m_world.CreateBody(bd);
upperArmL.CreateFixture(fixtureDef);
// R
box = new b2PolygonShape();
box.SetAsBox(18 / m_physScale, 6.5 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX + 30) / m_physScale, (startY + 20) / m_physScale);
var upperArmR:b2Body = m_world.CreateBody(bd);
upperArmR.CreateFixture(fixtureDef);
// LowerArm
fixtureDef.density = 1.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.1;
// L
box = new b2PolygonShape();
box.SetAsBox(17 / m_physScale, 6 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX - 57) / m_physScale, (startY + 20) / m_physScale);
var lowerArmL:b2Body = m_world.CreateBody(bd);
lowerArmL.CreateFixture(fixtureDef);
// R
box = new b2PolygonShape();
box.SetAsBox(17 / m_physScale, 6 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX + 57) / m_physScale, (startY + 20) / m_physScale);
var lowerArmR:b2Body = m_world.CreateBody(bd);
lowerArmR.CreateFixture(fixtureDef);
// UpperLeg
fixtureDef.density = 1.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.1;
// L
box = new b2PolygonShape();
box.SetAsBox(7.5 / m_physScale, 22 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX - 8) / m_physScale, (startY + 85) / m_physScale);
var upperLegL:b2Body = m_world.CreateBody(bd);
upperLegL.CreateFixture(fixtureDef);
// R
box = new b2PolygonShape();
box.SetAsBox(7.5 / m_physScale, 22 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX + 8) / m_physScale, (startY + 85) / m_physScale);
var upperLegR:b2Body = m_world.CreateBody(bd);
upperLegR.CreateFixture(fixtureDef);
// LowerLeg
fixtureDef.density = 1.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.1;
// L
box = new b2PolygonShape();
box.SetAsBox(6 / m_physScale, 20 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX - 8) / m_physScale, (startY + 120) / m_physScale);
var lowerLegL:b2Body = m_world.CreateBody(bd);
lowerLegL.CreateFixture(fixtureDef);
// R
box = new b2PolygonShape();
box.SetAsBox(6 / m_physScale, 20 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((startX + 8) / m_physScale, (startY + 120) / m_physScale);
var lowerLegR:b2Body = m_world.CreateBody(bd);
lowerLegR.CreateFixture(fixtureDef);
// JOINTS
jd.enableLimit = true;
// Head to shoulders
jd.lowerAngle = -40 / (180/Math.PI);
jd.upperAngle = 40 / (180/Math.PI);
jd.Initialize(torso1, head, new b2Vec2(startX / m_physScale, (startY + 15) / m_physScale));
m_world.CreateJoint(jd);
// Upper arm to shoulders
// L
jd.lowerAngle = -85 / (180/Math.PI);
jd.upperAngle = 130 / (180/Math.PI);
jd.Initialize(torso1, upperArmL, new b2Vec2((startX - 18) / m_physScale, (startY + 20) / m_physScale));
m_world.CreateJoint(jd);
// R
jd.lowerAngle = -130 / (180/Math.PI);
jd.upperAngle = 85 / (180/Math.PI);
jd.Initialize(torso1, upperArmR, new b2Vec2((startX + 18) / m_physScale, (startY + 20) / m_physScale));
m_world.CreateJoint(jd);
// Lower arm to upper arm
// L
jd.lowerAngle = -130 / (180/Math.PI);
jd.upperAngle = 10 / (180/Math.PI);
jd.Initialize(upperArmL, lowerArmL, new b2Vec2((startX - 45) / m_physScale, (startY + 20) / m_physScale));
m_world.CreateJoint(jd);
// R
jd.lowerAngle = -10 / (180/Math.PI);
jd.upperAngle = 130 / (180/Math.PI);
jd.Initialize(upperArmR, lowerArmR, new b2Vec2((startX + 45) / m_physScale, (startY + 20) / m_physScale));
m_world.CreateJoint(jd);
// Shoulders/stomach
jd.lowerAngle = -15 / (180/Math.PI);
jd.upperAngle = 15 / (180/Math.PI);
jd.Initialize(torso1, torso2, new b2Vec2(startX / m_physScale, (startY + 35) / m_physScale));
m_world.CreateJoint(jd);
// Stomach/hips
jd.Initialize(torso2, torso3, new b2Vec2(startX / m_physScale, (startY + 50) / m_physScale));
m_world.CreateJoint(jd);
// Torso to upper leg
// L
jd.lowerAngle = -25 / (180/Math.PI);
jd.upperAngle = 45 / (180/Math.PI);
jd.Initialize(torso3, upperLegL, new b2Vec2((startX - 8) / m_physScale, (startY + 72) / m_physScale));
m_world.CreateJoint(jd);
// R
jd.lowerAngle = -45 / (180/Math.PI);
jd.upperAngle = 25 / (180/Math.PI);
jd.Initialize(torso3, upperLegR, new b2Vec2((startX + 8) / m_physScale, (startY + 72) / m_physScale));
m_world.CreateJoint(jd);
// Upper leg to lower leg
// L
jd.lowerAngle = -25 / (180/Math.PI);
jd.upperAngle = 115 / (180/Math.PI);
jd.Initialize(upperLegL, lowerLegL, new b2Vec2((startX - 8) / m_physScale, (startY + 105) / m_physScale));
m_world.CreateJoint(jd);
// R
jd.lowerAngle = -115 / (180/Math.PI);
jd.upperAngle = 25 / (180/Math.PI);
jd.Initialize(upperLegR, lowerLegR, new b2Vec2((startX + 8) / m_physScale, (startY + 105) / m_physScale));
m_world.CreateJoint(jd);
}
// Add stairs on the left, these are static bodies so set the type accordingly
bd.type = b2Body.b2_staticBody;
fixtureDef.density = 0.0;
fixtureDef.friction = 0.4;
fixtureDef.restitution = 0.3;
for (var j:int = 1; j <= 10; j++) {
box = new b2PolygonShape();
box.SetAsBox((10*j) / m_physScale, 10 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((10*j) / m_physScale, (150 + 20*j) / m_physScale);
head = m_world.CreateBody(bd);
head.CreateFixture(fixtureDef);
}
// Add stairs on the right
for (var k:int = 1; k <= 10; k++){
box = new b2PolygonShape();
box.SetAsBox((10 * k) / m_physScale, 10 / m_physScale);
fixtureDef.shape = box;
bd.position.Set((640-10*k) / m_physScale, (150 + 20*k) / m_physScale);
head = m_world.CreateBody(bd);
head.CreateFixture(fixtureDef);
}
box = new b2PolygonShape();
box.SetAsBox(30 / m_physScale, 40 / m_physScale);
fixtureDef.shape = box;
bd.position.Set(320 / m_physScale, 320 / m_physScale);
head = m_world.CreateBody(bd);
head.CreateFixture(fixtureDef);
}
//======================
// Member Data
//======================
}
}
关于C# XNA Box2d : What kind of joints for a ragdoll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263146/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!