0

我需要帮助。我有一个播放器,我想以相同的直径顺序跳跃播放器。我想用 getHeight 和 return ( innerHeight/100 * per ) 来解决这个问题,但没有任何改进。更糟糕的是,如果画布尺寸变大,玩家不会跳得那么高,而如果窗口变小,玩家会跳得更高!我不想以硬代码方式调用。我需要响应功能!

“在投反对票之前发表评论”

r.player.force = {
 x: 0,
 y: -(getHeight(0.03)),
};
Matter.Body.applyForce(r.player, { x: r.player.position.x, y: r.player.position.y }, r.player.force);

public getHeight(percente: number): number {    
 return this.reperH() / 100 * percente;    
}

this.reperH = function () {

 if ((window as any).innerHeight > (window as any).innerWidth / this.aspectRatio) {
  return (window as any).innerWidth / this.aspectRatio;
    } else {
      return (window as any).innerHeight;
    }

 };

完整来源:链接

4

2 回答 2

1

我不知道一个函数可以做所有事情,但你可以将力乘以window.innerHeightor window.innerWidth

var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
var vw = windowWidth/100;
var vh = windowHeight/100;
var jumpForce = vh*-5;
var pushX = vw*0.1;

之后,您只需jumpForce在玩家跳跃时应用到玩家,pushX在玩家移动时应用到玩家(当玩家向左移动时,您必须将其乘以 -1)。如果您希望它看起来更加一致,您可以jumpForce使用vw代替vh并确保游戏中创建的所有对象都vw用于定位和缩放。

无论您是否仅使用vw,您都必须将所有像素值转换为vwvh(取决于您是否更改对象的 x 或 y),所以它看起来像这样:

var object = Bodies.rectangle(vw*60, vw*40, vw*8, vw*5);
于 2019-04-07T18:06:57.890 回答
0

我认为matter.js 已经有了带有简单数字输入的直径刻度。

当我删除所有 getHeight 和 getWidth 并输入数字时,一切都重新开始正常工作。

无论屏幕大小如何,任何平台都可以始终获得百分比是我的解决方案。我的观点:Matter.js 看起来是个不错的解决方案。

于 2019-06-17T14:34:55.377 回答