本章我们将介绍GDI+的基本概念、Windows系统下本地图形操作的扩展库,并讨论游戏开发中的最重要方面之一:冲突检测算法(collision detection algorithm)。尽管游戏开发者使用GDI+函数在屏幕上绘制图像,然而图像之间的交互作用却是由冲突检测算法决定的。这将使得程序能够判断何时一个图像位于另一个图像之上,并采取合适的操作。比如:当一个球撞击一面墙时,球将产生弹跳行为。
为了达到这些目标并阐明这些概念,我们将演示如何创建一个名为.Nettix的游戏。学习一门新的编程语言时,一般都会先编写“Hello World”程序。学习编程游戏时,Tetris是首先要尝试编写的最佳游戏程序。在这个简单的游戏中,您可以看到我们使用了许多基本概念,例如,基本的图形例程、冲突检测以及用户输入处理。
首先,您将接触到基本的GDI+概念,了解到冲突检测算法的思想,藉此您将具备必要的技术背景来编写本章中作为示例的一个游戏程序(参见图1-1)。
VB.Net游戏编程入门经典(1)图1-1 Nettrix,本章的游戏程序示例
1.1 GDI+基本概念
GDI+是新的.NET Framework中基于类的二维图形、图像和版面的应用编程接口(API)。
与旧版本的GDI相比,GDI+具有一些实质性的改进,包括更好的性能、更多的功能,它甚至可以在64位计算机系统上运行,GDI+确实值得认真研究。关于GDI+的新特点,我们将在以下章节进行讨论。
1.1.1 路径梯度
路径梯度(Path Gradient)允许程序使用梯度来更加灵活地填充二维图形,如图1-2所示。
图1-2 使用路径梯度
1.1.2 α混合
GDI+是与ARGB色彩一同工作的,这意味着每一种色彩都是由红色值、绿色值和蓝色值混合并加上一个与透明度相关的α值来定义的。可以对透明度从0(完全透明)到255(不透明)进行赋值。0~255之间的值使色彩在不同程度上部分透明,它们中的任一个值都将使得背景图像凸显出来。
图1-3显示了一个具有不同程度透明的长方形,如果把一个图像放在它下面,将会看到那个图像,就像透过玻璃观察一样。
图1-3 在一个实心颜色位图上从0到255改变α值
1.1.3 基数样条函数
VB.Net游戏编程入门经典(1)使用基数样条函数可以创建一些平滑线来连接给定的点集,如图1-4所示。
图1-4 使用样条函数创建一条连接点集的平滑曲线
从图1-4中可以看到,该样条曲线确定了起点和终点(图1-4中,起点和终点用1和4标识),另外两个点紧靠这条曲线,但样条曲线并不通过它们(点2和点3)。
1. 使用3x3矩阵变换对象
当处理一系列图形变换时,应用变换(旋转、平移或缩放)方法非常有用,它可以加速图形变换的执行。图1-5显示了图形变
换的一个示例。图1-5 对图形实施旋转和缩放变换
2. 模糊
模糊用来对图形进行平滑处理以避免出现阶梯状外观,比如当对图像放大时。图1-6显示的是实施了该操作的一个示例。
图1-6 对图像实施模糊操作
注意
VB.Net游戏编程入门经典(1)本书中,我们将给出GDI+前两种新特点的示例:本章给出路径梯度的示例,下一章给出α混合的示例。对于GDI+的其他特点,在.NET Framework的SDK中有很多相应的示例代码。