WEB开发网
开发学院软件开发C语言 C#开发WPF/Silverlight动画及游戏系列教程(Game C... 阅读

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①

 2009-06-22 07:08:36 来源:WEB开发网   
核心提示: 这样就创建好了这8个区域中的其中一个(正下方区域),其他7个的创建和实现方法依次类推,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①(3),很简单就不累述了,好了,也是我推荐的方法,至于要如何实现它,我们按CTRL+F5来

这样就创建好了这8个区域中的其中一个(正下方区域),其他7个的创建和实现方法依次类推,很简单就不累述了。好了,我们按CTRL+F5来测试一下,当鼠标停留在窗体正下方的那个蓝色长方形区域时,地图会非常平滑的向上移动,这样就实现了我们视觉上的窗口向下取景效果。

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①

图片看不清楚?请点击这里查看原图(大图)。

从上图可以看出,地图向上移从而实现窗口向下取景的视觉效果,这就是地图的相对移动原理。

通过实体介质来实现地图移动的方式具有直观、代码简单、逻辑不复杂的特性,但性能不好。

接下来看第二种方法,此方式不需要创建滚动介质,而是时时根据鼠标位置是否处于这8个区域中的任意一个进行对应的地图移动。这种方法相对于上一种方法来说虽然不够直观且需要的逻辑代码较多而繁,但它具有更高的性能与实用性,也是我推荐的方法。至于要如何实现它,我们首先需要写一个方法,该方法用来判断鼠标当前的位置并返回一个数字:

        //根据鼠标的位置获取鼠标所处的区域代号
        //0代表正上方区域(即0点钟位置)然后其他7个区域按顺时针依次为1,2,3,4,5,6,7
        int distance = 80; //定义距离边缘多少即开始牵引地图
        private int getMouseArea() {
            Point MousePosition = Mouse.GetPosition(Carrier); //获取鼠标当前处于窗口中的位置
            int result = -1;
            //如果鼠标未超出窗口
            if (MousePosition.X >= 0 && MousePosition.Y >= 0) {
                //根据8种情况返回8个数字
                if (MousePosition.X >= 190 && MousePosition.X <= 570) {
                    if (MousePosition.Y <= distance) {
                        result = 0;
                    } else if (MousePosition.Y >= 500 - distance) {
                        result = 4;
                    }
                } else if (MousePosition.Y >= 125 && MousePosition.Y <= 375) {
                    if (MousePosition.X <= distance) {
                        result = 6;
                    } else if (MousePosition.X >= 760 - distance) {
                        result = 2;
                    }
                } else if ((MousePosition.X < 190 && MousePosition.Y <= distance)
|| (MousePosition.Y < 125 && MousePosition.X <= distance)) {
                    result = 7;
                } else if ((MousePosition.X > 570 && MousePosition.Y <= distance)
|| (MousePosition.Y < 125 && MousePosition.X >= 760 - distance)) {
                    result = 1;
                } else if ((MousePosition.X > 570 && MousePosition.Y >= 500 - distance)
|| (MousePosition.Y > 375 && MousePosition.X >= 760 - distance)) {
                    result = 3;
                } else if ((MousePosition.X < 190 && MousePosition.Y >= 500 - distance)
|| (MousePosition.Y > 375 && MousePosition.X <= distance)) {
                    result = 5;
                }
            }
            return result;
        }

上一页  1 2 3 4  下一页

Tags:开发 WPF Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接