Повторная центровка холста p5

#javascript #html #css #p5.js

#javascript #HTML #css #p5.js

Вопрос:

Я работаю над игрой с препятствиями, похожей на игру Chrome dinosaur или geometry dash, и у меня возникли некоторые проблемы с CSS.

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

 html, body {
  
  margin: 0;
  padding: 0;
  align-items: center;
  display: flex;
  
}
canvas {
  
  position: absolute;
  top: 25%;
  left: 10%;
  display: block;
  border: 15px solid #edce00;   
  border-radius: 30px;
  align-items: center;
  display: flex;
  
}
 

Вот что он показывает для полноэкранных страниц и измененных размеров страниц:

полноэкранный режим
изменен размер экрана

Как вы можете видеть, игра не полностью видна на странице, где скорректированы размеры. это приводит меня ко второй проблеме.

Моя вторая проблема: я также пытаюсь установить минимальный размер страницы. Таким образом, будет показан весь игровой экран, независимо от того, насколько большим или маленьким (до некоторой степени) является экран. Есть ли какой-либо способ изменить размер холста в соответствии с размером страницы и убедиться, что он не меньше значения «x»? Будет ли это сделано на Javascript или CSS?

Если бы вы могли помочь мне с любой проблемой, это очень помогло бы. Спасибо!

Редактировать: вот ссылка на эскиз p5, если это поможет. https://editor.p5js.org/ThisBubblyBoi/sketches/CbxWQSrjF

Ответ №1:

К сожалению, если вы попытаетесь использовать CSS для изменения размера элемента canvas, при рисовании на нем он станет размытым.

Таким образом, вы должны использовать Js для установки атрибутов width и height холста. Помните, что из-за этого вам, вероятно, придется изменить способ рисования на холсте.

 let canvas = document.querySelector("#myCanvas");
canvas.width = Math.max(400, canvas.clientWidth);
canvas.height = canvas.clientHeight; 
 body {
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  height: 100vh;
  width: 100vw;
  min-width: 400px;
  padding: 60px;

}

canvas {
  border: 2px solid yellow;
  width: 100%;
  height: 100px;
} 
 <canvas id="myCanvas" width="50" height="50"/> 

Обратите внимание, что если рисовать на холсте, а затем изменять его размер, это решение будет выглядеть размытым, вам просто нужно обновить страницу с правильным разрешением, чтобы исправить это.

Комментарии:

1. Я пробовал это, но ваше исправление, похоже, не работает. При использовании Math.min() холст становится чрезвычайно маленьким. Я также пытался выполнить Math.max(), но это не изменило размер холста в соответствии с размером окна. Я думаю, что холст p5 может быть основан по-разному и иметь разную механику — однако я не уверен на 100%. Я связал свой эскиз p5, если это поможет. Спасибо!

2. Здравствуйте, вы абсолютно правы в своих комментариях, я не обратил внимания на p5.js тег, я продублировал ваш текущий проект и применил изменения к style.css и sketch.js только в setup() функции. Я не сделал ничего, что сильно отличалось бы от того, что я показал в своем ответе, но вы можете спросить, если что-то, что вы не поняли. Примечание: нажмите кнопку воспроизведения после изменения размера окна, чтобы я мог повторно отобразить холст с правильным размером.