这一期开始我们使用Rust编写一个乒乓球小游戏,这个游戏虽然简单但也“麻雀虽小五脏俱全”从这个游戏入门游戏开发再好不过了。
游戏界面包含三个部分,一个窗口一个球拍和一个乒乓球。可以通过按左右上下方向键在窗口范围内移动球拍击打乒乓球,乒乓球遇到窗口边缘或球拍时反弹,遇到窗口底部时即游戏失败。我们后面还可以给这个游戏添加记分器,通过增加乒乓球的移动速度提升游戏的难度甚至还可以增加双人对战模式增加游戏的趣味性。
在编写游戏前我们需要先了解几个游戏编程和图像编程中几个基本的概念:
第一个是像素:可以把我们的屏幕想象成是有很多个大小一样的方格组成的
每个方格就称为一个像素,用px表示,在图像编程中,经常使用像素作为长度单位,比如我们看到照片的分辨率为600乘800像素,就是这个图片的宽为600像素,高为800像素。
第二个是坐标系,用于确定图像的位置,一般坐标系的原点在窗口的左上角,也就窗口左上角的位置的坐标为(0,0)。水平向右为正向x轴,垂直向下为正向y轴,这跟我们数学课中遇到的坐标系可能不一样,数学里一般都是垂直向上是正向的。如果我们设置一个图像的位置在(100,200)位置,也就是这个图像的左上角在坐标系的x轴为100,y轴为200的位置,长度单位就是像素。
第三个需要了解颜色值,颜色值用于表示图像的颜色,最常用的表示方法为RGBA表示法,也就是使用三原色红绿蓝和透明度表示颜色。
第四个需要了解一个比较抽象的感念——帧,我们是通过播放连续的图片形成动画效果的,可以说电影视频就是通过很多张静态照片的连续播放形成的。每次播放一个照片我们称为1帧,每秒钟内播放的帧越多视频动画的效果就越流畅,一般我们每秒钟播放30帧。也就是每秒钟要完成30次图像的重新绘制。
了解了这些概念我们就可以开始编写乒乓球小游戏了,使用cargo new 创建一个game_pingpang项目,接下来我们需要找一个游戏引擎,因为直接调用底层的绘图API工作量比较大,游戏引擎帮我们做了封装,使用起来相对简单。这里我们选用Rust编写的piston游戏引擎,在github上打开piston项目。
这里有个入门的例子,我们按照这个说明编写一个绘制红色长方形的例子。打开Cargo.toml文件在denpendencies添加piston_window依赖。在把示例代码复制到main.rs文件里。复制好后,保存,使用cargo run运行下项目,如果是第一次运行会比较慢因为需要下载配置的依赖包。我这边先前运行过所以比较快。在我们的电脑上就打开了个窗口上面有个红色的小四方块。如果你在运行中有报错,可以使用rustc --version命令查看下当前使用的rust版本,我当前使用的是最新的rust 1.38.0,如果你使用的版本比这个旧,可以执行rustup update命令更新下rust。
rust当前也在快速更新中也越来越易用,比如我们先前遇到的由于使用习惯写if表达式时总是带上小括号引起的错误,在rust最新的版本中已经兼容了这种写法,只是给出了一个不影响程序运行的警告,不再是一个错误了。
这一期就先到这里,下一期我们分析下这段示例代码。
Everyone changes. Secret of success is to change before you have to.
|
请发表评论