Για να εντοπίσετε σφάλματα σε ένα πρόγραμμα χρησιμοποιώντας το XNA στο Silverlight5
Οι εξηγήσεις εξηγούνται με τη σειρά από τη δημιουργία του έργου, οπότε παραλείψτε τα μέρη που καταλαβαίνετε.
Πρώτα, δημιουργήστε μια εφαρμογή Silverlight. Από το μενού του Visual Studio, επιλέξτε Αρχείο, Δημιουργία, Έργο.
Επιλέξτε Εφαρμογή Silverlight.
Όσον αφορά τη φιλοξενία τοποθεσιών Web, βεβαιωθείτε ότι έχετε καθορίσει την τοποθεσία που θέλετε να φιλοξενήσετε. Οι δοκιμαστικές σελίδες που δημιουργούνται αυτόματα κατά τον εντοπισμό σφαλμάτων μόνο στο Silverlight δεν μπορούν να εκτελέσουν προγράμματα XNA που χρησιμοποιούν την GPU. (Ωστόσο, αυτό δεν ισχύει όταν δημιουργείτε με μη αυτόματο τρόπο μια δοκιμαστική σελίδα.)
Μετά τη δημιουργία του έργου, κάντε δεξί κλικ στην επιλογή Αναφορές στην εφαρμογή Silverlight και επιλέξτε Προσθήκη αναφοράς.
Επιλέξτε "Συναρμολόγηση" και "Πλαίσιο" από το μενού στα αριστερά και ελέγξτε τα ακόλουθα στοιχεία. (Μην πατήσετε ακόμα το κουμπί OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Γραφικά
- System.Windows.Xna
Στη συνέχεια, επιλέξτε "Προώθηση" από το μενού στα αριστερά, ελέγξτε τα ακόλουθα στοιχεία και πατήστε το κουμπί OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Έχουμε επιλέξει το ελάχιστο απαραίτητο για την εκτέλεση ενός προγράμματος XNA, οπότε επιλέξτε τη συναρμολόγηση για αναφορά σύμφωνα με τις ανάγκες σας.
Προστίθεται παραπομπή στο συγκρότημα.
Στη συνέχεια, θα τροποποιήσουμε τον κώδικα. Αυτή τη φορά, περιγράφονται μόνο οι ελάχιστες πληροφορίες που δείχνουν εάν το πρόγραμμα XNA λειτούργησε σωστά.
Από την εφαρμογή Silverlight, ανοίξτε το MainPage.xaml και προσθέστε τον ακόλουθο κώδικα:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
Το DrawingSurface είναι η περιοχή στην οποία προσελκύει το πρόγραμμα XNA. Όταν εκτελείται, το συμβάν Draw εμφανίζεται επανειλημμένα, οπότε περιγράψτε τη διαδικασία σχεδίασης εκεί. Αυτή τη φορά, θα σχεδιάσω μόνο το χρώμα φόντου, ώστε να μπορείτε να δείτε αν λειτουργεί σωστά.
Το textBlockMessage χρησιμοποιείται για την εμφάνιση κειμένου είτε ένα πρόγραμμα XNA λειτουργεί σωστά είτε όχι. Αυτή τη φορά το βάζω για να το επιβεβαιώσω, οπότε δεν το χρειάζομαι στην πραγματική έκδοση.
Στη συνέχεια, ανοίξτε το αρχείο "MainPage.xaml.cs". Πρώτον, ας ταξινομήσουμε τα εξαρτήματα που χρησιμοποιούν. Ο χώρος ονομάτων για την εφαρμογή Silverlight καθορίζεται, οπότε θα τον αλλάξουμε για το XNA. Κατά τη δημιουργία του, προσδιορίστε το σύμφωνα με την αίτησή σας.
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;
Στη συνέχεια, κατά την εκκίνηση, θέλετε να εμφανίσετε την τρέχουσα λειτουργία ανάμειξης και τον λόγο για τον οποίο δεν μπορούσατε να σχεδιάσετε κείμενο. Το γράφω στον κατασκευαστή γιατί ξέρω πότε ξεκινά η εφαρμογή Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Γράψτε τη διαδικασία σχεδίασης. Σε αυτήν την περίπτωση, θέλουμε απλώς το XNA Framework να σχεδιάσει το φόντο όταν συμβεί το συμβάν σχεδίασης.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Ας εκτελέσουμε τον εντοπισμό σφαλμάτων.
Όταν το εκτελέσετε, θα εμφανιστεί όπως φαίνεται στην εικόνα. RenderMode: Δεν είναι διαθέσιμη δεν επιτρέπει την απόδοση υλικού, Το RenderModeReason:GPUAccelerationDisabled απενεργοποιεί την απόδοση GPU. Αυτό είναι ένα ζήτημα από την πλευρά του διακομιστή, οπότε πρέπει πρώτα να το ενεργοποιήσετε.
Ανοίξτε το < όνομα έργου>TestPage.aspx αρχείο από το ASP.NET έργο που φιλοξενείται στην εκτέλεση silverlight.
Προσθέστε "EnableGPUAcceleration" στην παράμετρο του αντικειμένου και ορίστε την τιμή σε "true". Αυτό δίνει στην πλευρά του διακομιστή το δικαίωμα για αυτήν την εφαρμογή Silverlight να χρησιμοποιεί την GPU. (Στην πραγματικότητα, επιλύεται με επεξεργασία πελάτη, αλλά δεδομένου ότι είναι ο διακομιστής που εξάγει HTML, είναι ένα πρόβλημα από την πλευρά του διακομιστή.)
<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>
Αν προσπαθήσετε να το εκτελέσετε με αυτό, θα μοιάζει με το σχήμα. Το RenderModeReason είναι πλέον αποκλεισμένο από την ασφάλεια. Αυτό συμβαίνει επειδή η σχεδίαση GPU δεν επιτρέπεται από προεπιλογή για λόγους ασφαλείας. Δεδομένου ότι πρόκειται για ζήτημα προγράμματος-πελάτη, εκτός από την εκτέλεση εντοπισμού σφαλμάτων, πρέπει επίσης να ζητήσετε από τον χρήστη να εκτελέσει τα ακόλουθα βήματα για να επιτρέψει στην GPU να σχεδιάσει.
Για να επιτρέψετε την απόδοση GPU, κάντε δεξί κλικ στην εφαρμογή Silverlight και επιλέξτε Silverlight από το μενού.
Στο παράθυρο διαλόγου που ανοίγει, επιλέξτε την καρτέλα "Δικαιώματα", επιλέξτε τον κατάλληλο ιστότοπο και, στη συνέχεια, κάντε κλικ στο κουμπί "Να επιτρέπεται".
Όταν η άδεια είναι "Να επιτρέπεται", κάντε κλικ στο ok κουμπί.
Εάν κάνετε εντοπισμό σφαλμάτων κατά τον εντοπισμό σφαλμάτων, η ανανέωση του προγράμματος περιήγησης δεν τίθεται σε ισχύ, οπότε αν κλείσετε το πρόγραμμα περιήγησης και το εκτελέσετε ξανά, θα δείτε ότι το RenderMode γίνεται σχέδιο υλικού και είναι επίσης ενεργοποιημένο το σχέδιο φόντου XNA. Τώρα μπορείτε να δημιουργήσετε προγράμματα XNA στο περιεχόμενο της καρδιάς σας.