首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

WPF/Silverlight 遊戲開發教程 (二十三-2):等比例縮放模式 — 二十幾行代碼實現全物件自適應縮放

     編輯:關於C語言

模式二:按比例縮放 — 視窗切換時所有物件 (角色、地圖、障礙物、文字) 等比例放大/縮小。核心變化:所有尺寸相關屬性乘以縮放比例。

關鍵調整:GridSize 拆分為 X/Y 兩向

寬屏下正方單元格變形,需 GridSizeX、GridSizeY 分別代表寬高,始能勝任非等比縮放。

ChangeWindowSize 核心實作

private void ChangeWindowSize(double cw, double ch, double nw, double nh)
{
    Leader.Action = Actions.Stop; Leader.Direction = 4;
    if (storyboard != null) storyboard.Stop();

    ratioX = nw / cw; ratioY = nh / ch;

    GridSizeX *= ratioX; GridSizeY *= ratioY;
    Carrier.Width = ActualWidth * ratioX;
    Carrier.Height = ActualHeight * ratioY;

    for (int i = 0; i < Carrier.Children.Count; i++)
    {
        if (Carrier.Children[i] is QXObject obj)
        {
            obj.X *= ratioX; obj.Y *= ratioY;
            obj.Width_ *= ratioX; obj.Height_ *= ratioY;
            obj.CenterX *= ratioX; obj.CenterY *= ratioY;

            if (obj is QXSpirit sp)
            {
                sp.Describtion.Height *= ratioY;
                sp.Describtion.SetValue(Canvas.TopProperty, 
                    (double)sp.Describtion.GetValue(Canvas.TopProperty) * ratioY);
                sp.Faction.FontSize *= ratioX;
                sp.Clan.FontSize *= ratioX;
                sp.SName.FontSize *= ratioX;
            }
        }
    }
}

驗證與說明

  • 不同解析度/螢幕尺寸測試皆完美適配
  • WPF 為矢量引擎,但位圖 (角色/地圖) 仍會像素拉伸,未轉矢量
  • 此功能看似簡單,實為架構擴展性嚴苛考驗:架構有缺陷則移動時漏洞百出
等比例縮放效果截圖

下節登場:怪物系統上線,帥氣主角不再孤單!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved