【发布时间】:2020-05-14 22:51:34
【问题描述】:
我是一名初学者,正在学习在 android studio 中编写 flappy bird 的教程。我对下面的代码有 2 个问题。鸟落下的第一帧 10 像素(=重力)。然后将帧数乘以每帧 10 个像素,这样他每帧下落得更快。但是velocity.scl(1/dt)有什么用呢?也有可能我理解错了?为什么下落看起来很平滑?我希望它看起来更刺耳,因为这只鸟每帧移动了很多像素。
if(position.y>0){
velocity.add(0, GRAVITY, 0); // bird falls 15 pixels above ground
}
velocity.scl(dt); //multiply gravity with dt (frame) -> gravity gets larger
position.add(0, velocity.y, 0);
if(position.y<0){
position.y=0; // bird doesn't fall through ground
}
velocity.scl(1/dt); // what does this do
完整的鸟类:
private static final int GRAVITY = -10;
private Vector3 position;
private Vector3 velocity;
private Texture bird;
public Bird(int x, int y){
position = new Vector3(x,y,0);
velocity=new Vector3(0,0,0);
bird = new Texture("Flappy-midflap.png");
}
public void update(float dt){
if(position.y>0){
velocity.add(0, GRAVITY, 0); // bird falls 15 pixels above ground
}
velocity.scl(dt); //multiply gravity with dt (frame) -> gravity gets larger
position.add(0, velocity.y, 0);
if(position.y<0){
position.y=0; // bird doesn't fall through ground
}
velocity.scl(1/dt); // what does this do
}
public void jump(){
velocity.y = 250;
}
public Vector3 getPosition() {
return position;
}
public Texture getTexture() {
return bird;
}
【问题讨论】:
-
Vector3.scl(float)- “用一个标量缩放这个向量”。它基本上将所有值乘以该值。dt通常代表增量时间 - 自上次更新以来的时间差。因此,如果更新需要 40 毫秒,则将向量乘以40/1000。这就是移动如此之低的原因,它不是每帧 10 像素,而是其中的一小部分。
标签: java android-studio libgdx game-physics 2d-games