【问题标题】:Can't get framerate agnostic acceleration in processing sketch在处理草图中无法获得与帧率无关的加速
【发布时间】:2018-03-31 21:41:49
【问题描述】:

我有一个草图,我可以像这样模拟重力:

float acceleration;
float velocity;
float location; 

int time= millis();

boolean done = false;
void setup() {
  size(200, 200);
  acceleration = 0;
  velocity = 0;
  location = 0;
  frameRate(30);
}

void draw() {
  background(0);
  fill(255);
  acceleration = acceleration + .1;
  gravity();
  ellipse(10, location, 10, 10);

  if (location > height && !done) {
    float finished = millis() - time;
    println(finished/1000.0);
    done = true;
  }
}

void gravity() {
  velocity += acceleration * (1/frameRate);
  location += velocity;
  acceleration = 0;
}

我想我可以简单地将加速度乘以 1/frameRate 以使模拟运行相同而不管帧速率如何,但它不起作用。如何模拟与帧速率无关的重力或力?

【问题讨论】:

  • 我在您的代码中没有看到任何地方将acceleration 乘以1/frameRate?还有为什么你需要这样做?
  • 我对其进行了编辑以添加它。我正在关注 Shiffman 的这个视频,他在其中谈到了添加力。然而,这种方法会使事物根据帧速率以不同的速度移动。无论是 10fps 还是 100fps,我都希望它以相同的毫秒数到达底部。 youtube.com/watch?v=MkXoQVWRDJs
  • 但是为什么你的程序会以不同的帧率运行呢?如果您坚持默认设置,您的生活会轻松很多。
  • 因为我想根据真实世界的比例/时间对其进行校准,而且帧速率不够稳定,无法获得准确的结果,尤其是在游戏中经常下降时。

标签: java processing


【解决方案1】:

您需要使当前速度成为时间的函数,而不是数字的函数 帧画。像

long start = <now>;
position = 0;
do { position = functionof(<now>-start); repaint(); sleep(10); }

那么实际的重绘,无论何时发生,都会使用当前位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2016-11-17
    • 1970-01-01
    相关资源
    最近更新 更多