我正在做一个汇编游戏引擎项目。在x86汇编中是否有一种方法可以快速清除屏幕(类似CLS)?我重新初始化图形模式来完成此操作。
MOV AH,00H
MOV AL,13H
INT 10H
字符串
我在屏幕上创建了图形缺陷,以进行持续更新。我做错什么了吗?我是不是应该推迟一下?
这些是当我在屏幕上移动精灵时出现的图形故障。
的数据
在这张图片中,你可以清楚地看到写着“得分000”和边界,但一切都是不相的。这是没有连续刷新时的屏幕
的
刷新是因为我绘制了精灵,所以我清除屏幕并在新的位置再次绘制精灵。基于按下的箭头键。
1条答案
按热度按时间sqserrrh1#
现在,您可以通过清除 * 整个屏幕 * 然后重新绘制 * 整个屏幕 * 来设置精灵的动画。这会产生 Flink 和伪影。
在x86汇编中是否有方法快速清除屏幕(类似CLS)?我重新初始化图形模式来完成此操作。
加速CLS并不能解决这个问题,但是限制精灵周围的方块的清除可以避免这些瑕疵。之后你是否重新绘制整个屏幕,或者只是重新绘制新旧框的组合区域,这只是一个“容易”与“更复杂”的问题(“容易”是因为绘制整个屏幕的代码肯定已经存在)。
在正常(游戏)条件下,新的周围框将从旧的周围框偏移几个像素。重画可能会非常快,也许也死容易,如果除了精灵本身,它只需要包括那些少数目标点,我看到的图片,你张贴。
我只是实现了@MargaretBloom建议的方法。
所有的绘图都进入一个离屏缓冲区,一旦一帧完成,它就会在垂直回扫期间在A000 h处被复制到实际的视频缓冲区。我用FASM编写了程序,并在DOSBox下进行了测试。不用说,它的工作,但我应该提到,我没有观察到任何需要等待垂直回扫期之前,复制私人缓冲区的官方视频缓冲区。也许在模拟器之外会更重要...
x1c 0d1x的数据
字符串
等待垂直回扫
型
如果输入状态#1的位3被清除,则表示显示器处于显示模式。
如果输入状态#1的位3被置位,则表示显示器处于垂直回扫模式。然而,它没有告诉我们的是,在“垂直回扫周期”上还剩下多少时间。这就是为什么程序使用第二个循环来等待“显示周期”结束的原因。然后我们将有最大的'垂直回扫周期'的时间来做复制。