Привет юзернайме! У меня есть загрузчик обьектов, хотелось бы через тастатуру(клавиатуру) менять подгружаемый обьект. Вот код: 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 первый раз столкнулся. Спасибо
Отформатируй код, чтобы можно было читать, для этого есть теги. И поясни, что именно тебе требуется (я не очень понял, при чем тут тастатура) UPD: ок, код я более-менее разобрал. По пунктам: LoadContent() отрабатывает один раз при запуске программы. Т.е. тут тебе нужно подгрузить весь контент, который тебе нужен (это если по-простому). Писать так: PHP: default_obj = null; default_obj = "die scheisse"; не нужно, первая строчка избыточна Вот так: PHP: 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); приличные люди тоже не делают, большинство матриц - константные, генерировать их на каждой итерации игрового цикла - 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