读书人

XNA4.0学习札记2:控制精灵和碰撞检测

发布时间: 2013-04-09 16:45:09 作者: rapoo

XNA4.0学习笔记2:控制精灵和碰撞检测

精灵的控制和碰撞检测


上一节我们了解了精灵的绘制,移动以及动画的实现,并且在最后我们实现了三个环的简单动画,今天我们学习下如何通过设备控制精灵,这一节的内容比较简单,很好理解,在这里我先把控制精灵的全部代码贴上来,方便接下来的学习!


这是一副骷髅精灵位图,跟三环动画一样在类最前面加上那几行代码,并且在loadcontent函数中加载位图,并且在draw函数中绘制出位图,为了不与第一幅重复,我们这里设置绘制的坐标为(100,100),然后运行,可以看到屏幕中有两个动画在旋转!


2:使用键盘控制精灵的移动!

这里需要一点新知识了,键盘输入是通过Microsoft.XNA.Framework.Input命名空间中的Keyboard类来处 理的。Keyboard 类有一个叫做 GetState 的静态方法,用 KeyboardState 结构的形式返 回键盘目前的状态。

KeyboardState 结构中包含三个能够满足您大部分的功能需求的关键方法如下:

Keys[] GetPressedKeys() 返回一个在方法被调用时被按下的键的数组

bool IsKeyDown(Keys key) 返回 true 或 false,取决于方法调用时参数所代表的 按键是否被按下

bool IsKeyUp(Keys key) 返回 true 或 false,取决于方法调用时参数所代表的 按键是否被释放


举个例子,如果要检测键盘的A键是否被按下,则该这样来写代码:

if(Keyboard.GetState( ).IsKeyDown(Keys.A));

好了,现在我们可以来着手实现键盘的上下左右控制三环动画的移动了,这里跟昨天一样,需要加一个Vector2的变量ringpos1,并且在draw的方法中改变三环动画的位置为ringpos1,

接下来就应该在update方法中实现移动的距离更新,代码如下:


这两个精灵,骷髅头暂时是固定的,我们可以用键盘控制三环精灵,实现碰见检测可以利用矩形包装法,也就是用两个矩形包装好精灵,然后检查两个矩形是否相交,则可判断是否碰撞,效果如下:

XNA4.0学习札记2:控制精灵和碰撞检测

接下来我们需要做的就是检测两个矩形在屏幕上是否相交,碰巧XNA为我们提供的矩形类里面有这样一个成员函数可以检测矩形相交,新加一个成员函数,代码如下:


protected bool colline()            //检测碰撞的代码        {            Rectangle ringRect = new Rectangle((int)ringpos1.X, (int)ringpos1.Y, ringframeSize.X, ringframeSize.Y);            Rectangle skullErct = new Rectangle((int)skullpos2.X, (int)skullpos2.Y, skullframeSize.X, skullframeSize.Y);            return ringRect.Intersects(skullErct);        }
在程序中新建了两个矩形区域,构造方法中分别给予了两个精灵的位置,返回值为布尔类型,利用了矩形类的intersects方法,接下来可以在update方法中检测碰撞了

if(colline() ).....则执行相关的事情,在这里我们调用Exit函数,如果碰撞,就马上终止程序(虽然这不符合逻辑,这里只是为了演示).


关于碰撞检测,需要对于矩形的大小和游戏效率做出权衡,保证在用户眼睛无法分辨的时候最佳,不可盲目追求碰撞精确性而做过多操作,只会牺牲游戏效率这是不值得的,

由于本节内容很简单,到此为止


下一期:用户自定义精灵类!





读书人网 >移动开发

热点推荐