java - 关于在2D游戏中编写重力代码的问题

标签 java android-studio libgdx game-physics 2d-games

我是一名初学者,正在按照教程在 android studio 中编写 flappybird 代码。我对下面的代码有两个问题。第一帧小鸟下落 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;
}

最佳答案

首先,dt 是第一帧和第二帧渲染时间差的增量时间。在 1 秒内,此渲染方法执行大约 60 次(即每秒帧数)。

因此,您应该将 delta 乘以速度以平滑移动。 示例

First render loop:
Velocity-Y: 250px
dt: 0.018
Result: 4.5px

Second render loop:
Velocity-Y: 240px
dt: 0.025
Result: 4 px

In result this will become 
250 px in 1 second.

If you do not use scale this will become 
First Render Loop: 
Velocity-Y: 250px
dt: 0.018: 
Result: 250px

Second Render Loop:
Velocity-Y: 240px
dt: 0.025
Result: 240px

In result there will be 250 + 240 + .... 10 + 0 px for 1 second

关于java - 关于在2D游戏中编写重力代码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967115/

相关文章:

java - 清理 URL 以删除个人信息

Android Studio 团队基础服务器

java - 可变预期误差

java - 制作独立的 Java EXE 文件

java - 如何从java中的系统字体获取ttf字体数据

java - 拦截 Hibernate 条件查询

java - 算法可能的值java数独

java - 检查ArrayList元素是否存在

Android Studio SDK 托管已禁用

java - 在 LibGDX 游戏中显示 FPS