Добавить XNA в проект Silverlight WP7 - PullRequest
0 голосов
/ 27 февраля 2012

В настоящее время я делаю игру для WP7, которая в основном сделана в Silverlight. Но теперь мне нужна страница, где я могу использовать XNA. Страница 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

StackTrace

   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)

Одним из способов решения этой проблемы было бы копирование всех моих классов и пометок silverlight в новый проект SL и XNA, но это мой план «если все остальное не удастся».

Кто-нибудь знает, как решить это исключение NullReferenceException или предупреждение? Или я должен попытаться сделать это другим способом?

РЕДАКТИРОВАТЬ: Найти информацию о предупреждении здесь: http://forums.create.msdn.com/forums/p/93769/561676.aspx Это безвредно.

1 Ответ

0 голосов
/ 27 февраля 2012

Нулевая ссылка, скорее всего, означает, что оператору as не удалось ввести тип App, что оставит вас с NullReferenceException, если вы попытаетесь найти свойство Content в результате as.

Для проекта SL / XNA есть несколько дополнительных вещей, которые определены на глобальном уровне приложения вместе с дополнительным стандартным кодом в вашем App объекте. Они специфичны для SL / XNA и не определены для проекта чистого SL. Для проектов SL / XNA также необходимы дополнительные ссылки на библиотеки классов XNA.

Можно добавить этот дополнительный код вручную в существующий проект SL, если вы тщательно изучите различия между стандартными проектами базовых приложений SL и SL / XNA, но в вашем случае, вероятно, проще создать новый SL / XNA спроектировать и переместить ваш код в него.

Например, есть некоторые дополнения (сюда не входит дополнительный шаблонный код, поэтому проверьте сами)

из приложения. Xaml:

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

Из приложения.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; }
...