易码技术论坛

 找回密码
 加入易码
搜索
查看: 271337|回复: 9

[原创][教程] NC3000 用GVBASIC贴图和批量法

[复制链接]
发表于 2005-11-4 19:59:00 | 显示全部楼层
顶了
发表于 2005-11-6 17:51:00 | 显示全部楼层
好~~有所帮助

支持,希望有水平的同志多多写写这样的文章
发表于 2005-12-30 11:14:00 | 显示全部楼层
8错!
mywqx 该用户已被删除
发表于 2006-4-22 10:09:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-4-22 10:30:00 | 显示全部楼层
思路很好.
发表于 2007-1-23 13:17:09 | 显示全部楼层
不过这种方法麻烦了些..
发表于 2007-1-24 02:47:04 | 显示全部楼层
万年老帖又被掘尸=。=~~有意思么~
发表于 2007-1-24 11:38:36 | 显示全部楼层
不错的帖啊!
发表于 2007-1-29 01:41:13 | 显示全部楼层
贴图最好的方法还是自己写个图象函数!这个系统中断写的并不完美!
 楼主| 发表于 2005-11-2 00:29:00 | 显示全部楼层 |阅读模式
最近发现有些人想用NC3000的批量法,但却不知道如何得到变量储存地址,所以我发了这一帖,希望新手能看的懂。

如果对批量法不了解的,可以在空间站上看这一帖

虾米们看的批量法



关于批量法,最主要的就是找到变量储存地址,NC3000的变量储存地址在$2000(十进制的8192,也就是显存后面)+文件长度。一般的程序,用到批量法的都是把程序写完后再到资源管理里面查看长度,这样在编程序时很不方便,每修改一次都要重新查看,所以我想,是不是文件长度都在内存里面存着呢?于是就写了下面的程序:

10 K=00000:HI=INT(K/256)O=K-HI*256            //K用来储存文件长度
20 FOR W=2000 TO 3000
30 IF PEEK(W)<>LO THEN 60
40 IF PEEK(W+1)<>HI THEN 60
50 PRINT W
60 NEXT
70 END
80 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
90 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
100 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
110 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                           //用来占位置

编好后储存,再到资源管理中得到文件大小,我的是294,然后修改程序 ,把K=00000改为K=00294(前面的0不能去掉!),程序变为:

10 K=00294:HI=INT(K/256)O=K-HI*256
20 FOR W=2000 TO 3000
30 IF PEEK(W)<>LO THEN 60
40 IF PEEK(W+1)<>HI THEN 60
50 PRINT W
60 NEXT
70 END
80 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
90 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
100 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
110 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

然后运行程序,便可得到储存文件长度的内存地址了。我运行后是显示了三个地址:2246,2276,2299。经测试, 三个地址都表示文件长度。

所以,在批量法中,就可以直接在程序中写 DZ=PEEK(2246)+PEEK(2247)*256+8192了,修改了程序也不需要重新再查看文件长度了,是不是方便多了?

顺便说一下如何在GVB 中贴图

其实贴图就是用到了系统函数 INT $CA09,而LINE则调用了INT $CA0B,并且它们参数的地址相同,于是就可以把GVB 中的$CA0B改为$CA09,如此就可以实现贴图。同样的,我们用上面类似的寻找程序中的INT $CA0B所在的位置:

10 K=00294:A=00:B=11:C=202                   //INT $CA0B的机器码

20 FOR W=16384 TO 65535

30 IF PEEK(W)<>A THEN 60

40 IF PEEK(W+1)<>B THEN 60

45 IF PEEK(W+2)<>C THEN 60

50 PRINT W

60 NEXT

70 END



运行后便可得到地址34666

因此我们POKE 34667,9,然后LINE X,Y,X+HIGHT,Y+WIDTH就可以贴图了,再POKE 34667,11 便可以用LINE话直线了。图象信息的地址需要POKE到146,147。

例如,你的图片存在地址5000,长16,宽16,要显示在(10,10)的位置,则程序如下:

HI=INT(5000/256)

LO=5000-HI*256

POKE 34667,9

POKE 146,LO

POKE 147,HI

LINE 10,10,10+16,10+16

END

行了,就讲到这了,希望大家能看的懂。<img src="http://www2.emsky.net/bbs/Skins/Default/emot/em01.gif">
[em01]
[此贴子已经被作者于2005-11-5 17:26:06编辑过]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 08:14 , Processed in 0.009546 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表