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)*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度后,我直接取它的正弦与余弦值这将有效的提高运算效率。
Tags:开发 WPF Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››WPF学习笔记12. Binding (5)
- ››WPF学习笔记11. Binding (4)
- ››WPF学习笔记10. Binding (3)
- ››WPF学习笔记9. Binding (2)
- ››WPF学习笔记8. Binding
更多精彩
赞助商链接