gpt4 book ai didi

Platformer 中的 C++/SDL Gravity

转载 作者:行者123 更新时间:2023-11-28 02:44:27 24 4
gpt4 key购买 nike

我目前正在尝试在我的平台游戏中加入一种重力形式(它不需要完全是重力,不需要真实感),但是我在这方面的逻辑上遇到了困难。

下面的代码是我在按下向上箭头或W时使用的,(跳跃)

if (grounded_)
{
velocity_.y -= JUMP_POWER;
grounded_ = false;
}

在我的 Player::Update() 函数中有

velocity_.y += GRAVITY;

那个函数里面还有很多,不过跟实际情况无关。

目前两个常量如下:GRAVITY = 9.8f;JUMP_POWER = 150.0f;

我在重力方面遇到的主要问题是我无法在我的 Sprite 能够跳跃和过于漂浮之间找到适当的平衡。

长话短说,我的问题是我的 sprite 的跳跃以及他从一个平台到另一个平台的正常下降都过于飘逸,关于如何将其缩小到更逼真的东西有什么想法吗?

最佳答案

与其考虑实际值(value),不如考虑其后果。

所以,初始速度为-jump_power,加速度为重力。一点微积分给出

y = -Height = -jump_power * t + 1/2 * gravity * t^2

这假设时间步长很小。

然后,

time_in_flight = 2 * time_to_vertex = jump_power/gravity

顶点是

height(time_to_vertex) = jump_power^2/(4 * gravity)

解决这些问题,调整时间步长并修复负数

jump_power = (4 * height / time) * timestep_in_secs_per_update

gravity = (2 * jump_power / time) * timestep_in_secs_per_update

这样一来,您就可以搞乱时间和高度,而不是不太直接的参数。只需在开始时使用重力和 jump_power 的方程式即可。

const int time = 1.5; //seconds
const int height = 100 //pixels

const int jump_power = (4 * height / time) * timestep_in_secs_per_update;
const int gravity = (2 * jump_power / time) * timestep_in_secs_per_update;

这是一种数学技巧,通常用于根据“无量纲”变量重新排列一族微分方程。这样,当您尝试操纵方程式特征时,变量就不会干扰。在这种情况下,您可以设置时间并在改变功率的同时保持恒定。 Sprite 仍然需要相同的时间才能着陆。

当然,“真实”重力可能不是最佳解决方案。您可以将重力设置得较低,并在角色未接地时降低角色的高度。

关于Platformer 中的 C++/SDL Gravity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24900385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com