You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决DosBox中汇编太空侵略者游戏的屏幕闪烁问题?

汇编开发《太空侵略者》:解决屏幕闪烁问题

我是汇编语言新手,正在开发《太空侵略者》游戏,遇到了屏幕闪烁的问题。目前的做法是每次绘制主飞船和敌人前先清空整个屏幕,再在新位置重绘;为了控制游戏速度,还添加了延迟函数,但屏幕闪烁问题依然存在。听说可以用页面切换的方式解决,但对这个概念理解不深。

打印相关函数

imprimeEnemigo proc 

push cx

mov al, 219
mov cx, 1               
call imprime
add dl, 1
mov al, 220 
mov cx, 1 
call imprime
add dl, 1
mov al, 219 
mov cx, 1 
call imprime
add dl, 1
mov al, 220 
mov cx, 1 
call imprime
add dl, 1
mov al, 219 
mov cx, 1 
call imprime
sub dh, 1
mov al, 220 
mov cx, 1 
call imprime
sub dl, 1
mov al, 219 
mov cx, 1 
call imprime
sub dl, 1
mov al, 220 
mov cx, 1 
call imprime
sub dl, 1
mov al, 219 
mov cx, 1 
call imprime
sub dl, 1
mov al, 220 
mov cx, 1 
call imprime
add dh, 2
add dl, 1
mov al, 223 
mov cx, 1 
call imprime
add dl, 2
mov al, 223 
mov cx, 1 
call imprime
pop cx
  ret
imprimeEnemigo endp    ; 打印敌人的函数


imprime proc

mov bh, 0   ; BH = 页码
mov ah, 02h ; 设置光标位置,参数为dh和dl
int 10h

mov ah, 09h ; 在光标位置写入字符和属性
int 10h

ret
imprime endp    ; 主打印函数,包含光标定位和打印,也用于分数等其他内容

清屏代码

每次循环后执行的清屏逻辑:

mov ah, 0Fh
int 10h
mov ah, 0
int 10h

主角打印函数

imprime_Jugador proc

mov al, 219    
mov cx, 1      
call imprime
sub dl, 1
mov al, 220 
mov cx, 1
call imprime
add dl, 2
mov al, 220 
mov cx, 1
call imprime

    ret
imprime_Jugador endp

延迟函数

retardo proc
push ax
push bx
xor ax, ax
xor bx, bx

mov ax, cx ; cx初始值为1300,是变量
ret2:
dec ax
jz finDec
mov bx, cx
ret1:
dec bx
jnz ret1
jmp ret2

finDec:
pop bx
pop ax
ret
retardo endp

游戏运行时屏幕存在明显闪烁,尝试过多种方法仅能减轻闪烁,无法彻底解决,希望实现画面的流畅移动。

内容的提问来源于stack exchange,提问作者Nicolás

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:23:18