Это уже не хна, это просто шарп . Тогда может попробовать int вместо bool. Сейчас мне не возможно проверить, ибо я на работе, а компа под рукой нет. Попробую и твой вариант. Но, думаю, есть способ проще.
Добавлено (01.03.2013, 11:48) --------------------------------------------- Это уже не хна, это просто шарп . Тогда может попробовать int вместо bool. Сейчас мне не возможно проверить, ибо я на работе, а компа под рукой нет. Попробую и твой вариант. Но, думаю, есть способ проще.
Сначала я if и юзал. В принципе, результат такой же. Необходимо, чтобы переменная st приняла значение true до следующего события, в данном случае - что бы она после принятия значения true не менялась обратно на false.
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 Racing { class Sprite { public Texture2D spriteTexture; public Vector2 spritePosition;
//для анимации (хотя тут все спрайты не анимированы) private int frameCount; private double timeFrame; private int frame; private double totalElapsed;
//для движения public Vector2 speedSprite = new Vector2(0, -1);
KeyboardState oldState; float dx = 0; int speed = 1; public float rotation; public Vector2 center; public Vector2 velocity; KeyboardState keys; bool isRun; public Rectangle rect;
public void LoadContent(ContentManager content, String stringTexture) { spriteTexture = content.Load<Texture2D>(stringTexture);
center = new Vector2(spriteTexture.Height / 2, spriteTexture.Width / 2); }
public void Update(GameTime gameTime) { keys = Keyboard.GetState(); if (keys.IsKeyDown(Keys.Up)) isRun = true; else { isRun = false; speed = 1; dx = 0; } if (keys.IsKeyDown(Keys.A) && oldState.IsKeyUp(Keys.A)) { if (speed < 6) speed++; else speed = 2; } if (keys.IsKeyDown(Keys.Left) && isRun) { rotation -= 0.05f; } else if (keys.IsKeyDown(Keys.Right ) && isRun) { rotation += 0.05f; } if (isRun) { velocity = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)); if (speed == 1) { if (dx <= 2) dx += 0.1f; } else if (speed == 2) { if (dx <= 5) dx += 0.1f; } else if (speed == 3) { if (dx <= 8) dx += 0.1f; } else if (speed == 4) { if (dx >= 5) dx -= 0.1f; }
else if (speed == 3) { if (dx >= 8) dx -= 0.1f; } else if (speed == 2) { if (dx >= 5) dx -= 0.1f; } spritePosition += velocity * dx; } oldState = Keyboard.GetState(); }
public void DrawAnimationSprite(SpriteBatch spriteBatch) { int frameWidth = spriteTexture.Width; //frameCount; Rectangle rectangle = new Rectangle(frameWidth * frame, 0, frameWidth, spriteTexture.Height); spriteBatch.Draw(spriteTexture, spritePosition, rectangle, Color.White, 0f, center, 1,SpriteEffects.None, 0);
}
} }
Код
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 Racing { /// <summary> /// This is the main type for your game /// </summary> public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics;
ContentManager content;
SpriteBatch spriteBatch;
KeyboardState keyboardState;
public Texture2D spriteTexture; public Vector2 spritePosition;
private Texture2D fon; private Texture2D fon2;
//для движения Random rand = new Random();
//другие машинки Sprite[] sprite = new Sprite[4]; int j;
//столкновения public BoundingBox bbcar; public BoundingBox[] bb = new BoundingBox[4];
//меню Menu menu; private bool menuState; private int cursorState;
public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; content = new ContentManager(Services); graphics.PreferredBackBufferWidth = 800; graphics.PreferredBackBufferHeight = 600;
for (int i = 0; sprite.Length > i; i++) { sprite[i] = new Sprite(1, 1); }
car = new Sprite(spritePosition,spriteTexture); menu = new Menu(); menuState = true; cursorState = 1;
}
/// <summary> /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// </summary> protected override void Initialize() { // TODO: Add your initialization logic here j = 0; for (int i =0; sprite.Length > i; i++) { sprite[i].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Height), j = j + 200); } car.spritePosition = new Vector2(300, 300);
base.Initialize(); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice);
fon = Content.Load<Texture2D>("fon"); fon2 = Content.Load<Texture2D>("fon2");
menu.LoadContent(Content);
// TODO: use this.Content to load your game content here }
/// <summary> /// UnloadContent will be called once per game and is the place to unload /// all content. /// </summary> protected override void UnloadContent() { // TODO: Unload any non ContentManager content here }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { // Allows the game to exit keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Escape)) { menuState = true; } if (menuState == true) { if (keyboardState.IsKeyDown(Keys.Up)) { menu.cursorPositionGame = new Vector2(550, 30); menu.cursorPositionExit = new Vector2(520, 120); cursorState = 1; } else if (keyboardState.IsKeyDown(Keys.Down)) { menu.cursorPositionGame = new Vector2(550, 30); menu.cursorPositionExit = new Vector2(520, 120); cursorState = 2; } if (keyboardState.IsKeyDown(Keys.Enter) && cursorState == 1) { menuState = false; } else if (keyboardState.IsKeyDown(Keys.Enter) && cursorState == 2) { this.Exit(); } } else { Pause(); if (paused == false) {
double elapsed = gameTime.ElapsedGameTime.TotalSeconds; for (int i = 0; sprite.Length > i; i++) { sprite[i].UpdateFrame(elapsed); }
public void Collisions() { bbcar.Min = new Vector3(car.spritePosition.X, car.spritePosition.Y, 0); bbcar.Max = new Vector3(car.spritePosition.X + car.spriteTexture.Width, car.spritePosition.Y + car.spriteTexture.Height, 0);
for (int i = 0; bb.Length > i; i++) { bb[i].Min = new Vector3(sprite[i].spritePosition.X, sprite[i].spritePosition.Y, 0); bb[i].Max = new Vector3(sprite[i].spritePosition.X + sprite[i].spriteTexture.Width, sprite[i].spritePosition.Y + sprite[i].spriteTexture.Height, 0); } if (bbcar.Intersects(bb[0])) { sprite[0].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width - 0 - sprite[0].spriteTexture.Width), 50); } if (bbcar.Intersects(bb[1])) { sprite[1].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width - 0 - sprite[1].spriteTexture.Width), 50); } if (bbcar.Intersects(bb[2])) { sprite[2].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width - 0 - sprite[2].spriteTexture.Width), 50); } if (bbcar.Intersects(bb[3])) { sprite[3].spritePosition = new Vector2(rand.Next(10, Window.ClientBounds.Width - 0 - sprite[3].spriteTexture.Width), 50); } }
/// <summary> /// This is called when the game should draw itself. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); if (menuState == true) { spriteBatch.Begin(); menu.DrawMenu(spriteBatch, cursorState); spriteBatch.End(); } else {
spriteBatch.Begin(); spriteBatch.Draw(fon, new Vector2(0, 0), Color.AliceBlue); //car.DrawCar(spriteBatch); for (int i = 0; sprite.Length > i; i++) { sprite[i].DrawAnimationSprite(spriteBatch); }
car.DrawAnimationSprite(spriteBatch); spriteBatch.Draw(fon2, new Vector2(0, 0), Color.AliceBlue); spriteBatch.End(); }
// TODO: Add your drawing code here
base.Draw(gameTime); } } }
Маленько переделал, но теперь этот долбаный кар1 не едет в ту сторону, которую надо - нажимаешь Up, а он вправо. И поворачивается не так , как надо, а вокруг непонятного центра, на вроде спутника.
Добавлено (22.02.2013, 19:57) --------------------------------------------- Ну я и идиот , понял, в чем косяк с поворотом. Надо было в этой строчке
Цитата (Amri)
spriteBatch.Draw(spriteTexture, spritePosition, rectangle, Color.White, 0f, center, 1,SpriteEffects.None, 0);
заменить 0f на rotation. Получило, что я поворот заблокировал. А теперь все норм
Добавлено (01.03.2013, 01:01) --------------------------------------------- Думаю, что нет смысла создавать новую тему, поэтому спрошу здесь.
Есть такая проблема. Имеется вот такой код
Код
st = false; //это изначальное значение if (/*тут какое-то событие*/) { st = true; // переменная принимает это значение } switch (st) { case false: //тут какие-то действия, не суть break;
case true: //тут тоже некие действия break; }
Так вот, как сделать так, что бы переменная st не меняла своего значения после выхода из цикла? То есть, что бы после события она осталась true, а не перекидывалась обратно в false. Но что бы до события она осталась false.
Сообщение отредактировал Amri - Четверг, 21 Февраля 2013, 17:14
Undead, решил последовать твоему совету. Закачал это стартер кит. Его размер 127.52 мб. Прождал 5 с половиной часов (!). Благ у меня дела были. Вот загрузилась она, запустил, и что я вижу?! "У вас несоответствующая версия XNA и Visual C#"!!! Е му требется хна 3.0 и VC# 2008. А у меня стоит хна 4.0 и VC# 2010. АААА!!! Это немного печально
Stalker_Shooter, все в процессе и обижаться тут не на что. Я все еще изучаю шарп. Но знания алгебры у меня имеются. А вот с мат анализом у меня проблемы.
Добавлено (27.02.2013, 23:33) --------------------------------------------- Undead, как одна моя знакомая пришла у чится в универ, а там ей говорят - "Мы что, вас учить будем? Вам надо, вы и учитесь" И это говорят преподаватели.
sem6666, а зачем использовать модели в двумерных играх? На том же юнити можно и двумерные игры со спрайтами делать. И вообще, как по мне, лучше делать делать приставочные игры с сохранением атмосферы. То есть очень похожими на оригинал.
Stalker_Shooter, я просто неправильно выразился. Просто в моем понимании понимать код - это писать на нем, не бездумно сдирая с тутора, а зная, что делает та или иная функция, класс и тд.
Stalker_Shooter, про химию и хирурга - не совсем так) ему по любому химия нужна.
Но про алгебру я склонен не совсем согласится. Потому, что сам не особо шарю в ней, но код понимаю лучше) Но без основ далеко не уйдешь. Вот никак без них.
Из моего опыта. Про обучение конечно, что не совсем в тему, но все таки. Вот я когда поступал в универ, на инженера-электрика, приходилось учить даже философию и экономику. Вот и на кой пес они нужны? или углубленный курс биологии? Тоже никчему. Недавно смотрел , ну тоже на программиста пойти хотел, посмотрел, какие предметы будут изучатся. В итоге - всякий бред, а под конкретно программирование - так толком ничего и не отводится. Подумал я и решил - нафиг оно мне не нужно. Вот так то :). Прошу учесть, что данный пост является моим субьективным мнением.
nuPATEXHuK, но, по моему, что бы сохранить атмосферу старых добрых игр с приставок, не нужно заморачиваться с моделями и зд супер графикой. И как это будет работать на слабых машинах?
JeromKid, попробуй погглить учебники по высшей математике для вузов. Я помню, в учебнике было что-то такое. Но авторов я, к сожалению, не помню в общем , гугли в этом направлении
ЭЙ НАРОД!!! ИГРОДЕЛЫ! ВСЕ ВЕДУТСЯ НА ФАП?! Да вы капец.
Ладно, тогда будет такое: Форум ФАПОВЩИКОВ! и тут один - а давайте пообсуждаем игры.
Вот и тут такая же реакция. Вот вам уже реально делать нечего, как пиписьками мерятся и считают кол-во фапчи. Ладно, пойдем дальше: "А давайте у кого дальше стрельнет?!" или " У кого быстрей встает?"
сначала постебался, а потом.... Чуваки, забейте, а?