轻松学习E-Prime(三十三):Canvas Object *

这一节不太重要,但是很有趣,算是给您放松用的。Canvas能实现一些很特殊的功能,Canvas意思是画布,Canvas Object允许你在屏幕上画图,如画矩形、圆形、或者显示文字。。假设你想用E-Prime制作游戏的话,最好知道怎么用Canvas。
为了看到它的作用,首先您得像我这么做,先像我如此安排树状图里的内容:


非常简单的树状图

没错,就这么简单,一个Inline就够了。然后输入下面的代码:

Dim cnvs As Canvas
Set cnvs = Display.Canvas
Dim x, y, w, h As Integer
h = 100
w = 200
x = 100
y = 100
cnvs.Rectangle x, y, w, h
Sleep 3000

运行,没错,就这样运行。这样,你就会看到我们在屏幕x为100,y为100的地方画了一个矩形(注意一下,显示器x轴正方向向右,y轴正方向向下),它高为100,宽为200。没错,就是我们上面设置的数值。
现在我解释一下上面的代码,它们的意思是:

定义一个名叫cnvs的Canvas的实例;
设置它为Display(也就是我们的显示器,默认名字Display,除非你有多个显示器,否则一般不改动)这个显示器的Canvas;(记得Canvas意为画布)
设置四个整数x,y,w,h,下面四行给它们相应赋值;
画一个矩形,位置在x,y,宽为w,高为h;(这四个字母是代表我们刚才刚定义的四个整数的变量名,. Rectangle表示画矩形,你可以看看后面的代码,像.Pie,就表示画扇形)
等待3000ms。(Sleep的作用是等待,如果没有这句,我们就没法看到结果)

不知您理解了没有,如果没有理解,试着修改x,y,w,h的值,这样就能帮助您理解。
上面的代码也可以替换成如下的这段:

Dim cnvs As Canvas
Set cnvs = Display.Canvas
cnvs.Rectangle 100, 100, 200, 100
Sleep 3000

效果是完全一样的。
注意一下,Rectangle后面的四个参数(理解成数字就好)一定是按格式的,它们分别代表x轴位置,y轴位置,宽,高,你只能输入,不能随意调换位置。
当然,我也可以改变其边框颜色,或者填充颜色。例如,我们这样修改:

Dim cnvs As Canvas
Set cnvs = Display.Canvas
Dim x, y, w, h As Integer
h = 100
w = 200
x = Display.XRes/2-w/2
y = Display.YRes/2-h/2
cnvs.FillColor = CColor("yellow")
cnvs.PenColor = CColor("green")
cnvs.PenWidth = "10"
cnvs.Rectangle x, y, w, h
Sleep 3000

这样,就会在屏幕正中央呈现一个矩形,填充颜色是黄色,边框颜色是黄色。
语句中,Display.XRes和Display.YRes的作用是获取显示屏的宽度和高度。一个矩形的x轴位置在显示器的宽度的二分之一,减去w(其宽度)的二分之一;y轴位置在显示器的高度的二分之一,减去h(其高度)的二分之一。那么这个矩形就能正好呈现在屏幕正中央。
而FillColor决定了矩形的填充色,PenColor决定了矩形的边框色,PenWidth决定了矩形边框的宽度。您不妨试着修改FillColor为”red”,PenColor为”black”,PenWidth为20,看看有什么不同,这样能方便您理解。颜色还可以用RGB值来表示,如CColor("0,255,0")代表绿色。里面的三个数值就是对应RGB值。
当然,我们也可以画圆形甚至扇形,比如你现在再试试下面这段:

Dim cnvs As Canvas
Set cnvs = Display.Canvas
Dim r, startAngle, endAngle As Integer
r = 50
startAngle = 25
endAngle = 60
cnvs.PenWidth = "4"
cnvs.Pie Display.XRes/2, Display.YRes/2, r, startAngle, endAngle
Sleep 3000

其中的startAngle决定了扇形起始角度,endAngle决定了终止角度,r代表的是半径。同样,Pie后面的五个参数也是固定位置的,分别代表x轴位置,y轴位置,半径,起始角度,终止角度。
如果您打算画圆形,startAngle设为0,endAngle设为360就好了。当然,这会存在一个问题,有一个黑色的线段在角度为0的位置。
其实,画圆形的话E-Prime有其专门的方法,如下面是其例子:

Dim cnvs As Canvas
Set cnvs = Display.Canvas
Dim rad As Integer
rad = 150

cnvs.PenWidth = 5
cnvs.PenColor = CColor("0,255,0")
cnvs.Circle Display.XRes/2, Display.YRes/2, rad
Sleep 3000

还可以显示字,如下面的例子:

Dim cnvs As Canvas
Set cnvs = Display.Canvas
cnvs.TextBackColor = CColor ("red")

cnvs.TextColor = CColor ("blue")
cnvs.Text Display.XRes/2, Display.YRes/2, "Get Ready!"
Sleep 3000

除此之外,还有很多很多的功能,比如画线、通过MoveTo和LineTo勾勒特殊图形、通过Polygon和数组来画多边形、保存或显示图片等等等等。由于数量多,学习难度等原因,这里不一一做介绍。有兴趣的话请大家自己打开帮助文档查看,每个条目里都有示例代码。


Canvas的属性

假设能学好这个,那几乎可以替代ImageDisplay和TextDisplay了。
如果您试图把这一节学到的东西用在ImageDisplay和TextDisplay上,就要设置ImageDisplay和TextDisplay的Duration为较低的数值,按键中的Limit Time则较高,Clear After一定不要勾选(设置为No)。因为我在【轻松学习E-Prime(二十):Clear After,Echo这一切暗示了什么?】这一节说过,各个Display实际上是一块一块的东西,它们会相互覆盖。Clear After决定了它们在呈现后是否清除前面的内容。
可以查看“示例程序3-13”,然后试着修改上面我说过的东西,试着自己去尝试发现。由于Canvas里的内容至少在福师大本科阶段乃至研究生阶段的实验中本身极少用到,(实际上从来就不会用到)我也不打算详细说明。不过可以说,Canvas的功能是非常强大的,如果能学会,是很不错的一件事。

在本教程的示例文件中,包含一个枪战游戏,就用上了Canvas。


此为开源免费教程。教程所用资源等请访问目录或专题,或者Github页面:
https://www.jianshu.com/p/5bbf1c274370
https://github.com/zkx654321/Learn-E-Prime-Easily

你可能感兴趣的:(轻松学习E-Prime(三十三):Canvas Object *)