- 注册时间
- 2006-2-9
- 最后登录
- 1970-1-1
|
文字在前面也在大侠提到过在任意矩形快速显图的方法,但是都不详细,我开始看的时候云里雾里的,根本不知道在说什么。最近我在whtqasw的暗夜奇袭中看到了这种方法的应用,当时我就想到可不可用这种方法
来做地图呢?于是我就开始了这方面的研究,研究了几天,我终于研究出了点东西。我现在把结果和心得
粘出来。首先声明我的机子是PC1010的,图像的缓存是:6592-8191,是这个地址的都可以试一试。
这种方法要用到随机文件,我就先说它了吧!
每当我们打开随机文件时,文曲星就会开辟一段地址来存放读出来的文件。这个地址是怎么知道呢?大家
自己可以去研究一下,先放一段内容进去,然后用PEEK来找。先说只运行一个随机文件的情况。PC1010的
地址是24576减去随机文件的长度.这个地址到24575存放的是你PUT或GET的一个文件.注意:在你没有PUT或[glow=255,red,2]文字[/glow]
GET的情况下,这段地址都是0,如你已经PUT或GET了,那这段地址就存放你放进去或读出来的那个文件,比如
你GET #1,5,那这段地址就只存放5号文件内的内容,当你再次放或读时又会改变地址内容.
我们同时运行随机和只读,只写都不会影响随机文件的地址,只有同时打运行多个随机文件时,地址就会变,
新的地址为24576减去所有的随机文件长度.而各个文件存放的地址也在讲究.24575为最后的地址,当你运
行一个随机文件时,文曲星就向前开辟打开文件长度个地址来存放,你再运行另一个随机文件时,星星继续
向前开辟来存放.所以先运行的文件地址在后面,而后运行的文件地址倒在了前面.
这个地址还在没有其他方法来找呢?有!我从批量法(地址是PEEK(47302)+PEEK(47303)*256,这个地址加上2
就是控制第一个字符串的长度)受到启发,找到了同样的地址来表达存放随机文件的地址.这个地址是47361
和47362.PEEK(47361)+PEEK(47362)*256的值就是存随机文件的地址了.47310,47311和47370,47371和这个
也有关,但都是差不多的,我没研究了.
再说在任意矩形快速显图.34731这个地址是我先要说的,它可能是截图用的吧,POKE 34731,20和POKE
34731,21就是查找和未找到的画面.要先显图,先要POKE 34731,9,它的作用是让以后的矩形在一定的条件
显图,而不是画矩形.这个条件就是BOX的填充值为1,也就是BOX的第5个数据为1.而矩形又是怎么画图的呢?
实际上在矩形内的图像都是用POKE画出来的.从矩形左上角开始由一个地址出发,一直POKE 到矩形右下角.
矩形左上角POKE的地址我们是可以改变的.用146,147来控制这个地址.比如我们POKE 146,193,POKE
147,25,那这个矩形左上角横起8个点就和屏幕上第一横的第8至第15个点的情况一样了.我们同样可以把地
址POKE到任意地方,当然可以是我们的程序中也可以是随机文件中.所以我们可以在程序中打出一系列代码
代表图形然后用POKE 34731,146,147来显出图像.但我们最好还是用随机文件来存放,然后显出来.但是随
机文件的长度又成了问题.当我们创建一个随机文件时,只要不分配长度,也就是不用FIELD,文件长度我们
还可以定以为255,但一分配长度就不行了,连160都不到.不用急,上面不是说了47361和47362可以控制文件
存放的地址吗?我们先规定文件长度为250,不分配,然后把存放地址POKE 到屏幕,然后用PUT #1,*,这样屏
幕上从6592开始的250个地址就存在了文件中.读的时候同样,只是要用GET了.这个方法可快速存图和快速
读图,但及不上用批量法,但比那种OUTPUT和INPUT要快多了.
再说一下我觉得它的应用吧!现在我们可以快速在任意一个矩形内显图了,那我们就可以把屏幕分成几大块
,再在每一块中画图,那一整个屏幕我们不是也可以快速控制了吗?对,我们就把屏幕分成几大块,每块都画
上图,那屏幕就成了地图.我们先把各种地形的数据保存在随机文件中,用ABCDEFG.......代表各种地形,然
后读出来,读到什么地形就在相应矩形内画出相应图像.要注意的是我们在一个矩形内画了图之后,后一个
矩形如还要显图,那它就接着前一个矩形的最后数据开始POKE,所以每画完一个矩形,我们都要重新POKE
146,147到随机文件存放的地址,还要GET相应的文件号.不过速度还不是很快,屏幕变换过程我们能看处清.
用它来做玛丽我觉得很不错.
大侠们看看我有没有说得不准确的地方,还请多指教了文字 |
|