• 0

كيف أضبط مقاس النافذة عند إعادة الإظهار باستخدام #ّّC؟

لدي تطبيق سطح مكتب على لغة #C، والمشكل الذي أواجه أن مقاس النافذة لا يبقى على حاله عند تصغيره بعد إخفاء النافذة وإظهارها من جديد، ولا أدري ما الذي يحدث بالضبط؟

إليكم لمحة حول الكود البرمجي المستعمل في التطبيق:

طريقة Draw :

public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
    // تموضع المكونات 
    spriteBatch.Draw(textureImage, position, new Rectangle(
    (currentFrame.X * frameSize.X),
    (currentFrame.Y * frameSize.Y),
    frameSize.X, frameSize.Y),
    Color.White, 0, Vector2.Zero, 2, SpriteEffects.None, 0);
}

حساب مسافات الموقع:

//  للتموضع Vector2 استعمال

public PlayerMovement(Texture2D textureImage, Vector2 position, Point frameSize, int collisionOffSet, Point currentFrame, Point startFrame, Point sheetSize, float speed, float speedMultiplier, float millisecondsPerFrame)
        : base(textureImage, position, frameSize, collisionOffSet, currentFrame, startFrame, sheetSize, speed, speedMultiplier, millisecondsPerFrame)
{
        children = new List<Sprite>();
}

فكيف يمكنني المحافظة على مقاس النافذة وأماكن مكوناتها حتى بعد إخفاءها وإظهارها من جديد؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

من خلال تجربتي في التعامل مع تطبيقات سطح المكتب بـ #C، أريد القول بأن استعمال:

Game.Window.ClientBounds

قد يعرضك لبعض المشاكل عند الإنقاص  من مقاس النافذة، لذا أقدم لك هذه الشفرة من تطبيق سابق لي:

Rectangle gdm = Game.Window.ClientBounds;
if (DrawLocation.X < 0) DrawLocation = new Vector2(0, DrawLocation.Y);
if (DrawLocation.Y < 0) DrawLocation = new Vector2(DrawLocation.X, 0);
if (DrawLocation.X > gdm.Width - DrawAreaWithOffset.Width) DrawLocation = new Vector2(gdm.Width - DrawAreaWithOffset.Width, DrawLocation.Y);
if (DrawLocation.Y > gdm.Height - DrawAreaWithOffset.Height) DrawLocation = new Vector2(DrawLocation.X, gdm.Height - DrawAreaWithOffset.Height);

أيضا  ستتفادى مشاكل الواجهة عن طريق تعيين width و hieght 'الطول والعرض':

Rectangle gdm = Game.Window.ClientBounds;
if (gdm.Width > 0 && gdm.Height > 0) //protect when window is minimized
{
    if (DrawLocation.X < 0)
        DrawLocation = new Vector2(0, DrawLocation.Y);
    if (DrawLocation.Y < 0)
        DrawLocation = new Vector2(DrawLocation.X, 0);
    if (DrawLocation.X > gdm.Width - DrawAreaWithOffset.Width)
        DrawLocation = new Vector2(gdm.Width - DrawAreaWithOffset.Width, DrawLocation.Y);
    if (DrawLocation.Y > gdm.Height - DrawAreaWithOffset.Height)
        DrawLocation = new Vector2(DrawLocation.X, gdm.Height - DrawAreaWithOffset.Height);
}

وكمرجع يمكنك رؤية  الرابط.

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن