回 帖 发 新 帖 刷新版面

主题:[求助]关于图象的

我在编图象程序时每过一段时间就要刷屏,刷屏时屏幕闪的很厉害,这个有什么解决办法?

回复列表 (共32个回复)

11 楼

给你两个建议:
1. poi文件不要一个一个读......
2. 把那乌龟改成平滑走路吧......- -|||||

12 楼

CMP.TPU
MOUSE.TPU
SHOW256.TPU
SHOW320.TPU
SVGA16.TPU
SVGA256.TPU
TXT.TPU
VGA256.TPU
的说明文档是哪个文件?我找不到

13 楼

能不能帮忙把显示256bmp图片的那个程序做成单元?

14 楼

我有这种东西, 发给你了
bmptocel.pas的用法: 运行, 输入BMP文件名(BMP必须为24位真彩色, 如果不是, 请用"画图"将其保存为24位真彩色文件), 然后就会生成一个.cel文件.(图片最大320x200, 长宽都不能超, 转换时间可能有点长)
loalib.pas是一个图形单元(我写游戏都用它), 请将你的程序作如下修改:
1. 扔掉那个垃圾graph单元, 换成loalib单元.
2. 在程序开始处加2句:
  set13h;   {这是初始化图形模式}
  setpal;   {这是初始化调色板}
3. 在程序末尾处加1句:
  settext;  {这是初始化文本模式}
4. 定义这样一个类型:
type
  bmp:array[0..cc]of word;{这里的cc按这样计算: cc=(图片高度*图片宽度)/2+1, 四舍五入}
  pbmp:^bmp;
5. 定义一个存储图象的指针:
var
  ss:pbmp;
6. 在程序开始处再加1句:
new(ss);     {为图象申请存储空间}
7. 读入图片:
loadcel('abc', ss)  {将abc.cel读入ss中, abc.cel文件由bmptocel.pas转换而来}
8. 显示图象的方法:
putimg(ss, 50, 100, 0);    {将图片ss显示于(50, 100), 后面那个0你可以看看代码有什么作用}
9. 在程序末尾处再加1句:
dispose(ss);   {释放图象的存储空间}
这样就OK了.

这个单元还有其他东西:
pset过程:画点
point函数:取屏幕上某点的颜色值.
getimg过程:将屏幕上某块图象提取出来
line过程:画线
box过程:画矩形(可填充或不填充)
cls过程:清屏(图形模式)
transput过程:半透明显示, 那个trans参数是透明度

15 楼

谢谢,但如果用loalib单元,怎么才能输出一段英文?

16 楼

我回去研究一下再发给你

17 楼

OK.
Loalib v1.03版正式更新, 已发到你的油箱.
请将hzk16.fnt和asc16.fnt放到Pascal所在文件夹下.
新增过程:
showstr(x, y, color, st);
x, y为坐标(注意: 是图形模式的坐标!)
color是颜色
st是要显示的字符串.
此过程[color=red]支持中文[/color].

PS:你的那个chinese单元并不支持中文, 你的机器之所以能显示中文是因为你的机器上有汉字系统......

18 楼

顺便讲一下透明显示技术

比如你做的那个超级马里奥, 很显然, 如果你给屏幕加个背景, 那么马里奥的周围就会有一块黑色区域把背景覆盖掉, 这时就需要透明显示技术.
首先准备2个BMP文件, 像这样:
s1.bmp:      这个图象的背景为纯黑色
[IMG]http://i87.photobucket.com/albums/k144/maxumi/s1.jpg[/IMG]
s1x.bmp      这个图象的内容部分为纯黑色, 背景为纯白色
[IMG]http://i87.photobucket.com/albums/k144/maxumi/s1x.jpg[/IMG]
我们这样做(假设图片都已经准备好, 存放在s1和s1x两个指针变量中):
putimg(s1x, 0, 0, imgand);  {imgand在loalib中已经定义好}
这个指令的效果是: 将s1x各点与当前背景各点做AND运算并显示在屏幕上.
s1x的内容部分为纯黑, 纯黑的颜色代码为0, 0=00000000(2进制), 0 and 任何数 = 0, 所以屏幕的对应部分就变黑了.
s1x的背景部分为纯白, 纯白的颜色代码为255, 255=11111111(2进制), 1 and 任何数 都不变, 所以屏幕的对应部分不变.
总之, 这个指令的效果是"在屏幕上挖个黑洞".
然后:
putimg(s1, 0, 0, imgor);  {imgor在loalib中已经定义好}
这个指令的效果是: 将s1各点与当前背景各点做OR运算并显示在屏幕上.
s1的背景部分为纯黑, 纯黑的颜色代码为0, 0=00000000(2进制), 0 OR 任何数 都不变, 所以屏幕的对应部分不变.
至于s1x的内容部分, 由于背景为纯黑, 纯黑的颜色代码为0, 0 OR 任何数 都不变, 所以屏幕的对应部分就显示出内容了.
总之, 这个指令的效果是"在屏幕上显示马里奥".

透明显示技术其实就是这样

以上

19 楼

太感谢了

20 楼

不用客气, 如果你做了游戏, 注明你用了我的loalib就好了......XD

我来回复

您尚未登录,请登录后再回复。点此登录或注册