بســم الله الـرحمــن الرحيــم الدرس الخامس عشر أهلا بكم في الدرس الخامس عشر من سلسلة دروس تعلم الXna ، في هذا الدرس سوف أقوم بالشرح عن مصفوفات التحويل “Transformation” ثنائية الأبعاد. في هذا الدرس، سوف نرى كيف بإمكاننا إستخدام الدالة TexturesCollide، التي قمنا بإنشاءها في الدرس السابق. من تعريف الدالة، نستطيع ان نستدل أنه يلزمنا مصفوفة ألوان ثنائية الأبعاد إضافة إلى مصفوفة التحويل للصورتين. دعنا نبدأ بمصفوفة الألوان ثنائية الأبعاد. بما أننا سوف نستخدم الدالة TexturesCollide بشكل متكرر، سوف نقوم بإستخراج المصفوفة الخاصة بالصورة لمرة واحدة بإستخدام الدالة Textureto2DArray، و نقوم بتخزينها في متغير. إبدأ بإضافة المتغيرات التالي إلى أعلى الكود:
Color[,] rocketColorArray; Color[,] foregroundColorArray; Color[,] carriageColorArray; Color[,] cannonColorArray;
rocketColorArray = TextureTo2DArray(rocketTexture); carriageColorArray = TextureTo2DArray(carriageTexture); cannonColorArray = TextureTo2DArray(cannonTexture);
foregroundColorArray = TextureTo2DArray(foregroundTexture);
Matrix foregroundMat = Matrix.Identity;
Matrix carriageMat = Matrix.CreateTranslation(0, -carriage.Height, 0) * Matrix.CreateScale(playerScaling) * Matrix.CreateTranslation(xPos, yPos, 0) * Matrix.Identity;
Matrix carriageMat = Matrix.CreateTranslation(0, -carriage.Height, 0) * Matrix.CreateScale(playerScaling) * Matrix.CreateTranslation(xPos, yPos, 0(;
Matrix rocketMat = Matrix.CreateTranslation(-42, -240, 0) * Matrix.CreateRotationZ(rocketAngle) * Matrix.CreateScale(rocketScaling) * Matrix.CreateTranslation(rocketPosition.X, rocketPosition.Y, 0);
spriteBatch.Draw(cannon, new Vector2(xPos + 20, yPos - 10), null, player.Color, player.Angle, cannonOrigin, playerScaling, SpriteEffects.None, 1);
Matrix cannonMat = Matrix.CreateTranslation(cannonOrigin) * Matrix.CreateRotationZ(player.Angle) * Matrix.CreateScale(playerScaling) * Matrix.CreateTranslation(xPos + 20, yPos - 10, 0);