2017-04-26 60 views
0

我正在製作視頻遊戲,並且屏幕分辨率有問題。 早些時候,幾個月前,我問了非常類似的問題。製作選項以選擇正確的分辨率

Need images with lower resolution "stretched" to screen size

那時候,似乎我得到了(使用視框)是完美的答案,但現在我得到的問題。

我希望我的遊戲中的每一個圖像和控制都有適合分辨率的幾種不同的可能變化。 例如,如果用戶設置分辨率800x600,則所有圖像和按鈕都會縮小到正確的尺寸。但我確實希望我的遊戲只能全屏顯示,而不是窗口。

因此,如果分辨率低於最終用戶顯示器的分辨率,所有圖像必須拉伸並看起來「模糊」。如果更高,它的一部分必須在屏幕之外。

現在,我的代碼只是將分辨率設置爲最終用戶監視器,無論它是什麼。這絕對不是我想要的。

我得到什麼:

enter image description here

什麼,我需要一個非常粗略例如:

enter image description here

我會告訴XAML作爲它的現在。當然它並不是完整的,但我會展示開始和幾個元素,所以你會知道它是如何構建的。

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Name="wdwMain" x:Class="RealityIncognita.MainWindow" 
    Height="900" Width="1600" ResizeMode="NoResize" WindowState="Maximized" Cursor="Cross" WindowStyle="None" Loaded="wdwMain_Loaded"> 

<Viewbox x:Name="viewMain" Stretch="Fill"> 
    <Grid x:Name="areaContainer" HorizontalAlignment="Left" Height="900" VerticalAlignment="Top" Width="1600"> 

     <Grid x:Name="areaMain"> 
      <Grid.Background> 
       <ImageBrush ImageSource="Resources/Images/Interface/main_interface.jpg"/> 
      </Grid.Background> 
      <Label x:Name="lblTextOutput" Content="Label" HorizontalAlignment="Center" Height="52" Margin="55,726,31,0" VerticalAlignment="Top" Width="1514" FontFamily="Arial" FontSize="22" FontWeight="Bold" HorizontalContentAlignment="Center"/> 
      <Button x:Name="btnExit" HorizontalAlignment="Left" Height="106" Margin="1464,771,0,0" VerticalAlignment="Top" Width="126" Click="btnExit_Click" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{x:Null}"> 
       <Button.Template> 
        <ControlTemplate> 
         <Image Source="/Resources/Images/Interface/Blank.png" Stretch="Fill" Margin="12,0,6,0"/> 
        </ControlTemplate> 
       </Button.Template> 
      </Button> 

      <Grid x:Name="areaShowers" HorizontalAlignment="Left" Height="700" Margin="1653,790,-1561,-590" VerticalAlignment="Top" Width="1508" IsVisibleChanged="areaShowers_IsVisibleChanged"> 
       <Grid.Background> 
        <ImageBrush ImageSource="Resources/Images/Rooms/Showers/shower_room.jpg" /> 
       </Grid.Background> 


       <Button x:Name="objShowersSoap" HorizontalAlignment="Left" Height="29" Margin="613,423,0,0" VerticalAlignment="Top" Width="17" MouseLeave="MouseLeaveAnyObject" RenderTransformOrigin="11.706,1.897" Click="objShowersSoap_Click" MouseEnter="objShowersSoap_MouseEnter"> 
        <Button.Template> 
         <ControlTemplate> 
          <Image Source="Resources/Images/Rooms/Showers/soap.png" Stretch="Fill" Margin="0,0,0,0"/> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 
       <Image x:Name="imgShowersOpenMachine" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Source="Resources/Images/Rooms/Showers/drying_machine_open.png" RenderTransformOrigin="0.808,0.471" Stretch="Fill"/> 
       </Button>     
      </Grid> 

      <Grid x:Name="areaLockerRoom" Height="700" VerticalAlignment="Top" Width="1508" IsVisibleChanged="areaLockerRoom_IsVisibleChanged" Margin="1653,17,-1561,0" MouseDown="areaLockerRoom_MouseDown" MouseEnter="areaLockerRoom_MouseEnter" MouseMove="areaLockerRoom_MouseMove"> 
       <Grid.Background> 
        <ImageBrush ImageSource="Resources/Images/Rooms/LockerRoom/locker_room_ready.png"/> 
       </Grid.Background> 

       <Button x:Name="objLockerRoomCrowbar" Content="" HorizontalAlignment="Left" Height="243" Margin="604,328,0,0" VerticalAlignment="Top" Width="51" MouseEnter="objCrowbar_MouseEnter" Panel.ZIndex="1" Click="objCrowbar_Click" MouseLeave="MouseLeaveAnyObject"> 
        <Button.Template> 
         <ControlTemplate> 
          <Image Source="Resources/Images/Rooms/LockerRoom/crowbar_only.png" Stretch="Fill" Margin="0,0,0,0"/> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 

       <Button x:Name="objLockerRoomOdyssey" HorizontalAlignment="Left" Height="53" Margin="797,638,0,0" VerticalAlignment="Top" Width="61" Click="objBookOdyssey_Click" MouseLeave="MouseLeaveAnyObject" MouseEnter="objBookOdyssey_MouseEnter"> 
        <Button.Template> 
         <ControlTemplate> 
          <Image Source="Resources/Images/Rooms/LockerRoom/img_book_odyssey.png" Stretch="Fill" Margin="0,0,0,0"/> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 
       <Button x:Name="objLockerRoomEdda" HorizontalAlignment="Left" Height="53" Margin="1335,549,0,0" VerticalAlignment="Top" Width="61" MouseLeave="MouseLeaveAnyObject" Click="objBookEdda_Click" MouseEnter="objBookEdda_MouseEnter"> 
        <Button.Template> 
         <ControlTemplate> 
          <Image Source="Resources/Images/Rooms/LockerRoom/img_book_edda.png" Stretch="Fill" Margin="0,0,0,0"/> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 

總結結構就是這樣:

主窗口 - Viewbox控件 - areaContainer(主電網) - 遊戲區域(網格) - 圖像和按鈕的每個網格

總結: 我得到:遊戲畫面設置爲最終用戶顯示器分辨率。 我需要的是:遊戲將所有圖像設置爲特定的分辨率,如果分辨率爲最低用戶的分辨率則爲「模糊」,如果分辨率高於「最高」則爲「剪切」。

謝謝你在前進, 葉甫蓋尼

新增: 如果我理解正確的工作方式 - 包括所有其他項目的容器格應調整大小,圖像應該變得更小(默認情況下它們是1600×900 ), 如果需要的話。然後,這個容器網格必須適合用戶的屏幕分辨率,保持小圖像質量。

並且爲了更簡化它:我可以製作更小的大圖像,然後將它們直接在Visual Studio中再次變大(並且失去質量)嗎?

回答

0

實際上,簡單地調整viewbox的伎倆。

<Viewbox x:Name="viewMain" VerticalAlignment="Center" HorizontalAlignment="Center"> 

而在代碼中,我不得不改變MaxWidth和MaxHeight,而不是常規的。

viewMain.MaxWidth = 1024; 
viewMain.MaxHeight = 768;