|
探索DirectQB2 |
|
| 来自: | 作者:Kasi |
| 看过探索一的文章了吗,好吧,我们继续我们DirectQB 的旅程。这回我们分析DirectQB自带的Eclogo.bas文件。看 看图片的调用、翻转及缩放。 -------------- 下面是EClogo.bas的主程序: '???表示Kasi不理解的地方。 DEFINT A-Z '$INCLUDE: 'DIRECTQB.BI' DECLARE SUB Logo () '声明logo子过程 IF DQBinit(2, 0) THEN DQBclose: PRINT DQBerror$: END 'DQBinit(2, 0)声明VIDEO,1,2三个层 DQBinitVGA Logo '调用logo子过程 DQBclose END 其他的语句在《探索一》中已经介绍过了,请查考《探索一》。 -------------- 下面是logo子过程: SUB Logo '声明变量 DIM Pal AS STRING * 768, LogoPic(32001) AS INTEGER 'Pal AS STRING * 768用于储存屏幕的颜色(详见程序后的解释) 'LogoPic(32001)声明用于储存图片的数组 '32001如何得来?因为下面的图片大小为320x200 '所以,32001=320x200+1(不知为何这样算???) DIM t AS SINGLE, White AS INTEGER 'White储存颜色代码 IF DQBloadLayer(2, "ECLOGO.PCX", Pal) THEN PRINT "Error loading ECLOGO.PCX, program aborted": DQBclose: END 'DQBloadLayer命令在第2层中调入ECLOGO.PCX 'DQBloadLayer只能调用BMP、PCX及QB中用BSAVE存的格式 '关于BSAVE请看《QB活动图象1、2》 'Pal取得PCX文件的颜色表 DQBget 2, 0, 0, 319, 199, VARSEG(LogoPic(0)), VARPTR(LogoPic(0)) '把上面的图片读如数组中 DQBsetPal Pal '设置屏幕的颜色表为Pal White = DQBfindCol(63, 63, 63) 'DQBfindCol(r,g,b)设置颜色,r:red、g:green、b:blue(取值为0-63) WHILE INKEY$ <> "": WEND FOR i = 0 TO 50 DQBboxf 1, 0, 0, 319, 199, White '用DQBboxf把第1层画成全白 DQBrPut 1, 0, 0, VARSEG(LogoPic(0)), VARPTR(LogoPic(0)), (150 - (i * 3)), (500 - (i * 8)) '重点东西,认真看 'DQBrPut在第1层从坐标0,0开始画那张图片 '(150 - (i * 3))设置图片旋转的角度(顺时针,当值为128时转180度) '(500 - (i * 8))设置图片的缩放(值:100,不变;大于100,放大;小于100,缩小) '图片以中心来缩放;值为50,图缩小一半;值为200,图放大一倍;其它类推 DQBwait 1 DQBcopyLayer 1, VIDEO IF INKEY$ <> "" THEN DQBfadeTo 0, 0, 0 '颜色向0,0,0渐变,0,0,0为RGB,这儿是黑色 EXIT SUB END IF NEXT i DQBcopyLayer 2, VIDEO t = TIMER DO IF INKEY$ <> "" THEN DQBfadeTo 0, 0, 0 EXIT SUB END IF LOOP WHILE TIMER < t + 3 FOR i = 0 TO 99 DQBboxf 1, 0, 0, 319, 199, White DQBrPut 1, EXP(i / 18), 0, VARSEG(LogoPic(0)), VARPTR(LogoPic(0)), (i * 3), (100 - i) DQBwait 1 DQBcopyLayer 1, VIDEO IF INKEY$ <> "" THEN DQBfadeTo 0, 0, 0 EXIT SUB END IF NEXT i DQBfadeTo 0, 0, 0 END SUB ------------- 颜色表格式: 程序中的Pal是用于储存当前屏幕的颜色表。因为DirectQB 是256色的,所以Pal是STRING*768(768=256*3)。因为储存时使 用RGB格式(Red,Green,Blue),所以每三个字符储存一种颜色。 若要取得颜色表中第45个颜色中green的值,可用下面语句: green = ASC(MID$(Pal, ((45 * 3) + 2), 1)) | | | \ 用1,2,3替换这个值,分别 | 表示Red,Green,Blue \ 用3乘以需要的第n个颜色。 ------------- 这回就说到这,若想继续提高,请听下回分解。 由于技术有限,翻译的问题,还请大家多多指导。 By Kasi 2000.8.6 |
|