Matter.js我需要始终相同的运动(在任何画布大小上)



我需要帮助。我有一个球员,我想按照同样的顺序跳过这个球员。我想用返回的getHeight(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;
}
};

完整来源:链接

我不知道有哪个函数可以做所有事情,但你可以将力乘以window.innerHeightwindow.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);

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

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

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

最新更新