如何在P5js中使用createGraphics函数时执行函数?

问题描述:

我想使用的createGraphics函数来绘制另一个屏幕上的东西...然后粘贴到我的主草图..如何在P5js中使用createGraphics函数时执行函数?

在实况

,他们给出的例子是做这样的事情:

var vignette; 

function setup(){ 
    createCanvas(710, 400); 
    vignette = createGraphics(400, 250); 
} 

function draw(){ 

    ellipse(mouseX, mouseY, 60, 60); 

    pg.background(51); 
    pg.noFill(); 
    pg.stroke(255); 
    pg.ellipse(mouseX-150, mouseY-75, 60, 60); 

    //Draw the offscreen buffer to the screen with image() 
    image(pg, 150, 75); 
} 

但我想要做的是比pg.background(51)

我要运行该功能,创建一个径向渐变更为复杂:

function drawGradient() { 
    for (let r = canvasX; r > 0; --r) { 
    let lightnes = map(r,0,canvasX,360,0) 
    fill(360, 360, lightnes) 
    ellipse(0, 0, r, r) 
    } 
} 

但如果我不vignette.drawGradient()我得到的错误:vignette.drawGradient不是一个函数...

所以,我怎么就可以执行的createGraphics内drawgradient函数里面的东西像什么功能?

这里是codepen:https://codepen.io/giorgiomartini/pen/ZJjWbw?editors=0010

+0

顺便说一句,我注意到你只接受8个答案,尽管问了28个问题。在提出更多问题之前,您可能想回头接受一些答案。 –

你不会把任何 “内部” createGraphics()功能。 createGraphics()函数返回p5.Renderer的实例。然后您调用该实例的函数。

您正试图拨打vignette.drawGradient()以正确的方向,但正如您发现的,p5.Renderer不包含drawGradient()函数。只有您的素描包含该功能,因为它是您创建的。

p5.Renderer包含绘图功能:这样的东西background()fill()rect()ellipse()。所以如果你想绘制渐变到你的vignette渲染器,你必须调用实际在你的vignette变量上绘制东西的函数。像这样:

function drawGradient() { 
    for (let r = canvasX; r > 0; --r) { 
    let lightnes = map(r,0,canvasX,360,0) 
    vignette.fill(360, 360, lightnes) 
    vignette.ellipse(0, 0, r, r) 
    } 
} 
+0

太好了,谢谢你的回答,但为什么我只能得到四分之一的圆圈,而且看起来都是黑色的,并且画出来了?继承我的codepen:https://codepen.io/giorgiomartini/pen/gxjoxp?editors=0010它应该看起来像一个正常的径向渐变。非常感谢! :) –

+0

@GiorgioMartini因为你对'colorMode()'和'translate()'的调用在草图上,而不是在'vignette'变量上。 –

+0

感谢您的回答,我尝试了您对颜色模式的建议,并将其翻译为需要放在小插曲上,但它仍然没有任何想法?这里的笔:https://codepen.io/giorgiomartini/pen/gxjoxp我在我的主要草图中留下了另一种颜色模式,因为我还需要一个。 –