乒乓球游戏 - 使用浮动存储位置时球运动不流畅

问题描述 投票:0回答:1

我正在使用

Wasm4
开发一个 pong-like 游戏。我有不同的移动方法的重要实体,一个是
Player
,它是桨,另一个是
Ball
,它们两者之间的主要区别是玩家通过用户输入移动,存储它的位置使用 i32 并且 Ball 有一个
speed
和一个
direction
向量,它每帧更新它的位置。


球码

export class Ball extends Entity {
   private position: Position<f32> = new Position<f32>();
   private speed: u8 = 2;
   
   public spawn(x: i32, y: i32): void {
    this.position.x = x;
    this.position.y = y;

    let angle = <f32>randomInRangeFloat(30, 150);
    angle = angle * <f32>(Math.PI / 180);

    this.direction.x = <f32>Math.cos(angle);
    this.direction.y = <f32>Math.sin(angle);
  }

  public update(): Ball {
    this.position.x += this.direction.x * this.speed;
    this.position.y += this.direction.y * this.speed;

    // ...
  }

  public draw(): Ball {
    w4.oval(
      <i32>this.position.x,
      <i32>this.position.y,
      this.size,
      this.size
    );
  }
}

问题是,当我使用

f32
的位置时,运动看起来很漂亮 glitchy 但准确的产卵方向,但是当我将位置更改为
i32
时,运动非常流畅,但运动很奇怪,例如,它不适用于较小的速度。

我是游戏开发的新手,所以我不知道我的公式是否有问题,或者我应该在某处添加另一个元素。

希望有人能帮助我。 (如果我没有提供足够的信息,请要求我,我会加强答案)

game-physics game-development webassembly assemblyscript
1个回答
0
投票

不幸的是,看起来你没有做错任何事,但你开始触及游戏开发中更深层次的主题之一:抗锯齿。

关于 rasterization 的维基百科文章有一个很好的 animation 关于它。如果这是您的游戏中发生的那种事情,那么可能是引入抗锯齿过滤器的时候了。不幸的是,我不是游戏开发专家,所以我只能指导您使用最简单的算法,例如 Bresenham。维基百科的文章也应该让你进入这个广阔的领域。

当然,Handmade Hero 始终是一个很好的学习资源。

© www.soinside.com 2019 - 2024. All rights reserved.