Programos derinimas naudojant XNA programoje "Silverlight"5

Puslapis atnaujintas :
Puslapio sukūrimo data :

Paaiškinimai paaiškinami nuo projekto sukūrimo, todėl praleiskite suprantamas dalis.

Pirmiausia sukurkite "Silverlight" programą. "Visual Studio" meniu pasirinkite Failas, Naujas, Projektas.

プロジェクトの新規作成

Pasirinkite "Silverlight" programą.

Silverlight アプリケーションを選択

Kalbant apie žiniatinklio svetainių prieglobą, būtinai nurodykite svetainę, kurią norite priglobti. Bandomieji puslapiai, kurie automatiškai generuojami derinant vien "Silverlight", negali paleisti XNA programų, naudojančių GPU. (Tačiau tai netaikoma, kai rankiniu būdu kuriate bandomąjį puslapį.)

ホストする Web サイトの作成

Sukūrę projektą, dešiniuoju pelės mygtuku spustelėkite Nuorodos "Silverlight" programoje ir pasirinkite Pridėti nuorodą.

参照の追加

Kairėje esančiame meniu pasirinkite "Surinkimas" ir "Sistema" ir patikrinkite šiuos elementus. (Dar nespauskite mygtuko Gerai)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • Sistema.Windows.Xna

参照するアセンブリを選択

Tada kairėje esančiame meniu pasirinkite "Advance", patikrinkite šiuos elementus ir paspauskite mygtuką Gerai.

  • Microsoft.Xna.Framework.Graphics.Extensions
  • Microsoft.Xna.Framework.Math

Mes pasirinkome minimumą, reikalingą XNA programai paleisti, todėl pasirinkite rinkinį, kurį norite nurodyti pagal savo poreikius.

参照するアセンブリを選択

Pridedama nuoroda į surinkimą.

参照一覧

Tada pakoreguosime kodą. Šį kartą aprašoma tik minimali informacija, rodanti, ar XNA programa veikė tinkamai.

"Silverlight" programoje atidarykite MainPage.xaml ir pridėkite šį kodą:

<Grid x:Name="LayoutRoot" Background="White">
  <!-- 追加ここから -->
  <DrawingSurface Draw="DrawingSurface_Draw" />
  <TextBlock x:Name="textBlockMessage"/>
  <!-- 追加ここまで -->
</Grid>

"DrawingSurface" yra sritis, į kurią atkreipia XNA programa. Kai vykdoma, piešimo įvykis vyksta pakartotinai, todėl aprašykite piešimo procesą ten. Šį kartą nupiešiu tik fono spalvą, kad pamatytumėte, ar ji veikia tinkamai.

textBlockMessage naudojamas tekstui rodyti, ar XNA programa veikia tinkamai, ar ne. Šį kartą įdedu jį, kad patvirtinčiau, todėl man jo nereikia tikrame leidime.

Tada atidarykite failą "MainPage.xaml.cs". Pirma, išsiaiškinkime naudojamas dalis. Nurodyta "Silverlight" programos vardų sritis, todėl pakeisime ją į XNA. Iš tikrųjų kurdami jį, apibrėžkite jį pagal savo paraišką.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
//using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Animation;
//using System.Windows.Shapes;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Windows.Graphics;

Tada, kai paleidžiate, norite parodyti dabartinį maišymo režimą ir priežastį, kodėl negalėjote piešti teksto. Rašau jį konstruktoriuje, nes žinau, kada paleidžiama "Silverlight" programa.

public MainPage()
{
  InitializeComponent();

  textBlockMessage.Text
    = string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
                    GraphicsDeviceManager.Current.RenderMode.ToString(),
                    GraphicsDeviceManager.Current.RenderModeReason);
}

Parašykite piešimo procesą. Šiuo atveju mes tiesiog norime, kad XNA sistema nupieštų foną, kai įvyksta piešimo įvykis.

private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
  GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}

Paleiskime derinimą.

デバッグ実行。

Kai jį paleisite, jis bus rodomas taip, kaip parodyta paveikslėlyje. RenderMode: Nepasiekiamas neleidžia aparatinės įrangos atvaizdavimo, RenderModeReason:GPUAccelerationDisabled išjungia GPU atvaizdavimą. Tai yra serverio problema, todėl pirmiausia turite ją įjungti.

描画ができない

Atidarykite < projekto pavadinimą>TestPage.aspx failą iš ASP.NET projekto, laikomo "Silverlight" paleidime.

TestPage.aspx を開く

Prie objekto parametro pridėkite "EnableGPUAcceleration" ir nustatykite reikšmę į "true". Tai suteikia serverio pusei leidimą šiai "Silverlight" programai naudoti GPU. (Tiesą sakant, tai išsprendžiama apdorojant klientą, bet kadangi HTML išveda serveris, tai yra serverio problema.)

<body>
  <form id="form1" runat="server" style="height:100%">
    <div id="silverlightControlHost">
      <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/DebugXna.xap"/>
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="5.0.61118.0" />
        <param name="autoUpgrade" value="true" />
        <!-- 追加ここから -->
        <param name="EnableGPUAcceleration" value="true" />
        <!-- 追加ここまで -->
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Microsoft Silverlight の取得" style="border-style:none"/>
        </a>
      </object>
      <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
    </div>
  </form>
</body>

Jei bandysite jį paleisti su tuo, jis atrodys kaip figūra. "RenderModeReason" dabar yra "SecurityBlocked". Taip yra todėl, kad GPU piešimas pagal numatytuosius nustatymus neleidžiamas saugumo sumetimais. Kadangi tai yra kliento problema, be derinimo vykdymo, taip pat turite leisti vartotojui atlikti šiuos veiksmus, kad GPU galėtų piešti.

RenderModeReason が SecurityBlocked に変化

Norėdami leisti GPU atvaizdavimą, dešiniuoju pelės mygtuku spustelėkite "Silverlight" programą ir meniu pasirinkite "Silverlight".

Silverlight を選択

Atsidariusiame dialogo lange pasirinkite skirtuką "Leidimai", pasirinkite atitinkamą svetainę ir spustelėkite mygtuką "Leisti".

アクセス許可

Kai leidimas yra "Leisti", spustelėkite mygtuką Gerai.

アクセス許可が「許可」に代わる

Jei derinate derindami, naršyklės atnaujinimas neįsigalioja, todėl jei uždarysite naršyklę ir paleisite ją dar kartą, pamatysite, kad "RenderMode" tampa aparatinės įrangos piešiniu, o XNA fono piešimas taip pat įjungtas. Dabar galite kurti XNA programas pagal savo skonį.

ハードウェアによる描画が有効