XNA Game Studio 游戏输入

昨天的双11让人感触颇多,幸好有http://www.appfsoft.com和博客园还有技术陪伴我,还有很多园子里的朋友,大家一定不要放弃自己的梦想。

在这个环节,你将为游戏添加输入部分。对于windows Phone手机,他的输入主要是通过触摸板或者重力感应。由于Windows Phone模拟器不提供重力感应,我们提供了一个通过键盘来模拟重力感应的解决方案。这个只供模拟设备测试用,不能在真机上使用。

1. 添加 Microsoft.Device.Sensors 程序集的引用。

图1

Adding a reference to the Microsoft.Devices.Sensors assembly

Note:要添加引用,在解决方案资源管理器中的AlienGame项目下,右键点击References

2. 打开 GameplayScreen.cs (如果没有打开的话).

3. 添加如下命名申请:

(Code Snippet – Game Development with XNA – Gameplay Screen – more using statements)

C#

using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework.Input.Touch;

using Microsoft.Devices.Sensors;

4. 添加附加的类变量用以保存触摸和加速度计状态:

(Code Snippet – Game Development with XNA – Gameplay Screen – more class variables)

C#

//Input Members

AccelerometerReadingEventArgs accelState;

TouchCollection touchState;

Accelerometer Accelerometer;

5. 在构造函数添加如下代码,初始化重力感应:

(Code Snippet – Game Development with XNA – Gameplay Screen – Accelerometer Initialization)

C#

Accelerometer = new Accelerometer();

if (Accelerometer.State == SensorState.Ready)

{

Accelerometer.ReadingChanged += (s, e) =>

{

accelState = e;

};

Accelerometer.Start();

}

6. 创建 GameplayScreen 类中的"输入"区域:

C#

#region Input

#endregion

7. 在“Input”区域给基类的HandleInput方法添加一个override,此方法将读取当前用户的输入数据,并在之后根据游戏中变化作出响应。

Note: 在仿真设备中,鼠标点击将被认为是触摸或者键盘输入。但是使用真机的时候,键盘输入是不会发生的。

(Code Snippet – Game Development with XNA – Gameplan Screen – HandleInput method)

C#

/// <summary>

/// Input helper method provided by GameScreen. Packages up the various input

/// values for ease of use. Here it checks for pausing and handles controlling

/// the player's tank.

/// </summary>

/// <param name="input">The state of the gamepads</param>

public override void HandleInput(InputState input)

{

if (input == null)

throw new ArgumentNullException("input");

if (input.PauseGame)

{

if (gameOver == true)

finishCurrentGame();

}

else

{

touchState = TouchPanel.GetState();

bool buttonTouched = false;

//interpret touch screen presses

foreach (TouchLocation location in touchState)

{

switch (location.State)

{

case TouchLocationState.Pressed:

buttonTouched = true;

break;

case TouchLocationState.Moved:

break;

case TouchLocationState.Released:

break;

}

}

float movement = 0.0f;

if (accelState != null)

{

if (Math.Abs(accelState.X) > 0.10f)

{

if (accelState.X > 0.0f)

movement = 1.0f;

else

movement = -1.0f;

}

}

//TODO: Update player Velocity over X axis #1

//This section handles tank movement. We only allow one "movement" action

//to occur at once so that touchpad devices don't get double hits.

KeyboardState keyState = Keyboard.GetState();

if (input.CurrentGamePadStates[0].DPad.Left == ButtonState.Pressed || keyState.IsKeyDown(Keys.Left))

{

//TODO: Update player velocity over X axis #2

}

else if (input.CurrentGamePadStates[0].DPad.Right == ButtonState.Pressed || keyState.IsKeyDown(Keys.Right))

{

//TODO: Update player velocity over X axis #3

}

else

{

//TODO: Update player velocity over X axis #4

}

// B button, or pressing on the upper half of the pad or space on keyboard or touching the touch panel fires the weapon.

if (input.CurrentGamePadStates[0].IsButtonDown(Buttons.B) || input.CurrentGamePadStates[0].IsButtonDown(Buttons.A) || input.CurrentGamePadStates[0].ThumbSticks.Left.Y > 0.25f ||

keyState.IsKeyDown(Keys.Space) || buttonTouched)

{

if (!gameOver)

{

//TODO: Fire the bullet

}

else if (gameOver)

finishCurrentGame();

}

}

}

8. 添加Helper方法来完成游戏:

(Code Snippet – Game Development with XNA – Gameplay Screen – finishCurrentGame method)

C#

private void finishCurrentGame()

{

foreach (GameScreen screen in ScreenManager.GetScreens())

screen.ExitScreen();

ScreenManager.AddScreen(new BackgroundScreen());

ScreenManager.AddScreen(new MainMenuScreen());

}

