[XNA] Präzise Kollisionsabfrage (2D)

  • Bei mir funktioniert der Code leider nicht. Ich bekomme ab dem ersten { im Update-Teil eine Fehlermeldung. Was ist denn falsch? Habe ich etwas vergessen?




















    namespace WindowsGame



    {



    public class Game1 : Microsoft.Xna.Framework.Game



    {




    GraphicsDeviceManager graphics;




    SpriteBatch spriteBatch;




    Texture2D texture;




    Vector2 enemyPos;




    Color[] col1d;




    Color[,] col2d;






    public Game1()




    {




    graphics = new GraphicsDeviceManager(this);




    Content.RootDirectory = "Content";




    }






    protected override
    void Initialize()




    {






    base.Initialize();




    }






    protected override
    void LoadContent()




    {




    spriteBatch = new SpriteBatch(GraphicsDevice);




    texture = Content.Load<Texture2D>("Resetti");




    }






    protected override
    void UnloadContent()




    {







    }






    protected override
    void Update(GameTime
    gameTime)




    {




    Color[,] Tex2colArr(Texture2D
    texture)




    {




    Color[] col1d = new Color[texture.Width
    * texture.Height];




    texture.GetData(col1d);






    Color[,] col2d = new Color[texture.Width,
    texture.Height];




    for (int
    x = 0; x < texture.Width; x++)



    for
    (int y = 0; y < texture.Height; y++)



    col2d[x, y] = col1d[x + y *
    texture.Width];






    return col2d;




    }








    bool CheckCollision(Color[,] col)




    {




    MouseState ms = Mouse.GetState();




    Matrix mat = Matrix.CreateTranslation(enemyPos.X,
    enemyPos.Y, 0) * Matrix.Identity;








    if (ms.X >= enemyPos.X &&
    ms.X <= enemyPos.X + texture.Width &&



    ms.Y >=
    enemyPos.Y && ms.Y <= enemyPos.Y + texture.Height)




    {



    for
    (int x = 0; x < col2d.GetLength(0); x++)



    for
    (int y = 0; y < col2d.GetLength(1); y++)



    {



    Vector2 pos = Vector2.Transform(new Vector2(x, y),
    mat);



    if (pos == new Vector2(ms.X, ms.Y))



    if (col[x, y].A > 0)



    {



    return true;



    }



    else



    {



    return false;



    }



    }




    }




    return false;




    }









    base.Update(gameTime);




    }






    protected override
    void Draw(GameTime gameTime)




    {




    GraphicsDevice.Clear(Color.CornflowerBlue);






    base.Draw(gameTime);




    }



    }



    }

  • Der Code ist sehr schwer zu lesen. Benutz bitte das nächste mal die BBCode [ cs ] Blöcke (ohne leerzeichen in der klammer).
    Ich hab jetzt nur kurz nen Blick auf die Update Funktion geworfen und da deklarierst du ein paar Funktionen. Du musst die Funktion außerhalb der Update Methode deklarieren. Nur die Logik, also Funktionenaufrufe kommen dann in die Update Funktion.