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

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

 2009-06-22 07:08:36 来源:WEB开发网   
核心提示: 然后我们通过这个数字就可以对应地图边缘的8个区域看是需要将地图下移还是上移或是左上移动等等,这里需要注意一个地方,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十三)牵引式地图移动模式①(4),当地图已经移动到了某个方向的尽头时,地图是不能再移动的

然后我们通过这个数字就可以对应地图边缘的8个区域看是需要将地图下移还是上移或是左上移动等等。这里需要注意一个地方,当地图已经移动到了某个方向的尽头时,地图是不能再移动的。所以综合以上,我们在Timer_Tick事件中这样来实现地图滚动:

        private void Timer_Tick(object sender, EventArgs e) {
            //第二种方法
            double mapleft = Canvas.GetLeft(Map);
            double maptop = Canvas.GetTop(Map);
            switch (getMouseArea()) {
                case 0:
                    if (maptop < 0) {
                        Canvas.SetTop(Map, Canvas.GetTop(Map) + scrollspeed);
                    }
                    break;
                case 1:
                    if (maptop < 0) {
                        Canvas.SetTop(Map, Canvas.GetTop(Map) + scrollspeed);
                    }
                    if (Map.Width + mapleft > this.ActualWidth) {
                        Canvas.SetLeft(Map, Canvas.GetLeft(Map) - scrollspeed);
                    }
                    break;
                case 2:
                    if (Map.Width + mapleft > this.ActualWidth) {
                        Canvas.SetLeft(Map, Canvas.GetLeft(Map) - scrollspeed);
                    }
                    break;
                case 3:
                    if (Map.Width + mapleft > this.ActualWidth) {
                        Canvas.SetLeft(Map, Canvas.GetLeft(Map) - scrollspeed);
                    }
                    if (Map.Height + maptop > this.ActualHeight) {
                        Canvas.SetTop(Map, Canvas.GetTop(Map) - scrollspeed);
                    }
                    break;
                case 4:
                    if (Map.Height + maptop > this.ActualHeight) {
                        Canvas.SetTop(Map, Canvas.GetTop(Map) - scrollspeed);
                    }
                    break;
                case 5:
                    if (Map.Height + maptop > this.ActualHeight) {
                        Canvas.SetTop(Map, Canvas.GetTop(Map) - scrollspeed);
                    }
                    if (mapleft < 0) {
                        Canvas.SetLeft(Map, Canvas.GetLeft(Map) + scrollspeed);
                    }
                    break;
                case 6:
                    if (mapleft < 0) {
                        Canvas.SetLeft(Map, Canvas.GetLeft(Map) + scrollspeed);
                    }
                    break;
                case 7:
                    if (maptop < 0) {
                        Canvas.SetTop(Map, Canvas.GetTop(Map) + scrollspeed);
                    }
                    if (mapleft < 0) {
                        Canvas.SetLeft(Map, Canvas.GetLeft(Map) + scrollspeed);
                    }
                    break;
            }
        }

以上的代码主要就进行一些位置计算并判断,重复的部分很多并不复杂。最后大家可以按下CTRL+F5,嘿嘿!地图可以任意移动了。

效果上来说地图是动了,可是主角还是始终处于窗口中的某一个位置保持不变(不管地图怎么移,它始终在窗口的左上角)。要实现跟随移动效果,这就需要我们根据前面所说的原理,在地图移动的同时对主角的X,Y坐标进行时时改变从而实现它的移动。关于主角如何在牵引式地图移动模式中的地图上移动及行走,我将在下一节进行详细的讲解,敬请关注。

上一页  1 2 3 4 

Tags:开发 WPF Silverlight

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