2012-02-27 95 views
0

我目前正在爲WP7製作遊戲,主要是在Silverlight中製作的。但是現在我需要一個可以使用XNA的頁面。 XNA頁面將接收一場戰鬥的數據,然後爲用戶進行可視化。將XNA添加到Silverlight WP7項目

我試過在我的解決方案中製作一個「Windows Phone Silverlight和XNA」項目(BattleSimulator)並導航到GamePage.xaml。但是我得到一個NullReferenceException(Application.Current as App)和一個警告。警告在BattleSimulator項目中。

警告

Warning 1 The project 'BattleSimulatorLib' cannot be referenced. The referenced project is targeted to a different framework family (.NETFramework) 

代碼

​​

堆棧跟蹤

at BattleSimulator.GamePage..ctor() 
    at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark) 
    at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark) 
    at System.Activator.InternalCreateInstance(Type type, Boolean nonPublic, StackCrawlMark& stackMark) 
    at System.Activator.CreateInstance(Type type) 
    at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result) 
    at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args) 
    at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark) 
    at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark) 
    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
    at System.Delegate.DynamicInvokeOne(Object[] args) 
    at System.MulticastDelegate.DynamicInvokeImpl(Object[] args) 
    at System.Delegate.DynamicInvoke(Object[] args) 
    at System.Windows.Threading.DispatcherOperation.Invoke() 
    at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority) 
    at System.Windows.Threading.Dispatcher.OnInvoke(Object context) 
    at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args) 
    at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args) 
    at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult) 

一個解決,將B的方式e將我所有的silverlight類和標記複製到一個新的SL和XNA項目中,但這是我的if-all-else-failures計劃。

有誰知道如何解決這個NullReferenceException或警告?或者我應該嘗試以其他方式做到這一點?

編輯:發現這裏的警告信息:http://forums.create.msdn.com/forums/p/93769/561676.aspx 它是無害的。

回答

0

的空引用是最有可能的是,as操作發生故障的類型強制轉換爲App,這將留給你一個NullReferenceException當您試圖找到在as的結果Content財產。

對於SL/XNA項目,在應用程序全局級別定義了一些額外的東西以及App對象中的一些額外的樣板代碼。這些是SL/XNA特有的,並沒有爲純SL項目定義。對於SL/XNA項目,還需要一些額外的XNA類庫的項目引用。

它可以手動添加此額外的代碼到現有的SL項目,如果你仔細研究標準的SL和SL/XNA基本應用項目之間的差異,但它可能是你的情況更容易地創建一個新的SL/XNA項目並將您的代碼移入其中。

例如一些附加的(這不包括額外的樣板代碼,所以自己查一下)

從App.xaml中:

<!--The SharedGraphicsDeviceManager is used to render with the XNA Graphics APIs--> 
<xna:SharedGraphicsDeviceManager /> 

從App.xaml.cs:

/// <summary> 
    /// Provides access to a ContentManager for the application. 
    /// </summary> 
    public ContentManager Content { get; private set; } 

    /// <summary> 
    /// Provides access to a GameTimer that is set up to pump the FrameworkDispatcher. 
    /// </summary> 
    public GameTimer FrameworkDispatcherTimer { get; private set; } 

    /// <summary> 
    /// Provides access to the AppServiceProvider for the application. 
    /// </summary> 
    public AppServiceProvider Services { get; private set; } 
+0

謝謝你的回答。開始尋找它,但它看起來有點麻煩,我認爲風險是我最終會遇到不穩定的事情。我只需拿到我的鼠標並開始導入。 – softarn 2012-02-27 14:58:57

相關問題