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

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

 2009-06-22 08:32:38 来源:WEB开发网   
核心提示: W(x)=(G(x)-G(y))*sinα W(y)=(G(x)+G(y))*cosα G(x)=(W(y)*sinα+W(x)*cosα)/2*sinα*cosα G(y)=(W(y)*sinα-W(x

    W(x)=(G(x)-G(y))*sinα
    W(y)=(G(x)+G(y))*cosα
    G(x)=(W(y)*sinα+W(x)*cosα)/2*sinα*cosα
    G(y)=(W(y)*sinα-W(x)*cosα)/2*sinα*cosα

这乃本节之精华所在,好比上帝的右手,阿拉丁的神灯无所不能、天下无敌!汗一个。。。好了,有了该法宝,那么我们开始练练手吧,看看一个斜度60的地图是如何构造的。

首先我将该公式用代码来表示写成两个方法,方法名很明确,它们的作用是分别获取某点在G坐标系和W坐标系中的坐标:

        //将窗口坐标系中的坐标换算成游戏坐标系中的坐标(缩小操作)
        private Point getGamePosition(double x, double y) {
            return new Point(
                (int)((y + (x / 1.732)) / GridSize),
                (int)((y - (x / 1.732)) / GridSize)
            );
        }
        //将游戏坐标系中的坐标换算成窗口坐标系中的坐标(放大操作)
        private Point getWindowPosition(double x, double y) {
            return new Point(
                (x - y) * 0.886 * GridSize,
                (x + y) * 0.5 * GridSize
            );
        }

这里我进行了简单的正弦与余弦的取值,即sin60=1.732,cos60=0.5,那么(sin60)/2=1.732/2=0.886。一张地图中是不可能存在两个α值的,所以本例在定义好α=60度后,我直接取它的正弦与余弦值这将有效的提高运算效率。

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

Tags:开发 WPF Silverlight

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