使用FreePacal / Lazarus进行移动点圆碰撞时的接触点

时间:2018-05-26 11:02:41

标签: lazarus freepascal

我需要在Lazarus / Freepascal中编制游戏。在这个游戏中,玩家有能力跳跃"从行星到行星,如This

跳跃本身已实施,但登陆并不起作用。起初我尝试使用余弦定律计算我的球员角色的正确位置,但这并没有真正成功。然后我尝试通过重新排列用于移动的代码来获得正确的位置:

if getkeystate(vk_left) < 0 then
begin
  currotp1 := currotp1 - 2;
end;

if getkeystate(vk_right) < 0 then
begin
  currotp1 := currotp1 + 2;
end;

edit1.Text := IntToStr(currotp1);
GTR.left := trunc(-cos(currotp1 / 180 + pi) * (-r)) + curplaxp1;
GTR.top := trunc(-sin(currotp1 / 180 + pi) * (-r)) + curplayp1;

while currotp1 > 1130 do
begin

  currotp1 := currotp1 - 1130;

end;

while currotp1 < 0 do
begin

  currotp1 := currotp1 + 1130;

end; 

变成:

addrotp1 := (-arccos(DegToRad((GTR.top - yorigins[notplanump1]) / (- 
rs[notplanump1]))) - pi) * 180;

currotp1 := round(addrotp1);

澄清:

  • Currotp1是玩家1的当前旋转值。 1130&#34;单位&#34;是一个完整的 轮换

  • GTR.left和GTR.top是我的播放器的坐标

  • r是&#34;行星的半径&#34;
  • curplxp1和curplayp1是行星中心的坐标 玩家正在开启。
  • addrotp1是我要在播放器上应用的附加旋转。它&#39; S 浮。
  • yorigins [notplanump1]和xorigins [notplanump1]是坐标 玩家的行星。
  • rs [notlpanump1]是玩家的行星半径。

请建议解决此问题的方法/解决方案。

0 个答案:

没有答案