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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法

 2009-06-22 08:32:38 来源:WEB开发网   
核心提示: 这里我用菱形方块真实的模拟障碍物视觉效果,接下来就是在上一节代码的基础上将窗口鼠标左键事件中相关的坐标值通过上面写的两个方法getGamePosition(double x, double y)和getWindowPosition(double x, double y)进行替换,C#开发

这里我用菱形方块真实的模拟障碍物视觉效果。接下来就是在上一节代码的基础上将窗口鼠标左键事件中相关的坐标值通过上面写的两个方法getGamePosition(double x, double y)和getWindowPosition(double x, double y)进行替换,实际上改动的地方不过4处,我用黄色背景色进行了标识(…….号表示该段代码与上一节不变),具体如下:

        private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
            Point p = e.GetPosition(Carrier);
            //进行坐标系缩小
            Point start = getGamePosition(Canvas.GetLeft(Spirit) + SpiritCenterX,
 Canvas.GetTop(Spirit) + SpiritCenterY);
            Start = new System.Drawing.Point((int)start.X, (int)start.Y); //设置起点坐标
            Point end = getGamePosition(p.X, p.Y);
            End = new System.Drawing.Point((int)end.X, (int)end.Y); //设置终点坐标
            …….
            if (path == null) {
                MessageBox.Show("路径不存在!");
            } else {
                Point[] framePosition = new Point[path.Count]; //定义关键帧坐标集
                for (int i = path.Count - 1; i >= 0; i--) {
                    //从起点开始以GridSize为单位,顺序填充关键帧坐标集,并进行坐标系放大
                    framePosition[path.Count - 1 - i] = getWindowPosition(path[i].X, path[i].Y);
                }
            …….
                //用白色点记录移动轨迹
                for (int i = path.Count - 1; i >= 0; i--) {
                    rect = new Rectangle();
                    rect.Fill = new SolidColorBrush(Colors.Snow);
                    rect.Width = 4;
                    rect.Height = 4;
                    Carrier.Children.Add(rect);
                    Point target = getWindowPosition(path[i].X, path[i].Y);
                    Canvas.SetLeft(rect, target.X);
                    Canvas.SetTop(rect, target.Y);
                }
            }
        }

上一页  1 2 3 4 5 6  下一页

Tags:开发 WPF Silverlight

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