您的位置:首页 > 其它

从修改“Space War Starter Kit”例子学习XNA

2006-09-12 00:56 483 查看
最近要忙的事情特别多,有社区的事情,自己也忙的很,有一段时间没研究XNA了,不过XNA仍然是不错的引擎,所以我是不会放弃的,我们XNA爱好者群也有好多热心的群友一直分享着自己的成果,比如“佐罗大侠(QQ:230206268),经常推出自己的视频教程,真是要谢谢他。也希望其他群友加油,其实每个人都分享一点,那每个人都得到无数点。

废话少说,下面是教程(完整WORD文档,请到QQ群:26888039下载)。

这个教程教你从零开始安装XNA开发环境以及修改XNA自带的例子“Space War Starter Kit”来学习和提升XNA开发技能。
如果您是新手,请参考下列步骤来搭建您的XNA开发环境。

第一步:下载和安装DirectX SDK
http://www.microsoft.com/downloads/details.aspx?FamilyId=C72D9F1E-53F3-4747-8490-6801D8E8B4EF&displaylang=en

第二步:下载和安装Visual C# 2005 Express Edition
http://msdn.microsoft.com/vstudio/express/visualcsharp/download/

第三步:下载和安装Microsoft XNA Game Studio Express (Beta)
http://www.microsoft.com/downloads/details.aspx?familyid=21e979e3-b8ae-4ea6-8e65-393ea7684d6c&displaylang=en

OK,接下来就让我们一起“把玩把玩”XNA自带的例子:“Space War Starter Kit”。
首先,请您打开刚安装的Visual C# 2005 Express Edition

接着,新增一个Project(File->New Project),并选择“Space War Starter Kit”(如下图所示),按下OK按钮。



现在您应该可以编译并运行这个刚刚创建的游戏例子“Space War Starter Kit”了。请选择Debug->Start Without Debugging 或则直接按下 Ctrl+F5组合键来执行这个游戏。(结果如下图)



如果您没有XBOX360游戏机,那您将无法选择上图所示的开始菜单。因为“Space War Starter Kit”这个游戏默认是在XBOX360上运行的,所以不受键盘控制,不过我们可以修改它,把它改成PC版本。具体的做法是打开“common”目录下的“GamePadHelper.cs”文件,把下面所示的代码(在文件第一行):

//#define USE_KEYBOARD

