Java 在libGDX中处理动画中剑移动的最佳方法

Java 在libGDX中处理动画中剑移动的最佳方法,java,animation,libgdx,Java,Animation,Libgdx,所以我有一个角色,我做了一个长方形来覆盖他的身体,以便与敌人相交,这样他在与敌人相交时会受伤。我遇到的问题是,他有一把剑,剑在他身后成一个角度,因为他随身携带着剑,当玩家攻击时,会播放动画,剑会在他头上摆动,并在他面前击落。我有一个多边形,它在空闲/奔跑位置勾勒出剑的轮廓,但我不知道在攻击动画的每一帧中尝试手动移动多边形是否值得,然后在动画的每一帧中检查重叠多边形,以查看剑是否击中敌人,或者,如果我只是将覆盖身体的矩形变宽,以便在动画结束时容纳剑,并检查它是否与敌人相交,那么如果它与敌人相交,并

所以我有一个角色,我做了一个长方形来覆盖他的身体,以便与敌人相交,这样他在与敌人相交时会受伤。我遇到的问题是,他有一把剑,剑在他身后成一个角度,因为他随身携带着剑,当玩家攻击时,会播放动画,剑会在他头上摆动,并在他面前击落。我有一个多边形,它在空闲/奔跑位置勾勒出剑的轮廓,但我不知道在攻击动画的每一帧中尝试手动移动多边形是否值得,然后在动画的每一帧中检查重叠多边形,以查看剑是否击中敌人,或者,如果我只是将覆盖身体的矩形变宽,以便在动画结束时容纳剑,并检查它是否与敌人相交,那么如果它与敌人相交,并且角色正在攻击,则敌人受到伤害,而不是角色

这真的很难解释,我希望这是有道理的。老实说,我甚至不知道当角色攻击时,如何在动画的每一帧中手动移动多边形。目前,我正在使用一个“GameRenderer”类来处理“render”方法,并根据游戏中发生的事情将正确的帧绘制到屏幕上,类似这样的

public void render() {
    //draw the world and such here.
    batcher.begin(); //batcher is a SpriteBatcher
    Animation<TextureRegion> ani;
    if(character.isAttacking()) {
       ani = AssetLoader.playerAnimations.get("attack");
       batcher.draw(ani.getKeyFrame(character.getRunTime()), character.getX(), character.getY(), character.getWidth(), character.getHeight());

      if(ani.isAnimationFinished(character.getRunTime()) {
        character.setAttacking(false);
      }
    } else if(character.isMoving()) {
       ani = AssetLoader.playerAnimations.get("run");
       //draw running
    } else {
       ani = AssetLoader.playerAnimation.get("idle");
       //draw idle
    }
}
希望这能有所帮助,我也有道理。我非常乐意提供一切必要的帮助。我真的迷路了,正在寻找处理如何检测与剑的碰撞的最佳解决方案,如果我应该尝试在攻击动画的每一帧更新剑多边形的位置和旋转,然后检查碰撞,或者,如果我只是扩展角色身体的矩形,当它摆动时包括剑,并检查与剑的碰撞


谢谢,我为混乱的代码和糟糕的描述道歉

据我所知,这是一个2D游戏

一种可能有效的方法是:

  • 找出玩家和敌人之间的距离

  • 如果距离小于剑的摆动范围,那么玩家已经击中了敌人

  • 你还必须考虑球员面对的方向等


  • 另一种选择是使用Box2D,对关节上的剑多边形集施加力,看看它是否击中了什么东西,但这是另一个答案。

    我确实这样做了,看起来很不错。我只是创建一个2d数组,每个帧的角度为x,y。(共10帧)及其与char sprite的分离。看一看,用重叠矩形检查碰撞很容易(而且很便宜)。不需要复杂的多边形碰撞检查。
    class Character {
      //all the variables needed
      public final int CHARACTER_HEIGHT = 76;
      public final int CHARACTER_WIDTH = 74; //all measurements are half of sprite size
      //rest of the variables
    
      public Character(int x, int y, int width, int height) {
        this.width = width;
        this.height = height;
        this.centerX = (width / 2);
        this.centerY = (height / 2);
        this.bodyX = Math.round((x + centerX) - (CHARACTER_WIDTH / 2));
        this.bodyY = Math.round((y + centerY) - (CHARACTER_HEIGHT / 2) - 14);
        position = new Vector2(x, y);
        characterBody = new Rectangle();
        sword = new Polygon(new float[] {0, 0, 12, 0, 12, 50, 0, 50});
        sword.setOrigin(30, 50);
        sword.setRotation(-78f);
      }
    
      public void update(float delta) {
        runTime += delta;
        characterBody.set(bodyX, bodyY, CHARACTER_WIDTH, CHARACTER_HEIGHT);
        sword.setPosition(bodyX + 5, (bodyY - CHARACTER_HEIGTH + 18));
        position.add(velocity.cpy().scl(delta);
      }
    
      //getters and setters for characterbody, sword, isAttacking, etc
    }