Farseer物理引擎...你好世界...?

3

我不知道为什么,但我似乎找不出这个东西为什么不起作用的原因……

我试图做一些非常简单的东西,比如只是从屏幕上掉下来的东西。

似乎使用了最新的下载和网站上的第一个示例代码,但还是有问题。

我有以下代码:

using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Collections;
using Microsoft.Xna.Framework.Input;
using FarseerPhysics.Dynamics;
using FarseerPhysics.Collision.Shapes;


namespace Cross {
    public class Game1 : Microsoft.Xna.Framework.Game {
        GraphicsDeviceManager graphics;

        public Game1() {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";

            graphics.IsFullScreen = false;
            graphics.PreferredBackBufferHeight = 600;
            graphics.PreferredBackBufferWidth = 1200;

            this.Window.Title = "Game";
        }


        protected override void Initialize() {
            World world = new World(Vector2.Zero);

            Body myBody = world.CreateBody();
            myBody.BodyType = BodyType.Dynamic;

            CircleShape circleShape = new CircleShape(0.5f);
            Fixture fixture = myBody.CreateFixture(circleShape);

            base.Initialize();
        }

        protected override void LoadContent() {

        }

        protected override void UnloadContent() {
        }


        protected override void Update(GameTime gameTime) {
            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime) {
            base.Draw(gameTime);
        }
    }
}

但我收到了2个错误:

没有CreateBody()方法(虽然有一个AddBreakableBody()方法)

'FarseerPhysics.Dynamics.World' does not contain a definition for 'CreateBody' and no extension method 'CreateBody' accepting a first argument of type 'FarseerPhysics.Dynamics.World' could be found (are you missing a using directive or an assembly reference?)

CircleShape构造函数需要2个参数(这很容易,但示例中仍有错误)

'FarseerPhysics.Collision.Shapes.CircleShape' does not contain a constructor that takes 1 arguments

我尝试了很多方法,但不明白为什么我无法获得这个。这段代码对于其他人有效吗?我的dll文件出了问题吗?

1个回答

3

他们的例子是错误的,你是正确的!(我很惊讶他们犯了如此明显的错误。)

进入CircleShape类中,查看参数顺序。一个圆由位置和半径定义,不仅仅是半径。

然后搜索项目中的CreateBody()方法,看应该从哪里调用它。


2
啊,也许是FarseerPhysics.Factories.BodyFactory.CreateBody() - Mark Lalor
1
我还建议下载XNA Testbed示例,因为它们展示了如何使用某些方法:http://farseerphysics.codeplex.com/releases/view/64108。您还可以通过浏览源代码中的“示例”部分获取更多代码示例:http://farseerphysics.codeplex.com/SourceControl/changeset/view/88395。 - keyboardP
@keyboardp 非常感谢!第二个链接给了我一些源代码,帮助了我很多。 - Mark Lalor
是的,看起来文档已经过时了。Body factory在最新版本(3.5)中解决了这个问题。请注意,文档中记录的版本是3.3,我认为这对于代码的如此巨大变化来说还为时过早... - Serguei Fedorov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接