为什么当我 运行 代码时 createCapture 不起作用?
Why does createCapture not work when I run the code?
我正在处理的项目应该有代码 createCapture,但是当我 运行 代码时它不起作用,尽管代码中有 createCapture()。
当我运行它时,我会点击到第二页,第二页应该有一个createCapture。
当点击到第二页时,相机应该打开
JS代码:
let screen = 0;
let saveB;
let fullB;
let capture;
function setup() {
createCanvas(400,400);
}
function draw() {
if(screen == 0) {
startScreen();
} else if(screen == 1) {
mainScreen();
} else if(screen == 2) {
endScreen();
}
}
function startScreen() {
background(100);
fill(250);
text('Here you are', width / 2, height /2);
text('Click to Start', width / 2, height / 2 + 20);
textAlign(CENTER);
}
function mousePressed() {
if(screen == 0) {
screen = 1;
} else if(screen == 2) {
screen = 0;
}
}
function mainScreen() {
background(100, 200, 250);
text('This is you ', 40, 30);
saveB = createButton('Save');
saveB.mousePressed(Savefile);
fullB = createButton('FullScreen');
fullB.mousePressed(FullScreen);
capture = createCapture('VIDEO');
capture.position(200,200);
capture.size(100, 100);
let audio = createCapture('AUDIO');
}
function Savefile() {
save('Photo.jpg');
}
function FullScreen() {
let fs = fullscreen
fullscreen(!fs);
}
function endScreen() {
background(100,200,200);
fill(250);
text('Thank you for looking at yourself', width / 2, height / 2);
text('Click to restart', width / 2, height / 2 + 20);
}
html, body {
margin: 0;
padding: 0;
}
canvas {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sketch</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="libraries/p5.min.js"></script>
<script src="libraries/p5.sound.min.js"></script>
</head>
<body>
<script src="sketch.js"></script>
</body>
</html>
createCapture 应该出现在第二页,但它没有。提前谢谢你。
您可能没有权限在您使用此代码的上下文中访问相机。如果您的代码 运行 在另一个网站的 iframe 中,它可能有限制,甚至无法请求访问网络摄像头。
除此之外,您的代码大部分都能正常工作。但是,当您到达屏幕 1 (a.k.a.mainScreen) 时,您当前正在重新创建按钮并捕获每一帧,这不是您想要做的。按钮和捕获对象都是持久化的,所以你只需要创建一次。
此外,当您的代码在屏幕上显示网络摄像头视频时,它不会出现在您单击“保存”时生成的文件中。这是因为创建捕获对象实际上并没有将捕获的图像绘制到您的 canvas。相反,您需要隐藏捕获对象并将其作为图像绘制到 canvas。这里有一个working version of your code hosted on p5js.org。下面是一个只有相关位的缩略版本:
let saveB;
let capture;
function setup() {
createCanvas(400, 400);
}
function draw() {
mainScreen();
}
let mainScreenInitialized = false;
function mainScreen() {
if (!mainScreenInitialized) {
mainScreenInitialized = true;
background(100, 200, 250);
text('This is you ', 40, 30);
saveB = createButton('Save');
saveB.mousePressed(Savefile);
capture = createCapture('VIDEO');
capture.hide();
}
let aspect = capture.height / capture.width;
image(capture, 100, 100, 200, 200 * aspect);
}
function Savefile() {
save('Photo.jpg');
}
不幸的是,我无法将其制作成 Whosebug 上的片段,因为它运行的 iframe 没有请求访问网络摄像头的权限。
我正在处理的项目应该有代码 createCapture,但是当我 运行 代码时它不起作用,尽管代码中有 createCapture()。
当我运行它时,我会点击到第二页,第二页应该有一个createCapture。 当点击到第二页时,相机应该打开
JS代码:
let screen = 0;
let saveB;
let fullB;
let capture;
function setup() {
createCanvas(400,400);
}
function draw() {
if(screen == 0) {
startScreen();
} else if(screen == 1) {
mainScreen();
} else if(screen == 2) {
endScreen();
}
}
function startScreen() {
background(100);
fill(250);
text('Here you are', width / 2, height /2);
text('Click to Start', width / 2, height / 2 + 20);
textAlign(CENTER);
}
function mousePressed() {
if(screen == 0) {
screen = 1;
} else if(screen == 2) {
screen = 0;
}
}
function mainScreen() {
background(100, 200, 250);
text('This is you ', 40, 30);
saveB = createButton('Save');
saveB.mousePressed(Savefile);
fullB = createButton('FullScreen');
fullB.mousePressed(FullScreen);
capture = createCapture('VIDEO');
capture.position(200,200);
capture.size(100, 100);
let audio = createCapture('AUDIO');
}
function Savefile() {
save('Photo.jpg');
}
function FullScreen() {
let fs = fullscreen
fullscreen(!fs);
}
function endScreen() {
background(100,200,200);
fill(250);
text('Thank you for looking at yourself', width / 2, height / 2);
text('Click to restart', width / 2, height / 2 + 20);
}
html, body {
margin: 0;
padding: 0;
}
canvas {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sketch</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="libraries/p5.min.js"></script>
<script src="libraries/p5.sound.min.js"></script>
</head>
<body>
<script src="sketch.js"></script>
</body>
</html>
createCapture 应该出现在第二页,但它没有。提前谢谢你。
您可能没有权限在您使用此代码的上下文中访问相机。如果您的代码 运行 在另一个网站的 iframe 中,它可能有限制,甚至无法请求访问网络摄像头。
除此之外,您的代码大部分都能正常工作。但是,当您到达屏幕 1 (a.k.a.mainScreen) 时,您当前正在重新创建按钮并捕获每一帧,这不是您想要做的。按钮和捕获对象都是持久化的,所以你只需要创建一次。
此外,当您的代码在屏幕上显示网络摄像头视频时,它不会出现在您单击“保存”时生成的文件中。这是因为创建捕获对象实际上并没有将捕获的图像绘制到您的 canvas。相反,您需要隐藏捕获对象并将其作为图像绘制到 canvas。这里有一个working version of your code hosted on p5js.org。下面是一个只有相关位的缩略版本:
let saveB;
let capture;
function setup() {
createCanvas(400, 400);
}
function draw() {
mainScreen();
}
let mainScreenInitialized = false;
function mainScreen() {
if (!mainScreenInitialized) {
mainScreenInitialized = true;
background(100, 200, 250);
text('This is you ', 40, 30);
saveB = createButton('Save');
saveB.mousePressed(Savefile);
capture = createCapture('VIDEO');
capture.hide();
}
let aspect = capture.height / capture.width;
image(capture, 100, 100, 200, 200 * aspect);
}
function Savefile() {
save('Photo.jpg');
}
不幸的是,我无法将其制作成 Whosebug 上的片段,因为它运行的 iframe 没有请求访问网络摄像头的权限。