Matter.js мне нужно всегда одно и то же движение (на любом размере холста) - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужна помощь.У меня есть игрок, и я хочу прыгать игрок в том же диаметральном порядке.Я хотел исправить это с помощью 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;
    }

 };

Полный источник: ссылка

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Я полагаю, что у44.js уже есть диаметральная шкала с простыми числовыми вводами.

Когда я удаляю все getHeight и getWidth и помещаю числа, все начинается снова нормально.

Это мое решениедля любой платформы, чтобы получить процент всегда независимо от размера экрана.Мое мнение: Matter.js выглядит хорошим решением.

0 голосов
/ 07 апреля 2019

Я не знаю ни одной функции, которая бы делала все, но вы можете умножить силу на window.innerHeight или 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 или нет, вам придется преобразовать все значения пикселей в vw или vh (в зависимости от того, изменяете ли вы x или y объекта)так это выглядит так:

var object = Bodies.rectangle(vw*60, vw*40, vw*8, vw*5);
...