Функция p5.js clear () не работает должным образом в мобильных и некоторых браузерах - PullRequest
0 голосов
/ 06 июля 2018

HTML-код, который я использовал, очень прост и приведен ниже:

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/addons/p5.sound.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/addons/p5.dom.min.js"></script>
    <script src="sketch.js"></script>
</head>
<body>

</body>
</html>

Файл sketch.js находится здесь:

function setup() {
    createCanvas(500, 500);
}

function draw() {
    ellipse(mouseX, mouseY, 20, 20);
}

function mousePressed() {
    clear();
}

Я следовал точно так же, как в примере, но клир работает только над какой-то его частью, а не над всем холстом. Я пробовал в разных браузерах на разных компьютерах, некоторые из них работают хорошо, а некоторые нет. Также все мобильные браузеры Chrome имеют одинаковую проблему.

Ниже приведен скриншот того, как это выглядит в моем браузере: Clearing only a portion of the canvas

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Другой вариант - вызвать функцию pixelDensity(1):

function setup() {
    pixelDensity(1);
    createCanvas(500, 500);
}

function draw() {
    ellipse(mouseX, mouseY, 20, 20);
}

function mousePressed() {
    clear();
}

Более подробную информацию можно найти в ссылка :

По умолчанию плотность пикселей установлена ​​в соответствии с плотностью отображения, вызовите pixelDensity(1), чтобы отключить это.

0 голосов
/ 06 июля 2018

Похоже, это известная ошибка в p5.js, которая влияет на экраны сетчатки - https://github.com/processing/p5.js/issues/2846

Уже есть исправление для него - https://github.com/processing/p5.js/pull/2852 - но оно не было выпущено на момент написания.

Тем временем использование $("canvas")[0].getContext('2d').clearRect(0,0,width,height); вместо вызова метода clear даст желаемый эффект. Например:

function setup() {
    createCanvas(500, 500);
}

function draw() {
    ellipse(mouseX, mouseY, 20, 20);
}

function mousePressed() {
    $("canvas")[0].getContext('2d').clearRect(0,0,width,height);
}
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/addons/p5.sound.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/addons/p5.dom.min.js"></script>
...