Форум » Вопросы о разработке игр » Основы для создания двух мерной игры в XNA Game Studio » Ответить

Основы для создания двух мерной игры в XNA Game Studio

viewsonic1: Доброго дня всем! Скажите пожалуйста какие есть способы для поворота спрайта? Если можно, то объясните по подробнее. И как можно добиться чтобы при управлении спрайтом, он двигался в ту сторону в которую направлен? С уважением, Виталий!

Ответов - 5

viewsonic1: Нашёл один способ поворота спрайта, но в нём не всё ещё понятно! Скажите пожалуйста как можно регулировать скорость поворота спрайта в этом примере? С уважением, Виталий! namespace rotation { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; KeyboardState keyboardState; Texture2D texture; Vector2 position; Vector2 origin; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content/Texture"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); texture = Content.Load<Texture2D>("sprite"); Viewport viewport = graphics.GraphicsDevice.Viewport; origin.X = texture.Width / 2; origin.Y = texture.Height / 2; position.X = viewport.Width / 2; position.Y = viewport.Height / 2; } protected override void UnloadContent() { } private float RotationAngle = 0f; protected override void Update(GameTime gameTime) { keyboardState = Keyboard.GetState(); float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; if (keyboardState.IsKeyDown(Keys.D)) { RotationAngle += elapsed; } if (keyboardState.IsKeyDown(Keys.A)) { RotationAngle -= elapsed; } base.Update(gameTime); } protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(texture, position, null, Color.White, RotationAngle, origin, 1.0f, SpriteEffects.None, 0f); spriteBatch.End(); base.Draw(gameTime); } } }

netlib: Скорость поворота регулируется в методе Update. Используйте вместо float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; следующий код float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds * speed; Присвойте переменной speed значение в диапазоне от 0 до 1. Чем больше значение, тем выше скорость.

viewsonic1: Огромное спасибо netlib! И ещё один вопрос можно? Как сделать чтобы при движении спрайт двигался в ту сторону, в которую направлен? Я знаю что надо создать вектор направления и вращяь вместе с этим спрайтом и для движения складывать позицию и этот вектор. Не подскижите ли как это зписать! Заранее спасибо!


stayer: if (timer < TIME_MOVE) { float f = timer / all_time_move; pos = pos_begin * (1 - f) + pos_end * f; timer += delta_time; } else { pos = pos_end; }

viewsonic1: Огромное спасибо, всё работает!



полная версия страницы