有没有办法在8086汇编程序中获取图片的位置? (在图形模式下)
背景:
我试图做的是一个箭头围绕图片(玩家)旋转的游戏,当用户按下空间图片移动时(箭头指向同一方向)和当用户再次输入 space 时将停止。
但是我被卡住了。在图片从最初位置移开后,我不知道如何绘制箭头......
感谢。
答案 0 :(得分:1)
有没有办法在8086汇编程序中获取图片的位置? (在图形模式下)
当然,只需读取记录图片位置的相关变量即可。
PositionX dw 0
PositionY dw 0
你还需要跟踪箭头的位置(肯定你已经这样做了!):
ArrowX dw 0
ArrowY dw 0
在第一个空间到达时,您将这些位置值复制到某些 Temp 位置
mov ax, [PositionX]
mov [TempX], ax
mov ax, [PositionY]
mov [TempY], ax
现在你让游戏(自动)沿箭头指向的方向移动图片。每次游戏重绘图片时,它还会更新相关变量 PositionX 和 PositionY 。你只需坐下来观看图片移动。
在第二个空间到达时,您可以计算两组变量之间的差异。
如果箭头指向上方,则知道 PositionY 将小于 TempY (因为这就是Y坐标在屏幕上的工作方式) PositionX 将等于 TempX 。这意味着:
mov ax, [PositionY]
sub ax, [TempY]
mov [DeltaY], ax ;With UP, this will be a negative number
mov [DeltaX], 0
考虑其他3个可能方向的逻辑如何变化。
现在真正的美丽是你甚至不需要反思这些不同方向的可能结果!只需使用以下内容:
mov ax, [PositionX]
sub ax, [TempX]
mov [DeltaX], ax
mov ax, [PositionY]
sub ax, [TempY]
mov [DeltaY], ax
最后要在新位置绘制箭头,首先将其从当前位置删除(使用 ArrowX 和 ArrowY 变量的当前内容),然后通过将 DeltaX 和 DeltaY 变量添加到加工 ArrowX 和 ArrowY 变量中,将其重新绘制到新位置:< / p>
mov [Color], 0 ;Black
call DrawArrow ;Erase arrow
mov ax, [DeltaX]
add [ArrowX], ax
mov ax, [DeltaY]
add [ArrowY], ax
mov [Color], 15 ;White
call DrawArrow ;Show arrow