您的位置:首页 > 其它

XNA入门教程----(二) 移动控制

2010-01-19 16:49 239 查看
上一章,我们主要介绍了

何谓XNA

并且做了第一个XNA HelloWorld

本文,将紧接着上文. 继续我们的XNA之旅.

上篇的最后,我们通过

MouseState ms=Mouse.GetState();//获得鼠标相关信息

获得了鼠标的Point位置,让自己的图像显示在鼠标的位置,因此做到了自定义光标的功能.

现在,我们对XNA的控制器作全面阐述

XNA的控制器

在XNA的控制器,主要定义在 Microsoft.Xna.Framework.Input下,

分为以下几种

Mouse 鼠标

Keyboard 键盘

GamePad 手柄

在默认模板建立的HelloWorld中,我们会发现

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

this.Exit();

这其实就是判断如果按下了游戏手柄的Back按钮时,自动退出。

同样,我们可以通过以上Input的相关state来获得相关输入端的操作,如按钮,位置等等。

一个简单的例子

现在,我们尝试在界面中绘制一个简单的 sprite(精灵),并实现鼠标和键盘的同时控制

代码

//在update中加入鼠标位置的最短路径计算

MouseState state1 = Mouse.GetState();

if (state1.LeftButton == ButtonState.Pressed)

{

IPathFinder pathFinder = new PathFinderFast(m_matrix);

pathFinder.Formula = HeuristicFormula.Manhattan;

pathFinder.SearchLimit = 2000;

m_path = pathFinder.FindPath(new Vector2((int)this.Position.X, (int)this.Position.Y), new Vector2(state1.X , state1.Y ));

}

if (this.m_path != null && this.m_path.Count() != 0)

{

int index = this.m_path.Count() - 1;

this.Position = new Vector2(this.m_path[index].X, this.m_path[index].Y);

this.m_path.RemoveAt(index);

return;

}

以上代码,我们先获得了当前鼠标的位置,并计算出当前点到目标点的最短路径。

之后将其存储,这样,如果没有动作我们每次循环便可自动继续进行相关的自动移动了。

通过以上代码,我们实现了用鼠标或键盘的简单控制。



但是

或许大家发现了,这里的sprite是单帧的移动并非动画,如何让人物运动起来?请关注下回分解。

源文件下载

To Be Continue....

本系列列表

XNA入门教程----(一)

XNA入门教程----(二) 移动控制

XNA入门教程----(三) 简单的动画

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: