当前位置: 首页 > 知识库问答 >
问题:

当相机从起始视点开始移动时,健康条纹理的移动速度比播放器快

茹建茗
2023-03-14

当玩家离开敌人一段距离时,他们的行为被设定为到达,并且他们跟踪玩家,同时导致健康条移动到屏幕外:这是当相机和敌人开始移动时,健康条离开屏幕

public void drawHealthBar(SpriteBatch batch){
    batch.begin();
    batch.draw(wHB,
            (this.getX() * GameConfig.PPM) + 20, (this.getY() * GameConfig.PPM) + 35 ,
            (Gdx.graphics.getWidth() / 15) * wolfHealth, 8);
    batch.draw(gHB,
            (this.getX() * GameConfig.PPM) + 20, (this.getY() * GameConfig.PPM) + 35 ,
            (Gdx.graphics.getWidth() / 15) * 1, 8);
    batch.end();
}

whbghb是健康条纹理区域,有人知道为什么会这样吗?

下面是我的Play Screen类中的渲染函数,每个狼兽敌人的生命条正在被绘制:

public void render(float delta) {
    update(delta);
    Gdx.gl.glClearColor(1,0,0,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    // render map
    renderer.render();

    // render map bodies
    //box2DDebugRenderer.render(world, gameCam.combined);

    game.getBatch().setProjectionMatrix(gameCam.combined);
    game.getBatch().begin();
    player.draw(game.getBatch());
    for(WolfBeast wolfBeast: wolfEnemies){
        wolfBeast.draw(game.getBatch());
    }
    for(WaterBlast waterBlast: waterBlasts) {
        waterBlast.draw(game.getBatch());
    }
    game.getBatch().end();

    hud.stage.draw();

    for(WolfBeast wolfBeast: wolfEnemies){

        if(wolfBeast.wolfHealth > .6)
            game.getBatch().setColor(Color.GREEN);
        else if(wolfBeast.wolfHealth > .2)
            game.getBatch().setColor(Color.ORANGE);
        else
            game.getBatch().setColor(Color.RED);

        wolfBeast.drawHealthBar(game.getBatch());
        game.getBatch().setColor(Color.WHITE);
    }

    if(Gdx.app.getType() == Application.ApplicationType.Android) {
        moveButtons.drawButtons();
    }


}
public void update(float dt){
    stateTimer += dt;
    int playerXpos = (int) player.pBody.getPosition().x;
    int wolfBodyXpos = (int) this.eBody.getPosition().x;
    //System.out.println("playerXpos: " + playerXpos + " " + "wolfXpos: " + wolfBodyXpos);
    if (abs(playerXpos - wolfBodyXpos) >= 3.5f) {
        Arrive<Vector2> arriveSB = new Arrive<Vector2>(entity, target)
                .setTimeToTarget(.01f)
                .setArrivalTolerance(2.5f)
                .setDecelerationRadius(100);
        entity.setBehavior(arriveSB);
    }
    else {
        entity.setBehavior(null);
    }

    setPosition(eBody.getPosition().x - getWidth() / 2, eBody.getPosition().y - getHeight() / 2);
    setRegion(getFrame(dt));
    entity.update(dt);
}

共有1个答案

李振国
2023-03-14

问题是我的投影矩阵。我使用了不同的sprite投影和不同的body投影,这就是为什么它们以不同的速度移动。这是最有效的:

batch.draw(getFrame(dt),
            pBody.getPosition().x,pBody.getPosition().y,
            1,1,
            1, 1,
            1,1 ,
            0
            );

这对我有用:

public void drawHealthBar(SpriteBatch batch){
    batch.draw(wHB,
            eBody.getPosition().x - .4f,
            eBody.getPosition().y + .2f,
            .7f * wolfHealth, .12f
                );
    batch.draw(gHB,
            eBody.getPosition().x - .4f,
            eBody.getPosition().y + .2f,
            .7f, .12f
                );
}

根据资产规模和规模调整值

 类似资料:
  • Android播放开发SDK IOS播放开发SDK

  • 我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。

  • 我在Box2d上遇到了问题,因为我是Box2d新手,所以无法处理我的播放器的移动。当用户在我的游戏中触摸左右按钮时,我想将我的玩家左右移动。在我的游戏中,玩家已经通过了y轴。我想在控制播放器的同时看到很酷的平滑动画。我就是不能把我的球员移到左边我怎么能做到?提前谢谢 //编辑 我创建了一个测试夹具,我可以移动夹具,但不能移动我的球员。如何将我的玩家精灵连接到身体上?我必须找到控制身体的正确方法。一

  • 问题内容: 播放器是一个面板,将其删除,将其位置更改,然后重新添加到绘制到主框架的另一个面板(包含此方法的面板)中。还有许多其他小的面板,其中包含草精灵作为地形图块绘制到主面板上。我认为问题在于,当我致电时,它也会重新验证所有这些小面板。我该如何解决? 编辑:我应该提到,我用来将玩家放置在主面板上。 问题答案: 似乎是一项繁重的操作,您可以在EDT(GUI线程)中执行它。而是从新线程或SwingW

  • zyMedia 是由掌阅科技开源的基于HTML5 video和audio的自定义UI多媒体播放器,经过多种移动端设备环境的检测(尤其是国产设备和浏览器),已用于公司的产品线。 特点: 支持主流移动设备移动端浏览器,适合国内移动环境。 支持多种视频、音频格式,如mp4、mp3、oga、webm等。 轻量,UglifyJS压缩14KB 已通过测试的设备: 小米1、小米2s、小米 MI3、红米、小米 M

  • 感谢您抽出时间阅读此文章。现在我正在制作一个非常基本的基于瓷砖的游戏。地图是大量的16x16分幅,角色图像也是16x16分幅。我的角色有自己的类,它是sprite类的扩展,x和y位置根据平铺位置保存。 要注意,我是相当缺乏经验pyplay。 我的问题是,我计划将角色移动限制在一次一个图块,我不知道如何做到这一点,即使玩家快速按下方向键几十次,(WASD或箭头键)它也只会移动以一定的速度从瓷砖到瓷砖