在8086汇编程序中获取图片的位置

时间:2017-04-08 23:50:34

标签: assembly x86-16

有没有办法在8086汇编程序中获取图片的位置? (在图形模式下)

背景:
我试图做的是一个箭头围绕图片(玩家)旋转的游戏,当用户按下空间图片移动时(箭头指向同一方向)和当用户再次输入 space 时将停止。

但是我被卡住了。在图片从最初位置移开后,我不知道如何绘制箭头......

感谢。

1 个答案:

答案 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