9. 编译应用程序。

在此部分的过程中,您创建一个游戏的输入处理子系统。 它将在创建游戏逻辑的下一个任务中使用。

下一篇就是最后一篇了,你的游戏就要出现了:)

手把手教用XNA开发winphone7游戏(四)相关推荐

  1. 手把手教用XNA开发winphone7游戏(三)

    XNA Game Studio 游戏循环 在这部分中您将重点两剩余部分的游戏 - - 重写Update 和 Draw 功能.有些大大可能看过相关微软的训练包,我这里主要是帮一些初学者.希望各位大大包含 ...

  2. 手把手教用XNA开发winphone7游戏(五)大结局

    Alien Game逻辑 在这最有一个部分你将创建game-specific logic和 helper方法和类.胜利就在眼前,你的第一个winphone7程序就要出现了,加油加油!!(感谢http: ...

  3. 手把手教用XNA开发winphone7游戏(二)

    相关下载地址:/Files/zouyuntao/Assets.rar XNA Framework游戏资源 这个环节我们将利用XNA将提供的大量的声音.图片和声音各种资源管理起来,使游戏开发过程更加容易 ...

  4. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...

    原标题:Python大牛手把手教你做一个小游戏,萌新福利! 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规 ...

  5. Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

    Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 [文末源码] 前言 一,效果展示 二,场景搭建 三,代码逻辑 四,完善场景 五,使用小结 前言 还在看别人的寻路逻辑?保姆级教程,一步步教 ...

  6. 教你如何开发VR游戏系列教程一:前言

    VR现在发展很快,也被炒的很热.因此,做VR应用开发(主要是游戏,也包含全景播放器等)的同学越来越多.AR学院(www.arvrschool.com)就准备了这么一份教程,给大家提供一些帮助和参考. ...

  7. python如何编游戏_手把手教你用python写游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,项目来自 ...

  8. 手把手教你作出扫雷小游戏

    前言 先解释下扫雷的玩法,随机点一个方块(这个是有运气成分在的),显示以这个方块为中心,3x3的格子里雷的总个数,玩家通过这个个数判断雷的位置,继续点击下一个方块,直到找到所有雷的位置,才算成功,中途 ...

  9. 手把手教你搭建开发环境之Java开发

    大家好呀,从今天开始,我们的手把手系列教程就正式开始啦. 如果你觉得本文对你有一些帮助,欢迎大家关注.点赞.分享给需要的小伙伴们,谢谢大家啦. 前言 Java虽然是一个比较老的语言,但到现在依然充满了 ...

最新文章

  1. 滑坡的剖面图怎么用计算机绘制,cad怎么画滑坡剖面
  2. CSharpGL(36)通用的非托管数组排序方法
  3. MFC——在视图窗口加载背景图片
  4. 机器学习实战之决策树
  5. 2018诺贝尔奖预测:美国11人,日本1人,中国无人入围
  6. SqlServer Alwayson 搭建报错:19405
  7. 分享5款提高工作效率的CAD插件,总有一款适合你
  8. DDS通信协议与安全实践
  9. 前端之JavaScript入门篇
  10. 如何取消WPS 2019启动就显示稻壳商城?关闭后如何打开?
  11. php对接建行h5网页支付
  12. java exchange类,JAVA5---Exchange使用
  13. 百度地图离线开发demo(初始化地图)
  14. Someone‘s Acting Sus....
  15. 测试基础---软件开发生命周期
  16. Spark的spark-*和blockmgr-*目录里是什东西,怎么来的
  17. 京东价格api,京东商品详情接口,京东api,京东优惠券接口,京东到手价api接口,京东app详情接口,接口代码对接实现价格监控接口,品牌维权接口,行业分析api接口代码分享
  18. HTML5交互性是什么意思,HTML5的结构和语义(5):交互
  19. 2019美和易思第十一期班主任选拔培训(贵州+重庆区域)拉开帷幕
  20. Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC(5.4) - 导出数据到Cypher脚本文件

热门文章

  1. 信息学奥赛一本通 1073:救援 | OpenJudge NOI 1.5 19:救援
  2. 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
  3. 两点(51Nod-1416)
  4. word-break 对一个字符串根据给出的字典判断是否可以根据字典切分(DP问题)
  5. 计算机综合基础作业,《计算机网络基础》综合作业(参考答案).doc
  6. C++:两种类实例化
  7. ubuntu16.04中如何将python3设置为默认
  8. Ubuntu 在终端下使用命令行打开pdf文件
  9. 2021.08.22学习内容torch.cat()和torch.stack()函数
  10. 面向对象的特征有哪些方面?