C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十九) 完美精灵之八面玲珑(WPF Only)③

首先我要对上一节中最后的ChangeAction()方法进行一些补充说明。该方法的作用之一是根据精灵的当前动作(Action)来设置精灵切图动画的起始帧和结束帧:

       如上图,我们可以很清楚的看到精灵这5个动作所分别对应的CurrentStartFrameCurrentEndFrame。这两个参数很重要是因为在精灵的生命线程中我们可以通过如下黄色区域代码来实现动态的更新精灵角色图片以形成连续动画:

        //精灵线程间隔事件

        private void Timer_Tick(object sender, EventArgs e) {

            ……

            //动态更改精灵图片源以形成精灵连续动作

            Body.Source = Source[(int)Direction, FrameCounter];

            FrameCounter = FrameCounter == CurrentEndFrame ? CurrentStartFrame : FrameCounter + 1;

        }

       举个例子:当精灵在跑步的时候FrameCounter5开始记数,然后以1为单位阶梯推进,目标是12,当到了12后再返回5继续重复前面的过程;当精灵在施法的时候,FrameCounter20开始记数,然后以1为单位阶梯推进,目标是25,当到了25后再返回20重复前面过程。其他的以此类推……

       充实了精灵动画原理后,我们再重新回到本节的主题上:如何使精灵在移动的时候表现出正确的朝向以及精确的定位与停止。

       大家是否还记得我在第六节结尾的地方略有提到相关的实现方法,但是并未对之进行实现,也算留给大家的一个小思考吧。但是本节我既然起了完美精灵这个题目,就不打算辜负所有朋友们的期待,我们首先分析实现8方向精灵的步骤:

       1、获取主角当前的坐标,这在第十五节中已经完美实现了,而且同样是定位到脚底的(Spirit.X,Spirit.Y)。

       2、获取目标坐标,即鼠标左键(或右键)点击的点的坐标,该坐标我们可以通过鼠标左键(或右键)点击事件轻松得到,这在前面的章节里有大量的提及。

       3、以以上两个坐标为参数,通过正切值计算公式计算出主角当前的朝向并返回一个数字代号(0-7分别对应8个方向)

       具体如何操作,且看下图:

 

       原理在上图右半部分的注释中描述很清楚;我依据此原理写了个通用判断朝向的方法,精华哦:

        /// <summary>

        /// 通过正切值获取精灵的朝向代号

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值