XNA入门教程----(二) 移动控制
2010-01-19 16:49
239 查看
上一章,我们主要介绍了
何谓XNA
并且做了第一个XNA HelloWorld
本文,将紧接着上文. 继续我们的XNA之旅.
上篇的最后,我们通过
MouseState ms=Mouse.GetState();//获得鼠标相关信息
获得了鼠标的Point位置,让自己的图像显示在鼠标的位置,因此做到了自定义光标的功能.
现在,我们对XNA的控制器作全面阐述
分为以下几种
Mouse 鼠标
Keyboard 键盘
GamePad 手柄
在默认模板建立的HelloWorld中,我们会发现
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
这其实就是判断如果按下了游戏手柄的Back按钮时,自动退出。
同样,我们可以通过以上Input的相关state来获得相关输入端的操作,如按钮,位置等等。
代码
//在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;
}
以上代码,我们先获得了当前鼠标的位置,并计算出当前点到目标点的最短路径。
之后将其存储,这样,如果没有动作我们每次循环便可自动继续进行相关的自动移动了。
通过以上代码,我们实现了用鼠标或键盘的简单控制。
源文件下载
To Be Continue....
何谓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入门教程----(三) 简单的动画
相关文章推荐
- XNA入门教程----(二) 移动控制
- Genesis-3D 入门教程—20.脚本控制与分割动画
- 版本控制入门插图教程
- JavaScript强化教程——DOM编程(两种控制div移动的方法)
- HTML5移动开发框架 Sencha Touch 入门教程汇总
- Shell入门教程:流程控制(5)for 循环
- MVC5+EF6 入门完整教程12--灵活控制Action权限
- cocos2d-x游戏实例 《简单棋》入门尝试(四) 控制棋子移动的一些分析
- JavaScript强化教程——DOM编程(两种控制div移动的方法)
- J2ME 2D小游戏入门之旅(三)控制飞机移动
- JavaScript强化教程——DOM编程(两种控制div移动的方法)
- java入门教程-2.4Java流程控制
- 坦克游戏教程二:实现坦克移动以及方向控制
- shell入门教程(4)-作业控制
- XNA Build入门中文教程-Hello world
- XNA入门教程----(三) 简单的动画
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动
- MVC5+EF6 入门完整教程12--灵活控制Action权限
- 版本控制工具 GIT入门教程
- XNA入门教程----(三) 简单的动画