1. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Привет юзернайме!
    У меня есть загрузчик обьектов, хотелось бы через тастатуру(клавиатуру) менять подгружаемый обьект.
    Вот код:
    Code:
    using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media;   namespace WindowsGame1 {      public class Game1 : Microsoft.Xna.Framework.Game     {          GraphicsDeviceManager graphics;         SpriteBatch spriteBatch;         Vector3 pos;         Model Face;         Matrix worldMatrix;         Matrix viewMatrix;         Matrix projectionMatrix;         string default_obj = "monkey";         float check = 0.01f;          public Game1()         {              graphics = new GraphicsDeviceManager(this);             Content.RootDirectory = "Content";             this.Window.Title = "My Test of the Objectloader with Rotation";             graphics.PreferredBackBufferWidth = 900;             graphics.PreferredBackBufferHeight = 700;           }          //Initialiesierung         protected override void Initialize()         {             base.Initialize();         }          //Load von Objekt    //Грузим Обьект          protected override void LoadContent()         {             KeyboardState Taste = Keyboard.GetState();             //Выход  Ausgang              //Переключаем обьекты             if (Taste.IsKeyDown(Keys.Down))             {                 default_obj = null;                 default_obj = "monkey";                 spriteBatch.Dispose(); //Убиваем                LoadContent();             }             if(Taste.IsKeyDown(Keys.Left))             {                 default_obj = null;                 default_obj = "sphere_16seg_16rings_0.2rad";                 spriteBatch.Dispose();                 LoadContent();             }             spriteBatch = new SpriteBatch(GraphicsDevice);             Face = Content.Load<Model>(default_obj);                     }          //Update         protected override void Update(GameTime zeit)         {                          KeyboardState Taste = Keyboard.GetState();             // Крутяшка             if (Taste.IsKeyDown(Keys.Escape))                 this.Exit();             if (Taste.IsKeyDown(Keys.Add))             {                 check += 0.001f;             }             if (Taste.IsKeyDown(Keys.Subtract))             {                 check -= 0.001f;             } if (Taste.IsKeyDown(Keys.Space))             {                                  check = 0f;             }             pos.Y += check;             worldMatrix = Matrix.CreateRotationY(pos.Y) * Matrix.CreateTranslation(new Vector3(1.0f, 1.0f, 1.0f));             viewMatrix = Matrix.CreateLookAt(new Vector3(10.0f, 10.0f, 10.0f), new Vector3(1.0f, 1.0f, 1.0f), Vector3.Up);             projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(10.0f), 800.0f / 600.0f, 1.0f, 100.0f);              base.Update(zeit);         }           //Draw                     protected override void Draw(GameTime zeit)         {             graphics.GraphicsDevice.Clear(Color.CornflowerBlue);              foreach (ModelMesh mesh in Face.Meshes)             {                 foreach (BasicEffect effect in mesh.Effects)                 {                     // Beleuchtung    Освещение                     effect.EnableDefaultLighting();                     effect.World = worldMatrix;                     effect.View = viewMatrix;                     effect.Projection = projectionMatrix;                 }                                  mesh.Draw();              }              base.Draw(zeit);         }     } }
    Переключатель впихнул в функцию LoadContent() , но судя по всему нужно убивать старый евент лоадер и заново рисовать.
    Будьте добры - откорректируйте, с XNA первый раз столкнулся.
    Спасибо
     
    #1 Spot, 29 May 2011
    Last edited by a moderator: 30 May 2011
  2. Bers

    Bers Member

    Joined:
    17 May 2010
    Messages:
    78
    Likes Received:
    30
    Reputations:
    26
    Отформатируй код, чтобы можно было читать, для этого есть теги.
    И поясни, что именно тебе требуется (я не очень понял, при чем тут тастатура)

    UPD: ок, код я более-менее разобрал. По пунктам:

    LoadContent() отрабатывает один раз при запуске программы. Т.е. тут тебе нужно подгрузить весь контент, который тебе нужен (это если по-простому).

    Писать так:
    PHP:
    default_obj null;
    default_obj "die scheisse";
    не нужно, первая строчка избыточна

    Вот так:
    PHP:
    worldMatrix Matrix.CreateRotationY(pos.Y) * Matrix.CreateTranslation(new Vector3(1.0f1.0f1.0f));
    viewMatrix Matrix.CreateLookAt(new Vector3(10.0f10.0f10.0f), new Vector3(1.0f1.0f1.0f), Vector3.Up); 
    projectionMatrix Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(10.0f), 800.0f 600.0f1.0f100.0f); 
    приличные люди тоже не делают, большинство матриц - константные, генерировать их на каждой итерации игрового цикла - es ist nicht gut.

    Если я угадал, и тебе нужно переключать текстуру по нажанию кнопки - все просто

    PHP:
    Texture2D texA;
    Texture2D texB;
    Textture2D activeTexture;

    void LoadContent()
    {
      
    texA Content.Load<Texture2D>("texA");
      
    texB Content.Load<Texture2D>("texA");
      
    activeTexture texA;
    }

    void Update(GameTime zeit)
    {
      
    KeyboardState die_taste Keyboard.GetState();
      if(
    die_taste.IsKeyDown(Keys.Down))
      {
        
    activeTexture texA;
      }

      if(
    die_taste.IsKeyDown(Keys.Up))
      {
        
    activeTexture texB;
      }
    }


    Удачи и помни - Kennerschaft macht frei
     
    #2 Bers, 29 May 2011
    Last edited: 29 May 2011
  3. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Спасибо.
    Правда мне нужно было Model , но суть ясна.
    Vielen Dank.