游戏引擎组件问题

时间:2017-03-11 09:42:06

标签: c# game-engine gdi+

我目前正在使用C#中的GDI +开发游戏引擎。目前我正在实施组件。组件可以附加到游戏对象。游戏对象呈现给屏幕,屏幕显示在窗口/表单上。

在继续之前,请看一下GameObject类中的这几行:

    private List<Component> components = new List<Component>();

    public GameObject()
    {
        AddComponent(new Transform());
    }

    public void Update(GameTime gameTime)
    {
        components.ForEach(c => c.OnUpdate(gameTime));
    }

    public void Render(GraphicsEngine graphicsEngine)
    {
        components.ForEach(c => c.OnRender(graphicsEngine));
    }

    public void AddComponent(Component component)
    {
        component.gameObject = this;
        components.Add(component);
    }

    public T GetComponentOfType<T>() where T : Component
    {
        return (T)GetComponentOfType(typeof(T));
    }

    private Component GetComponentOfType(Type type)
    {
        for (int i = 0; i < components.Count; i++)
            if (components[i].GetType() == type)
                return components[i];

        return null;
    }

    public Transform Transform
    {
        get { return GetComponentOfType<Transform>(); }
    }

现在希望当我向您展示下一段代码时,事情可能会更加清晰。

基本上,我有一个从XML文件加载一堆游戏对象的方法。但由于某种原因,取决于我将精灵组件添加到游戏对象的方式,有时它不能正常工作,只有一些游戏对象精灵渲染到屏幕

以下是加载游戏对象的方法的部分代码:

 // Creates the object and sets the position
 GameObject obj = new GameObject();
 obj.Transform.Position = new Maths.Vector2(x * map.TileWidth, y * map.TileHeight);

 // This works and renders all sprites to the screen
// obj.AddComponent(new SpriteComponent(sprs[sprID].Bitmap));

// This works and renders all sprites to the screen
// obj.AddComponent(new SpriteComponent());
// obj.GetComponentOfType<SpriteComponent>().Bitmap = sprs[sprID].Bitmap;

 // This doesn't work and only renders some sprites to the screen
 obj.AddComponent(sprs[sprID]);

 // Adds the game object to the screen
 screen.AddGameObject(obj);

只是澄清一下,sprs是一个精灵组件列表

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

好的 - 最可能的解释是AddComponent在将游戏对象添加到列表之前将对游戏对象的引用放入组件中,但是我猜测你的sprs []数组构造没有 - 很难说没有所有的代码。