Assembly 汇编x86架构游戏编程跳跃物理

Assembly 汇编x86架构游戏编程跳跃物理,assembly,x86,masm,masm32,Assembly,X86,Masm,Masm32,我试图在x86汇编中对街头斗士进行编程,但在播放器的跳跃方面遇到了一些问题。我想让他以恒定的速度跳到一定的高度,然后以加速度真实地落下。我知道这只是一个物理问题,但我在动作的第一部分遇到了一些问题:玩家“传送”到最大高度。它不是我想要的流体,我想看到整个运动,而不仅仅是从a到B的隐形传送。这是我实际使用的代码 PROC Jump1 USES eax mov eax, [y] add eax, -1 mov [y], eax ret ENDP Jump

我试图在x86汇编中对街头斗士进行编程,但在播放器的跳跃方面遇到了一些问题。我想让他以恒定的速度跳到一定的高度,然后以加速度真实地落下。我知道这只是一个物理问题,但我在动作的第一部分遇到了一些问题:玩家“传送”到最大高度。它不是我想要的流体,我想看到整个运动,而不仅仅是从a到B的隐形传送。这是我实际使用的代码

 PROC Jump1 USES eax     
   mov eax, [y]
   add eax, -1
   mov [y], eax    
   ret
 ENDP Jump1

 PROC Jump USES eax, ebx, ecx, edx   
 @@j:
   mov eax, [y]
   cmp eax, [ymax]
   jne @@p
   jmp @@ret     
 @@p:
   call Jump1
   jmp @@j  
 @@ret:
   ret
 ENDP Jump

所以我想知道:我该如何做到这一点以获得更平稳的运动?

这实际上与它是否在装配中无关,这更像是游戏中的一般物理问题。如果你不显示每个中间状态并在它们之间加上某种延迟,那么你当然会有你描述的那种行为。将玩家的状态设置为“跳跃”,第0步。然后,每次屏幕更新都会将玩家移动一步,每次递增步数计数器。如果你有一个恒定的屏幕更新率,这是最好的。你发布的代码不会传送他,只移动他-1(在
ymax
下方/上方),或者让他停留在
ymax
上。所以“传送”发生在其他地方,要么你意外地用最大值覆盖了
[y]
,要么你没有在调用
跳转
之间画中间步骤,只显示
y
已经相等的最后状态
ymax
(或者你画得太快,所以你只能看到最后一个)。无论如何,所有这些都应该在调试器中清晰可见,所以您是否尝试在没有调试器的情况下编写游戏?如果是的话,那么祝你好运,2017年和2018年你将需要很多……这与它是否在组装无关,这更像是游戏中的一般物理问题。如果你不显示每个中间状态并在它们之间加上某种延迟,那么你当然会有你描述的那种行为。将玩家的状态设置为“跳跃”,第0步。然后,每次屏幕更新都会将玩家移动一步,每次递增步数计数器。如果你有一个恒定的屏幕更新率,这是最好的。你发布的代码不会传送他,只移动他-1(在
ymax
下方/上方),或者让他停留在
ymax
上。所以“传送”发生在其他地方,要么你意外地用最大值覆盖了
[y]
,要么你没有在调用
跳转
之间画中间步骤,只显示
y
已经相等的最后状态
ymax
(或者你画得太快,所以你只能看到最后一个)。无论如何,所有这些都应该在调试器中清晰可见,所以您是否尝试在没有调试器的情况下编写游戏?如果是的话,那么祝你好运,2017年和2018年你会需要很多。。。