2017-09-20 43 views
1

我在文檔中有多個草圖實例。如何通過屏幕刷新實際重新運行特定的實例化?刷新p5的實例化

假設我有:

function buildSketch(){ 

    var sketch1 = function(sketch){ 
    sketch.setup = function(){ 
     //Do my thing 
    } 
    } 

    new p5(sketch1); 

} 


function buildSecondSketch(){ 

    var sketch2 = function(sketch){ 
    sketch.setup = function(){ 
     //Do my thing 
    } 
    } 

    new p5(sketch2); 

} 

我知道,如果我附上sketch window對象,我可以刷新,但這似乎...哈克如:

function buildSecondSketch(){ 

window.sketch = sketch // Adding this seems to help 

    var sketch2 = function(sketch){ 
    sketch.setup = function(){ 
     //Do my thing 
    } 
    } 

    new p5(sketch2); 

} 

然後我只是:

sketch.setup() 

哪個窩RKS。但我不知道爲什麼這會起作用。

+1

你真的需要養成發佈[mcve]而不是斷開連接的片段的習慣。另外,你打算接受你之前提出的問題的答案嗎? –

+0

Woah,我的壞...我很抱歉,我以爲我接受了他們。 – Modermo

+0

關於斷開連接的代碼片段,關於實際工作的代碼並不多,更多的是關於我是否主要理解某些東西。在上面的例子中(沒有雙關語意圖)和[最後一個問題](https://stackoverflow.com/questions/46311291/targeting-and-identifying-shapes-in-the-canvas),沒有「問題」或我得到的錯誤...更多關於如何實現我所追求的功能,並且在說明這一點時儘可能描述性。我聽到你的建議,並且會更好地遵守公佈的指導方針。 – Modermo

回答

1

你應該不是你自己調用setup()函數。

最簡單的做法可能是將refresh()函數添加到您的每個草圖。該功能將通過將任何草圖級變量設置回其原始值來剔除草圖狀態。然後調用該函數。這基本上就是你自己調用setup()所做的,但是可以避免你短路P5.js的內部自動函數調用。

無論採用哪種方式,都必須保留對草圖變量的引用。您可以使用window.sketch這樣做,它只是創建一個全局變量,或者您可以在buildSketch()函數之外聲明它們。

您也可以擺脫舊的p5實例並重新實例化它們,但這需要保留對每個p5實例的引用。

+0

我結束了將實例附加到全局變量,並從中運行它。謝謝! – Modermo