改成如下代码(既把前面的注解屏蔽符号//去掉).

#define USE_KEYBOARD

再次按下Ctrl+F5编译和运行这个游戏。这次就可以使用您的键盘控制游戏了,你会发现键盘的A,B键对应游戏的A,B按纽(见上图),不过我们也可以自己定义功能按键。比如,游戏默认是使用S, W, D, X来控制飞船移动的,我发现控制起来很麻烦,于是我把它改成W, A, S, D控制飞船移动,使用空格键射击。修改的具体方法是:往下翻到65行,您应该会看到以下代码:

#if USE_KEYBOARD
// Setup Dictionary with defaults
keyMapping.Add(GamePadKeys.Start, Keys.Home);
keyMapping.Add(GamePadKeys.Back, Keys.End);
keyMapping.Add(GamePadKeys.A, Keys.A);
keyMapping.Add(GamePadKeys.B, Keys.B);
keyMapping.Add(GamePadKeys.X, Keys.X);
keyMapping.Add(GamePadKeys.Y, Keys.Y);
keyMapping.Add(GamePadKeys.Up, Keys.Up);
keyMapping.Add(GamePadKeys.Down, Keys.Down);
keyMapping.Add(GamePadKeys.Left, Keys.Left);
keyMapping.Add(GamePadKeys.Right, Keys.Right);
keyMapping.Add(GamePadKeys.LeftTrigger, Keys.LShiftKey);
keyMapping.Add(GamePadKeys.RightTrigger, Keys.RShiftKey);
keyMapping.Add(GamePadKeys.ThumbstickLeftXMin, Keys.S);
keyMapping.Add(GamePadKeys.ThumbstickLeftXMax, Keys.D);
keyMapping.Add(GamePadKeys.ThumbstickLeftYMin, Keys.X);
keyMapping.Add(GamePadKeys.ThumbstickLeftYMax, Keys.W);
keyMapping.Add(GamePadKeys.ThumbstickRightXMin, Keys.J);
keyMapping.Add(GamePadKeys.ThumbstickRightXMax, Keys.L);
keyMapping.Add(GamePadKeys.ThumbstickRightYMin, Keys.M);
keyMapping.Add(GamePadKeys.ThumbstickRightYMax, Keys.I);
#endif

把上面整个代码块改成下面代码块。.

#if USE_KEYBOARD
// Setup Dictionary with defaults
keyMapping.Add(GamePadKeys.Start, Keys.Home);
keyMapping.Add(GamePadKeys.Back, Keys.End);
keyMapping.Add(GamePadKeys.A, Keys.Space);
keyMapping.Add(GamePadKeys.B, Keys.B);
keyMapping.Add(GamePadKeys.X, Keys.X);
keyMapping.Add(GamePadKeys.Y, Keys.Y);
keyMapping.Add(GamePadKeys.Up, Keys.Up);
keyMapping.Add(GamePadKeys.Down, Keys.Down);
keyMapping.Add(GamePadKeys.Left, Keys.Left);
keyMapping.Add(GamePadKeys.Right, Keys.Right);
keyMapping.Add(GamePadKeys.LeftTrigger, Keys.LShiftKey);
keyMapping.Add(GamePadKeys.RightTrigger, Keys.RShiftKey);
keyMapping.Add(GamePadKeys.ThumbstickLeftXMin, Keys.A);
keyMapping.Add(GamePadKeys.ThumbstickLeftXMax, Keys.D);
keyMapping.Add(GamePadKeys.ThumbstickLeftYMin, Keys.S);
keyMapping.Add(GamePadKeys.ThumbstickLeftYMax, Keys.W);
keyMapping.Add(GamePadKeys.ThumbstickRightXMin, Keys.J);
keyMapping.Add(GamePadKeys.ThumbstickRightXMax, Keys.L);
keyMapping.Add(GamePadKeys.ThumbstickRightYMin, Keys.M);
keyMapping.Add(GamePadKeys.ThumbstickRightYMax, Keys.I);
#endif

现在您应该可以使用键盘的W, A, S, D按键来控制游戏了。



经过试玩,您是不是觉得子弹的移动速度太慢了,不够刺激,OK,让我们给它加速,请您打开Ship.cs文件,翻到29行。

找到下面这行代码:
private const float shotSpeed = 150.0f;
并把其改成下面这一句(其实就是把150改成250,您应该用你的鼻子猜到这个数字代表什么了吧)
private const float shotSpeed = 250.0f;

再次运行游戏,这次您应该看到高速飞驰的子弹了。

如果您觉得子弹连发射击不好,那让我们为子弹填加一个扩散效果。同样在Ship.cs文件,请翻到182行找到下面代码块。
else
{
bullets.Add(player,
Vector3.Transform(bulletOffsets[(int)player, (int)SpacewarGame.Players[(int)player].ShipClass], Shape.World),
Velocity + Vector3.Multiply(direction, shotSpeed),
Rotation.Z,
time, particles);
}
把上面代码改成下面所示的代码:
else
{
bullets.Add(player,
Vector3.Transform(bulletOffsets[(int)player, (int)SpacewarGame.Players[(int)player].ShipClass], Shape.World),
Velocity + Vector3.Multiply(direction, shotSpeed),
Rotation.Z,
time, particles);

direction.X = (float)(-Math.Sin(Rotation.Z + 0.5f));
direction.Y = (float)(Math.Cos(Rotation.Z + 0.5f));
direction.Normalize();

bullets.Add(player,
Vector3.Transform(bulletOffsets[(int)player, (int)SpacewarGame.Players[(int)player].ShipClass], Shape.World),
Velocity + Vector3.Multiply(direction, shotSpeed),
Rotation.Z,
time, particles);

direction.X = (float)(-Math.Sin(Rotation.Z - 0.5f));
direction.Y = (float)(Math.Cos(Rotation.Z - 0.5f));
direction.Normalize();

bullets.Add(player,
Vector3.Transform(bulletOffsets[(int)player, (int)SpacewarGame.Players[(int)player].ShipClass], Shape.World),
Velocity + Vector3.Multiply(direction, shotSpeed),
Rotation.Z,
time, particles);
}

现在你是不是又想每次增加每次射击的子弹数量?没问题,您只要打开settings.xml文件,并下翻到44行。

找到下列代码.
<Max>5</Max>
改成.
<Max>25</Max>



最后,我们再来一个更有意思的:设置太阳的牵引力。同样是settings.xml文件,请翻到13行。
.找到以下代码
<GravityStrength>500000</GravityStrength>
把其改成下面代码,看看会有什么效果。
<GravityStrength>-800000</GravityStrength>

有任何建议或者疑问,请联系 Submit@XNASpot.com .
原文www.xnaspot.com 翻译:XNA爱好者QQ群: 26888039 (www.xnacn.net) – 转载请保留此行信息
下次会有更精彩的内容,也欢迎热心的您投稿!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: