موضوع: كيفية برمجة أطلاق الصواريخ وتحريكها في xna

ردود: 3 | زيارات: 3000
  1. #1
    عضو متميز
    صور رمزية omarzonex
    تاريخ التسجيل
    Jan 2009
    المنطقة
    نبض قلبي- فلسطين
    ردود
    6,682

    كيفية برمجة أطلاق الصواريخ وتحريكها في xna

    الدرس الخامس :


    اليكم الدرس الخامس من دروس xna
    ارجو ان تجربوا الكود مع كيفية استخدام المصطلحات البرمجية في xna


    ارجو ان تعملوا نسخ ولصق هذا الكود على البرنامج visual studio xna game edition
    لكي يكون واضح الشرح ويجب تجربته ويجب ادخال الصور الى البرنامج لكي يتم عمله بالشكل الصحيح


    هذا الملف مثال عليه لأختصار الوقت
    http://rapidshare.com/files/29411636...Game1.rar.html

    وهذا ملف الصور :
    http://rapidshare.com/files/29411770...mages.rar.html


    وايه أستفسار انا جاهز دوماً ........


    كود:
    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; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage;
    namespace Missile_Action { public class Missile { /// <summary> /// في الموضوع ده نتحدث عن موضوع كيفية أطلاق صاروخ او رصاصة /// وكيفية استخدام الأحداثيات في موضع الكائن المراد اطلاقه /// طريقة سهلة جداً وهي غالباً ما يستخدمها المبرمجون في العابهم /// الثنائية البعد ارجو ان يكون الدرس سهل الأستيعاب /// ضروري استخدام تجربة من عندك حتلاحظ فرق في ادخال المعلومة بشكل /// سهل ومنظم ,,,,,اتركم مع هذا الدرس المفيد /// </summary> /// // هنا نضع متغير الكائن المراد اطلاقها public Texture2D Texture; /// <summary> /// هنا نضع متغير احداثيات الكائن مكانه على الشاشة /// تذكر دائماً الأحداثيات المستخدمة ثنائي البعد في هذا الدرس /// نستخدم vector2 للمتجه الثنائي /// </summary> /// public Vector2 Position; /// <summary> ///هنا نحدد اتجاه المتغير او الكائن على الشاشة ويكون له قيمة واحد 1 /// </summary> public Vector2 Direction; /// <summary> /// هنا نحدد زاوية ميل للكائن قبل اطلاقه /// </summary> public float Rotation; // هنا نكتب الكود زاوية ميلانه واتجاه في الشاشة public Missile() { // نحدد زاوية ميلانه صفر لأنطلاقه من المركبة او مكان اطلاقه في القاعدة مثلاً this.Rotation = 0; // نحدد مساره او اتجاه في زاوية الشاشة على اليسار وهو مكان البدء // x حيث محور الأحداثي الكائن هو // يأخذ القيمة واحد // y ومحور الأحداثي // يأخذ القيمة صفر // (x , y ) // @@@ - - - - - -> X = 1 // | // Y = 0 // this.Direction = new Vector2(1, 0); } public void Update(GameTime gameTime) { // تحديث موضع كل حركة لمؤقت يستخدم بالثواني this.Position += Vector2.Multiply(this.Direction, (float)gameTime.ElapsedGameTime.TotalSeconds * 200); } public void Draw(SpriteBatch _spriteBatch) { // هنا يتم رسم او أظهار الكائن على الشاشة _spriteBatch.Draw( this.Texture, this.Position, null, Color.White, this.Rotation, Vector2.Zero, Vector2.One, SpriteEffects.None, 0); } } // هنا يتم كتابة كلاس بتاعة المركبة او القاعدة المحملة بها الصاروخ public class Et { /// <summary> /// هنا نقوم بكتابة المتغير للكائن المركبة اسمه شبيه بأسم الصاروخ اذا كنت تريد ذلك /// </summary> public Missile Missile; /// <summary> /// هنا يتم اعلان عن متغير الكائن للصورة المركبة /// </summary> public Texture2D Texture; /// <summary> /// هنا يتم كتابة موضع المركبة /// يجب عليك كتابة متغير للمتجة الثنائي لتحديد موضعه على الشاشة /// </summary> public Vector2 Position; /// <summary> /// لعمل دوران للكائن وهو المركبة مثلاً /// </summary> private float rotation; /// <summary> /// Direction that the Et is looking, this vector always will be normalized /// and it will have the intensity with value 1. /// </summary> private Vector2 direction; public Et() { // نحدد زاوية ميلانه صفر لأنطلاقه من المركبة او مكان اطلاقه في القاعدة مثلاً // نضع للكائن لكي نحجزله مكان للذاكرة لأطلاق عدة صواريخ // نحدد مساره او اتجاه في زاوية الشاشة على اليسار وهو مكان البدء // x حيث محور الأحداثي الكائن هو // يأخذ القيمة واحد // y ومحور الأحداثي // يأخذ القيمة صفر // (x , y ) // @@@ - - - - - -> X = 1 // | // Y = 1 this.rotation = 0; this.Missile = new Missile(); this.direction = new Vector2(1, 1); } /// <summary> /// يتم هنا كتابة الكود ليتم اطلاقه لدى اتجاه معين /// </summary> public Vector2 Direction { get { return this.direction; } } /// <summary> /// The Rotation of the Et will be modified only by this property. An angle will be received /// and will be obtained the Direction of the Et. /// </summary> public float Rotation { get { return this.rotation; } set { //TwoPi يتم هنا تحديد دورانه بزاوية معينة من صفر وزاوية نصف القطر this.rotation = MathHelper.Clamp(value, 0, MathHelper.TwoPi); if (this.rotation == 0) { this.rotation = MathHelper.TwoPi; } else if (this.rotation == MathHelper.TwoPi) { this.rotation = 0; } /* The methods Math.Cos and Math.Sin receive how parameter * the angle being in radians * */ // بزاوية رديانRadian على الترتيب x,y طريقة حسابات جيب الزاوية وجيب الزاوية تمام في الأحداثيات this.direction.X = (float)Math.Cos(this.rotation); this.direction.Y = (float)Math.Sin(this.rotation); } } // يتم هنا اعلان عن كتابة الكود المسؤول عن الأطلاق في اتجاه وموقع وزاوية عند منتصف الكائن public void Attack() { this.Missile.Direction = this.direction; this.Missile.Position = this.Position; this.Missile.Rotation = this.rotation; } // وهو المسؤول عن رسم الكائن spritebatch هنا يتم رسم الكود للكائن المركبة وأعلان عنه بداية ب public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw( this.Texture, this.Position, null, Color.White, this.rotation, new Vector2(0, 0), 1f, SpriteEffects.None, 0); } } public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; // الأعلان عن متغير وهو الكائن المراد تحريكه Et et; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; this.Window.Title += "كيفية برمجة أطلاق الصواريخ على موقع معين "; } protected override void Initialize() { // يتم هنا كتابة الكود للمتغير للتحديثه عند كل حركة this.et = new Et(); base.Initialize(); } protected override void LoadContent() { // كتابة الكائن المسؤول عن تحكم ادخال الصور على الشاشة spriteBatch = new SpriteBatch(GraphicsDevice); // يتم هنا تحميل الكائن الصورة للمركبة this.et.Texture = this.Content.Load<Texture2D>("ET"); // كتابة تحميل صورة الكائن المراد أطلاقه وهو الصاروخ this.et.Missile.Texture = this.Content.Load<Texture2D>("Missile"); } protected override void Update(GameTime gameTime) { //كتابة متغير للتحكم بالكيبورد KeyboardState kb = Keyboard.GetState(); // يتم هنا كود المسؤول عن توقيت حركة الكائن اينما وجد لكل ثانية float time = (float)gameTime.ElapsedGameTime.TotalSeconds; // لأطلاق الصاروخ space يتم الضغط على مسافة وهي if (kb.IsKeyDown(Keys.Space)) { this.et.Attack(); } // يتم هنا تحريك المركبة بموقع معين في اتجاه معين على المؤشر الأيمن او على اليمين لكل 200 ثانية if (kb.IsKeyDown(Keys.Right)) { this.et.Position += Vector2.Multiply(et.Direction, time * 200); } // يتم هنا تحريك المركبة بموقع معين في اتجاه معين على المؤشر الأيسر لكل 200 ثانية if (kb.IsKeyDown(Keys.Left)) { this.et.Position -= Vector2.Multiply(et.Direction, time * 200); } // للتحكم بدورانه بسرعة محددة يجب أضافة موجب لزيادة الدوران 360درجة up يتم الضغط على الأب او الأعلى if (kb.IsKeyDown(Keys.Up)) { this.et.Rotation += time * 1f; } // للتحكم بدورانه بسرعة محددة وذلك بعكس الأحداثيات بالسالب بزاوية دوران عكس 360 درجة down يتم الضغط على الأسفل او المؤشر if (kb.IsKeyDown(Keys.Down)) { this.et.Rotation -= time * 1f; } //يتم هنا كتابة تحديث اخراج الصاروخ لكل ضغطة او أطلاقة this.et.Missile.Update(gameTime); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { //يتم هنا رسم كامل الشاشة باللون الأزرق حسب الرغبة this.graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // كتابة رسم الكائن بأستخدام الدالة وبأمكان تحديد شفافيته على الشاشة spritebatch this.spriteBatch.Begin(); this.et.Draw(this.spriteBatch); this.et.Missile.Draw(this.spriteBatch); this.spriteBatch.End(); base.Draw(gameTime); } } }



  2. #2
    جزاك الله خيرا, ممكن رابط البرنامج

  3. #3
    عضو متميز
    صور رمزية The MAS
    تاريخ التسجيل
    Apr 2009
    المنطقة
    Amman, Jordan, Jordan
    العمر
    24
    ردود
    2,132
    والله يا ريت يا أخ عمر ....إنك تحط موضوع جديد و تحط فيه روابط لكل دروسك ...لعله يتثبت أو ينحط في المواضيع المميزة

    <<Nobody>> سابقاً

Bookmarks

قوانين الموضوعات

  • لا يمكنك اضافة موضوع جديد
  • لا يمكنك اضافة ردود
  • لا يمكنك اضافة مرفقات
  • لا يمكنك تعديل مشاركاتك
  •  
  • كود BB مفعّل
  • رموز الحالة مفعّل
  • كود [IMG] مفعّل
  • [VIDEO] code is مفعّل
  • كود HTML معطل