65.9K
CodeProject 正在变化。 阅读更多。
Home

用于加速超极本开发的应用程序模板

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (1投票)

2013年1月16日

CPOL

4分钟阅读

viewsIcon

13547

downloadIcon

137

一个模板代码,帮助快速启动超极本开发。

引言

通过应用创新竞赛,我们都学到了很多东西。现在是我们回报的时候了。 

本文内容

  1. 我将描述创建一个简单的应用程序以及“带解决方案”的问题。
  2. 将谈论我的参赛作品
  3. 提供一个模板来加速你的应用程序,为什么当你可以使用一个现成的并修改它时还要重新发明轮子呢? 

开始一个win 8桌面应用程序

只需开始一个新项目,控制台或窗口窗体应用程序都可以,这都一样,取决于你计划开始做什么。

这里我们选择了Windows窗体应用程序。由于我们将使用Windows RT传感器API,因此我们选择了.NET Framework 4.5。

默认情况下,你无法添加wincore(WinRT API 到 Windows 桌面应用程序)

所以卸载项目 

执行以下步骤

  1. 编辑 .csproj 文件。
  2. Add
      <TargetPlatformVersion>8.0</TargetPlatformVersion>

    就在 <PropertyGroup> 的开始之后

  3. 重新加载项目

现在添加对windows核心的引用,它现在可用。如果你不按照上述步骤直接尝试,它将不可用。 

添加对 system.runtime, system.runtime.interopservices 等的引用。它们都在程序文件或程序文件x86子文件夹“\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5”中

现在你的应用程序已准备好使用传感器。

如果你计划使用XNA,就像我的参赛作品终端速度一样,你也需要添加XNA DLL的引用。

在你的应用程序中使用传感器。

 private Accelerometer acel;
 private SimpleOrientationSensor orientationSensor;
  public form1() {    
   acel = Accelerometer.GetDefault();
      if (this.acel != null)
    {  acel.ReadingChanged += Aceloro;
   }
  orientationSensor = SimpleOrientationSensor.GetDefault();
            if (this.orientationSensor != null)
            {
                orientation = this.orientationSensor.GetCurrentOrientation();
                this.orientationSensor.OrientationChanged += OrientationChange;
            } 
} 
 private void OrientationChange(SimpleOrientationSensor sender, SimpleOrientationSensorOrientationChangedEventArgs args)
        {
          if (this.InvokeRequired)
            {
                IAsyncResult result = BeginInvoke(new MethodInvoker(delegate()
                {
                   Data1.Text = "Orientation " + args.Orientation + "\n";
                }));
                        EndInvoke(result);
            }
            else if (this.IsHandleCreated)
            {
                Data1.Text = "Orientation " + args.Orientation + "\n";
               
            }
        }
        private void Aceloro(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
        {
            if (this.InvokeRequired)
            {
                IAsyncResult result = BeginInvoke(new MethodInvoker(delegate()
                {
                    DATA.Text = "x= " + args.Reading.AccelerationX + ". Y= " + args.Reading.AccelerationY + ".Z= " + args.Reading.AccelerationZ + "\n";
                    }));
                // wait until invocation is completed
                EndInvoke(result);
            }
            else if (this.IsHandleCreated)
            {
                DATA.Text = "x= " + args.Reading.AccelerationX + ". Y= " + args.Reading.AccelerationY + ".Z= " + args.Reading.AccelerationZ + "\n";
            }

问题

由于Win 8设备可以是平板电脑,并且具有不断变化的屏幕方向,因此有必要考虑到这一点,并更改你的游戏代码以支持许多不同的配置。

解决方案

我们可以使用方向监听器了解旋转。现在我们需要使用这个和宽度和高度的差异来使我们的应用程序在其他方向也能工作。 

我的应用程序是一个使用加速度计的游戏,所以在纵向使用x轴并不是用户期望的。使用方向监听器,我可以知道我的应用程序在哪一侧方向,并使用它来更改用于移动飞机的加速度计的轴。比如x用于正常使用,-x用于180度旋转,-y用于90度旋转,y用于270度旋转。 

完成你的应用程序后

当你的游戏准备就绪后,你可以使用代码签名工具对exe进行签名,并使用wix或install-shield进行打包,对打包的MSI或EXE进行签名,然后你可以提交到Intel AppUp商店。

如果你正在提交一个作为MSI包的应用程序,请确保你的应用程序将其安装目录存储在注册表中,并从那里读取它以打开文件等。(如果不这样做,将导致你的应用程序从Intel appup客户端崩溃)。 

如果你计划使用XNA,请确保你的工作站有 Visual Studio 2010 以及最新的 Windows Phone SDK,因此你可以编译XNA资源以供你的项目使用。

背景

本文链接到终端速度文章系列。

  1. 同一游戏的Android版本,所有代码都是开源的。几乎所有代码都已注释,文章解释了jni和许多其他内容,https://codeproject.org.cn/Articles/487074/Terminal-Velocity-Android
  2. 原始的应用创新文章,
    https://codeproject.org.cn/Articles/473333/TerminalVelocity-an-action-game-for-windows8

终端速度的故事

终端速度是一款专门为应用创新竞赛设计的游戏。

但由于我的设备未能及时收到,我无法及时调整加速度计,甚至没有实现触摸,因为我确信Win 8会将鼠标输入转换为触摸,而我的游戏使用加速度计,不是一个基于触摸的游戏。但现在所有这些都已实现,并且该游戏将很快在 inlet app up上发布。

与此同时,这款游戏有机会被移植到Windows Phone和Android。

Android用户可以从 这里 下载它

源代码来自 这里

Windows phone 应用将很快上线。

Using the Code

本文提供了一个模板应用程序,用于加速超极本的开发。最有趣的部分将是在你的应用程序中使用多点触摸,这已经在本文中实现。

所有与触摸相关的数据都被轮询到这些函数中的变量 e 中,使用它。

Touchup(object sender, EventArgs e); 
Touchdown(object sender, EventArgs e); 
Touchmove(object sender, EventArgs e); 
//Dummy  function body to get touch data
{ if (e.IsPrimaryContact)
            {
                idc = e.Id - 1;
            }
 Id=e.Id-idc; 
 POSX=e.LocationX;
 POSY=e.LocationY; 
 }

关注点

我在编写终端速度时学到的有趣的事情。

  1. 我使用了XNA并完成了整个游戏,那是旧的工作,然后我了解到我的应用程序没有使用单个触摸功能,因为它需要点击2次才能注册触摸。
  2. 我将XNA与winform一起使用,并通过在msdn上的各种示例中搜索和阅读与触摸相关的旧代码来实现触摸,最终找到了这种方法。
  3. 我使用了一个基于时间的使失效,但你可以在draw()的最后一行使用它以获得快速绘图。

模板内容

  1. 触摸API的实现
  2. 传感器的实现
  3. 在win form中使用xna的实现,代码可以切换到全屏
© . All rights reserved.