zoukankan      html  css  js  c++  java
  • 与众不同 windows phone (1) Hello Windows Phone

    [索引页]
    [源码下载]


    与众不同 windows phone (1) - Hello Windows Phone



    作者:webabcd


    介绍
    与众不同 windows phone 7.5 (sdk 7.1)

    • 使用 Silverlight 开发 Windows Phone 应用程序
    • 使用 XNA 开发 Windows Phone 应用程序
    • 使用 Silverlight 和 XNA 组合开发 Windows Phone 应用程序(在 Silverlight 中融入 XNA)



    示例
    1、使用 Silverlight 开发 Windows Phone App 的 Demo
    MainPage.xaml

    <phone:PhoneApplicationPage 
        x:Class="Silverlight.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Portrait" Orientation="Portrait"
        shell:SystemTray.IsVisible="True">
    
        <StackPanel>
            <!--按钮-->
            <Button Name="btn" Content="hello webabcd" />
        </StackPanel>
     
    </phone:PhoneApplicationPage>

    MainPage.xaml.cs

    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.Phone.Controls;
    
    namespace Silverlight
    {
        public partial class MainPage : PhoneApplicationPage
        {
            public MainPage()
            {
                InitializeComponent();
    
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }
    
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                // 弹出 MessageBox 信息
                btn.Click += delegate { MessageBox.Show("hello webabcd"); };
            }
        }
    }



    2、使用 XNA 开发 Windows Phone App 的 Demo
    Game1.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Input.Touch;
    using Microsoft.Xna.Framework.Media;
    
    namespace XNA
    {
        // 启动时先 Initialize,再 LoadContent,退出时 UnloadContent
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            // 图形设备(显卡)管理器,XNA 在游戏窗口上做的所有事情都要通过此对象
            GraphicsDeviceManager graphics;
    
            // 精灵绘制器
            SpriteBatch spriteBatch;
    
            // 2D 纹理对象
            Texture2D sprite;
    
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
    
                // 指定游戏窗口的宽和高,不设置的话会花屏
                graphics.PreferredBackBufferWidth = this.Window.ClientBounds.Width;
                graphics.PreferredBackBufferHeight = this.Window.ClientBounds.Height;
    
                Content.RootDirectory = "Content";
    
                // 两次绘制的间隔时间,本例为每 1/30 秒绘制一次,即帧率为 30 fps。此属性默认值为 60 fps
                TargetElapsedTime = TimeSpan.FromSeconds(1f / 30);
    
                // 当禁止在锁屏状态下运行应用程序空闲检测(默认是开启的)时,将此属性设置为 1 秒钟,可减少锁屏启动应用程序时的耗电量。此属性默认值为 0.02 秒
                InactiveSleepTime = TimeSpan.FromSeconds(1);
            }
    
            /// <summary>
            /// 游戏运行前的一些初始化工作
            /// </summary>
            protected override void Initialize()
            {
                base.Initialize();
            }
    
            /// <summary>
            /// 加载游戏所需用到的资源,如图像和音效等
            /// </summary>
            protected override void LoadContent()
            {
                spriteBatch = new SpriteBatch(GraphicsDevice);
    
                // 将图片 Image/Son 加载到 Texture2D 对象中
                sprite = Content.Load<Texture2D>("Image/Son");
            }
    
            /// <summary>
            /// 手工释放对象,游戏退出时会自动调用此方法
            /// 注:XNA 会自动进行垃圾回收
            /// </summary>
            protected override void UnloadContent()
            {
    
            }
    
            /// <summary>
            /// Draw 之前的逻辑计算
            /// </summary>
            /// <param name="gameTime">游戏的当前时间对象</param>
            protected override void Update(GameTime gameTime)
            {
                // 用户按返回键则退出应用程序
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                    this.Exit();
    
                base.Update(gameTime);
            }
    
            /// <summary>
            /// 在游戏窗口上进行绘制
            /// </summary>
            /// <param name="gameTime">游戏的当前时间对象</param>
            protected override void Draw(GameTime gameTime)
            {
                // 清除游戏窗口上的所有对象,然后以 CornflowerBlue 颜色作为背景
                GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // SpriteBatch.Draw() - 用于绘制图像,其应在 SpriteBatch.Begin() 和 SpriteBatch.End() 之间调用
                spriteBatch.Begin();
                spriteBatch.Draw(sprite, new Vector2((this.Window.ClientBounds.Width - sprite.Width) / 2, (this.Window.ClientBounds.Height - sprite.Height) / 2), Color.White);
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        }
    }



    3、使用 Silverlight 和 XNA 组合开发 Windows Phone App 的 Demo(在 Silverlight 中融入 XNA)
    GamePage.xaml

    <phone:PhoneApplicationPage 
        x:Class="Combine.GamePage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Portrait" Orientation="Portrait"
        mc:Ignorable="d" d:DesignHeight="800" d:DesignWidth="480"
        shell:SystemTray.IsVisible="False">
        
        <StackPanel Orientation="Vertical">
            
            <!--
                4 个按钮,用于控制 sprite 的 上/下/左/右 移动
            -->
            
            <Button Name="btnUp" Content="上" Click="btnUp_Click" />
            <Button Name="btnDown" Content="下" Click="btnDown_Click" />
            <Button Name="btnLeft" Content="左" Click="btnLeft_Click" />
            <Button Name="btnRight" Content="右" Click="btnRight_Click" />
        </StackPanel>
    
    </phone:PhoneApplicationPage>

    AppServiceProvider.cs

    using System;
    using System.Collections.Generic;
    
    namespace Combine
    {
        /// <summary>
        /// Implements IServiceProvider for the application. This type is exposed through the App.Services
        /// property and can be used for ContentManagers or other types that need access to an IServiceProvider.
        /// </summary>
        public class AppServiceProvider : IServiceProvider
        {
            // A map of service type to the services themselves
            private readonly Dictionary<Type, object> services = new Dictionary<Type, object>();
    
            /// <summary>
            /// Adds a new service to the service provider.
            /// </summary>
            /// <param name="serviceType">The type of service to add.</param>
            /// <param name="service">The service object itself.</param>
            public void AddService(Type serviceType, object service)
            {
                // Validate the input
                if (serviceType == null)
                    throw new ArgumentNullException("serviceType");
                if (service == null)
                    throw new ArgumentNullException("service");
                if (!serviceType.IsAssignableFrom(service.GetType()))
                    throw new ArgumentException("service does not match the specified serviceType");
    
                // Add the service to the dictionary
                services.Add(serviceType, service);
            }
    
            /// <summary>
            /// Gets a service from the service provider.
            /// </summary>
            /// <param name="serviceType">The type of service to retrieve.</param>
            /// <returns>The service object registered for the specified type..</returns>
            public object GetService(Type serviceType)
            {
                // Validate the input
                if (serviceType == null)
                    throw new ArgumentNullException("serviceType");
    
                // Retrieve the service from the dictionary
                return services[serviceType];
            }
    
            /// <summary>
            /// Removes a service from the service provider.
            /// </summary>
            /// <param name="serviceType">The type of service to remove.</param>
            public void RemoveService(Type serviceType)
            {
                // Validate the input
                if (serviceType == null)
                    throw new ArgumentNullException("serviceType");
    
                // Remove the service from the dictionary
                services.Remove(serviceType);
            }
        }
    }

    GamePage.xaml.cs

    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.Navigation;
    using System.Windows.Shapes;
    using Microsoft.Phone.Controls;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.Graphics;
    
    namespace Combine
    {
        public partial class GamePage : PhoneApplicationPage
        {
            // 以 XNA 的方式加载资源
            ContentManager contentManager;
            // 计时器
            GameTimer timer;
            // 精灵绘制器
            SpriteBatch spriteBatch;
            // 2D 纹理对象
            Texture2D sprite;
    
            // silverlight 元素绘制器
            UIElementRenderer elementRenderer;
    
            // sprite 的位置信息
            Vector2 position = Vector2.Zero;
    
            public GamePage()
            { 
                InitializeComponent();
    
                // 获取 ContentManager 对象
                contentManager = (Application.Current as App).Content;
    
                // 指定计时器每 1/30 秒执行一次,即帧率为 30 fps
                timer = new GameTimer();
                timer.UpdateInterval = TimeSpan.FromTicks(333333);
                timer.Update += OnUpdate;
                timer.Draw += OnDraw;
    
                // 当 silverlight 可视树发生改变时
                LayoutUpdated += new EventHandler(GamePage_LayoutUpdated);
            }
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                // 指示显示设备需要同时支持 silverlight 和 XNA
                SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(true);
    
                // 实例化精灵绘制器
                spriteBatch = new SpriteBatch(SharedGraphicsDeviceManager.Current.GraphicsDevice);
    
                // 将图片 Image/Son 加载到 Texture2D 对象中
                if (sprite == null)
                {
                    sprite = contentManager.Load<Texture2D>("Image/Son");
                }
    
                // 启动计时器
                timer.Start();
    
                base.OnNavigatedTo(e);
            }
    
            void GamePage_LayoutUpdated(object sender, EventArgs e)
            {
                // 指定窗口的宽和高
                if ((ActualWidth > 0) && (ActualHeight > 0))
                {
                    SharedGraphicsDeviceManager.Current.PreferredBackBufferWidth = (int)ActualWidth;
                    SharedGraphicsDeviceManager.Current.PreferredBackBufferHeight = (int)ActualHeight;
                }
    
                // 实例化 silverlight 元素绘制器
                if (elementRenderer == null)
                {
                    elementRenderer = new UIElementRenderer(this, (int)ActualWidth, (int)ActualHeight);
                }
            }
    
            protected override void OnNavigatedFrom(NavigationEventArgs e)
            {
                // 停止计时器
                timer.Stop();
    
                // 指示显示设备关闭对 XNA 的支持
                SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(false);
    
                base.OnNavigatedFrom(e);
            }
    
            /// <summary>
            /// Draw 之前的逻辑计算
            /// </summary>
            private void OnUpdate(object sender, GameTimerEventArgs e)
            {
                
            }
    
            /// <summary>
            /// 在窗口上进行绘制
            /// </summary>
            private void OnDraw(object sender, GameTimerEventArgs e)
            {
                // 清除窗口上的所有对象,然后以 CornflowerBlue 颜色作为背景
                SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.Black);
    
                // 呈现 silverlight 元素到缓冲区
                elementRenderer.Render();
    
                spriteBatch.Begin();
                // 绘制 silverlight 元素
                spriteBatch.Draw(elementRenderer.Texture, Vector2.Zero, Color.White);
                // 绘制 sprite 对象
                spriteBatch.Draw(sprite, position, Color.White);
                spriteBatch.End();
            }
    
            private void btnUp_Click(object sender, RoutedEventArgs e)
            {
                position.Y--;
            }
    
            private void btnDown_Click(object sender, RoutedEventArgs e)
            {
                position.Y++;
            }
    
            private void btnLeft_Click(object sender, RoutedEventArgs e)
            {
                position.X--;
            }
    
            private void btnRight_Click(object sender, RoutedEventArgs e)
            {
                position.X++;
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    C#,调用Process解压文件
    使用Jquery的treeview
    利用VS2010的项目生成事件属性进行生成文件的复制与打包
    简单理解laravel框架中的服务容器,服务提供者以及怎样调用服务
    详解PHP实现定时任务的五种方法
    php 回调函数和匿名函数
    mongodb的连接和开启安全验证
    关于版本号:alpha、beta、rc、stable
    php7 mongodb 扩展windows 安装
    终端提交代码到码云
  • 原文地址:https://www.cnblogs.com/webabcd/p/2534155.html
Copyright © 2011-2022 走看看