2012-02-27 3 views
0

현재 Silverlight로 주로 제작 된 WP7 용 게임을 만들고 있습니다. 하지만 이제는 XNA를 사용할 수있는 페이지가 필요합니다. XNA 페이지는 전투 데이터를 수신 한 다음 사용자를 위해 시각화합니다.Silverlight WP7 프로젝트에 XNA 추가

내 솔루션에서 "Windows Phone Silverlight 및 XNA"프로젝트 (BattleSimulator)를 만들고 GamePage.xaml을 탐색 해 보았습니다. 하지만 NullReferenceException (응용 프로그램으로 Application.Current) 및 경고가 나타납니다. 경고는 BattleSimulator 프로젝트에 있습니다. 이 ㄴ 것입니다 해결

경고

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

코드

public GamePage() 
    { 
     InitializeComponent(); 

     // Get the content manager from the application 
     contentManager = (Application.Current as App).Content; //NullReference here 

스택 트레이스

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) 

한 가지 방법 e 모든 실버 라이트 클래스와 마크 업을 새로운 SL 및 XNA 프로젝트에 복사 할 수는 있지만 그게 전부라면 실패한 계획입니다.

누구든지이 NullReferenceException 또는 경고를 해결하는 방법을 알고 있습니까? 또는 다른 방법으로이 작업을 수행해야합니까?

편집 : 여기 경고에 찾을 정보 : http://forums.create.msdn.com/forums/p/93769/561676.aspx 그것은 무해하다.

답변

0

널 참조는 as 운영자가 당신이 as의 결과에 Content 속성을 발견 할 때 NullReferenceException이 당신을 떠날 것이다 App에 배역을 실패 있다는 가능성이 높습니다.

SL/XNA 프로젝트의 경우 App 개체의 추가 상용구 코드와 함께 응용 프로그램 전역 수준에서 정의 된 몇 가지 추가 사항이 있습니다. 이들은 SL/XNA에 고유하며 순수 SL 프로젝트에는 정의되지 않습니다. SL/XNA 프로젝트의 경우 XNA 클래스 라이브러리에 대한 추가 프로젝트 참조가 필요합니다.

표준 SL과 SL/XNA 기본 응용 프로그램 프로젝트 간의 차이점을주의 깊게 살펴보면이 추가 코드를 수동으로 기존 SL 프로젝트에 추가 할 수는 있지만, 새 SL/XNA 프로젝트를 만들고 코드를이 코드로 옮기십시오.

예를 들어 일부 추가는 App.xaml에서

(이 추가 상용구 코드를 포함, 그래서 자신을 확인하지 않습니다)입니다 : App.xaml.cs를에서

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

:

/// <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

관련 문제