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

Getting the position of a picture in 8086 assembler

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

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

但我卡住了。图片从初始位置移动后,我不知道如何绘制箭头...

谢谢。

Is there a way to get the position of a picture in 8086 assembler? (In graphics mode)

当然可以,读取记录图片位置的关联变量即可

PositionX dw 0
PositionY dw 0

您还需要跟踪箭头的位置(您肯定已经这样做了!):

ArrowX dw 0
ArrowY dw 0

它是如何工作的。

在第一个 space 到达时,您将这些位置值复制到一些 Temp 位置

mov  ax, [PositionX]
mov  [TempX], ax
mov  ax, [PositionY]
mov  [TempY], ax

现在您让游戏(自动)按照箭头所指的方向移动图片。每次游戏重新绘制图片时,它也会更新关联的变量PositionXPositionY。你只是坐着看图片移动。

在第二个 space 到达时,您计算两组变量之间的差异。
如果箭头指向上方,您 知道 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

最后要在新位置绘制箭头,首先将其从当前位置擦除(使用 ArrowXArrowY[ 的当前内容=53=] 变量),然后通过将 DeltaXDeltaY 变量添加到加工 ArrowX 来在新位置重新绘制它ArrowY 变量:

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