图像快速载入

阅读更多
图像快速载入 
一秒内超快全屏图片保存和载入:

这是我在研究滚屏时的意外发现,也许被人也有过类似的发现,但是我觉得这太快了,所以决定发上来。保存:首先声明这几个变量,注意变量名称最好是一个字节,并将他们规定到现存。
1 A$="":B$="":C$="":D$="":E$="":F$="":G$="":H$=""
2 FOR I=1 TO 8
3 PO=2496+(I-1)*200
4 HI=INT(PO/256)
5 LO=PO-INT(PO/256)*256
6 POKE 49154+(I-1)*5,200
7 POKE 49155+(I-1)*5,LO
8 POKE 49156+(I-1)*5,HI
9 NEXT 然后以任何形式在屏幕上作图,然后把下面的保存代码作为子程序调用
1000 OPEN "DAT" FOR OUTPUT AS#1:CLOSE#1 //清空这一部很重要,要不第二次保存时数度相当慢
1005 OPEN "DAT" FOR RANDOM AS#1 LEN=100 //由于RANDOM文件最大长度只有128字节,所以我把他分成两个100的字节
1010 FIELD #1,100 AS I$
1020 LSET I$=LEFT$(A$,100):PUT#1,1:LSET I$=RIGHT$(A$,100):PUT#1,2
1030 LSET I$=LEFT$(B$,100):PUT#1,3:LSET I$=RIGHT$(B$,100):PUT#1,4 1040 LSET I$=LEFT$(C$,100):PUT#1,5:LSET I$=RIGHT$(C$,100):PUT#1,6
1050 LSET I$=LEFT$(D$,100):PUT#1,7:LSET I$=RIGHT$(D$,100):PUT#1,8
1060 LSET I$=LEFT$(E$,100):PUT#1,9:LSET I$=RIGHT$(E$,100):PUT#1,10
1070 LSET I$=LEFT$(F$,100):PUT#1,11:LSET I$=RIGHT$(F$,100):PUT#1,12
1080 LSET I$=LEFT$(G$,100):PUT#1,13:LSET I$=RIGHT$(G$,100):PUT#1,14
1090 LSET I$=LEFT$(H$,100):PUT#1,15:LSET I$=RIGHT$(H$,100):PUT#1,16
1100 CLOSE #1 保存成功,试试看,不到一秒。

载入:首先仍然声明这几个变量,注意变量名称最好是一个字节,并将他们规定到现存。
1 A$="":B$="":C$="":D$="":E$="":F$="":G$="":H$=""
2 FOR I=1 TO 8
3 PO=2496+(I-1)*200
4 HI=INT(PO/256)
5 LO=PO-INT(PO/256)*256
6 POKE 49154+(I-1)*5,200
7 POKE 49155+(I-1)*5,LO
8 POKE 49156+(I-1)*5,HI
9 NEXT 然后载入的原理和保存的原理相反
1005 OPEN "DAT" FOR RANDOM AS#1 LEN=100
1010 FIELD #1,100 AS I$
1020 GET #1,1:K$=I$:GET #1,2:LSET A$=K$+I$
1030 GET #1,3:K$=I$:GET #1,4:LSET B$=K$+I$
1040 GET #1,5:K$=I$:GET #1,6:LSET C$=K$+I$
1050 GET #1,7:K$=I$:GET #1,8:LSET D$=K$+I$
1060 GET #1,9:K$=I$:GET #1,10:LSET E$=K$+I$
1070 GET #1,11:K$=I$:GET #1,12:LSET F$=K$+I$
1080 GET #1,13:K$=I$:GET #1,14:LSET G$=K$+I$
1090 GET #1,15:K$=I$:GET #1,16:LSET H$=K$+I$
1100 CLOSE #1 试试看,还是用不到一秒。


注明一下,以上代码仅用于NC1020/CC880/CCC980
pc1000,pc100a,cc800的只需这样改
6 POKE 7661+(I-1)*5,200
7 POKE 7662+(I-1)*5,LO
8 POKE 7663+(I-1)*5,HI

 

图像显示究极方法:

下面是原代码:
1 REM Designed By WakuFlair 2002/12/21
10 A$=" ":B$=" ":C$=" ":D$=" ":E$=" ":F$=" ":G$=" ":H$=" ":GRAPH
20 FOR R=1 TO 100
30 X=INT(RND(1)*160):Y=INT(RND(1)*80)
31 A=INT(RND(1)*160):B=INT(RND(1)*80)
40 LINE A,B,X,Y:NEXT R
80 FOR R=1 TO 8:AD=7661+(R-1)*5:POKE AD,200:PO=2296+R*200
90 HI=INT(PO/256):LO=PO-HI*256
100 POKE AD+1,LO:POKE AD+2,HI
101 G$(R)="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA":G$(R)=G$(R)+G$(R)+G$(R)+G$(R)
120 NEXT R
121 LSET G$(1)=A$:LSET G$(2)=B$:LSET G$(3)=C$:LSET G$(4)=D$
122 LSET G$(5)=E$:LSET G$(6)=F$:LSET G$(7)=G$:LSET G$(8)=H$:BEEP:CLS
130 LOCATE 3,3:PRINT "按任意键恢复图像":Y$=INKEY$:GOSUB 160:END
160 LSET A$=G$(1):LSET E$=G$(5):LSET B$=G$(2):LSET F$=G$(6):LSET C$=G$(3):LSET G$=G$(7)
170 LSET D$=G$(4):LSET H$=G$(8):BEEP:RETURN

其实就是大量利用余海林的批量法
大家细看看最好下到星星里试试,效果惊人,
用这个方法显示动画都不闪烁,大家快用吧!


应TimberHare要求,把解释上提:
嗯,看来得说仔细点了.

如果大家玩过余海林的"小狗",会发现这个游戏在看完人物状态或战斗完后地图马上会显示出来而不像天之剑II那样一格格画出来.这就是利用了余海林自创的"批量法".详情可以去看由TimberHare收集并整理的GVBASIC精华中关于"批量法"的文章.
但是这个方法对应的是PEEK地址是704-803,也就是说只能显示ASCII码,所以原始的批量法对于现在有着精美的"画"出来的画面来说无能为力.
原因是因为在GVBASIC中,一个字符串变量最长只能是255,705-803有100个,汉字和图形能显示50个,所以一个变量就足够用了.但是图形缓存是从2496-4095(PC1000A),共1600个显然一个变量根本不够用.
于是聪明的我用了8个变量(A$ B$ C$...H$),每个控制200个。这样就可以控制屏幕上的非ASCII码的图像(当然ASCII也可以,不过理论上比控制字符缓存的慢,但是你看不出来)
这下知道用处了(如果还不知道,请用头撞碎显示器),就可以发挥大家的创意了.我提拱的程序只是小CASE,开始随机画100条线,然后清屏告诉你“按任意键回复,按一下刚才画的线就会一下子回复了!
如果想用文件保存图像就需要用随机存储了,不过在RANDOM模式下 LEN最多只让等于100,一个变量保存不下。不过方法很多,比如用16个变量,各变量的起始地址为AD=7661+(n-1)*5
速度超快,要不我怎么管他叫“极显法“呢,这下编WQX上的FLASH不是梦想了!
注:所提的所有地址只适用PC1000系列,不过只要能用“批量法“的型号都可用“极显法”

 

你可能感兴趣的:(C,C++,C#,游戏,F#)