2013-03-19 58 views
1

我調整了Processing草圖以生成我需要用於Web應用程序的電視靜態效果的變體。現在我想將這個效果轉換成JS/canvas。什麼是loadPixels()的純JavaScript /帆布當量,copyArray()updatedPixels(),並且draw()如下面的處理代碼中給出,或如何最好地去轉換鑑於這種情況,很可能,JS /帆布都沒有高效加工/ Java的?處理功能相當於JavaScript的效率

int[] ppx; 
Random generator = new Random(); 

void setup() { 
    size(640,480); 
    loadPixels(); 
    ppx = new int[pixels.length]; 
    for (int y = 0; y < ppx.length;y++) { 
     int spread = generator.nextInt(5); 
     switch(spread) { 
     case(1): 
      if(y-480 > 0) { 
       ppx[y] = ppx[y-480]; 
      } 
      break; 
     case(2): 
      if(y-1 > 0) { 
       ppx[y] = ppx[y-1]; 
      } 
      break; 
     case(3): 
      ppx[y] = color(0,generator.nextInt(2)*255,0); 
      if(y+480 < ppx.length) { 
       ppx[y+480] = ppx[y]; 
      } 
      break; 
     case(4): 
      ppx[y] = color(0,generator.nextInt(2)*255,0); 
      if(y+1 < ppx.length) { 
       ppx[y+1] = ppx[y]; 
      } 
      break; 
     case(0): 
      break; 
     }; 
    } 
    frameRate(100000000000L); 

} 
void draw() { 
    for (int y = 0; y < height;) 
    arrayCopy(ppx, generator.nextInt(height/2), pixels, y++*width,width); 
    updatePixels(); 
} 

回答

0

我已經s指向一個HTMLCanvasElement,實現了這些功能。陪審團還指出是否arrayCopy can be improvedloop unrolling

var x = s.getContext('2d'); 
    var pixels; 
    function arrayCopy(src,sstart,dst,dstart,length) { 
      length += sstart; 
      dstart += length; 
      while(--length > sstart) { 
        dst[--dstart] = src[length];  
      }  
    } 
    function loadPixels() { 
      pixels = x.getImageData(0,0,s.width,s.height); 
    } 
    function updatePixels() { 
      x.putImageData(0,0,pixels); 
    } 

我仍然不確定如何讓JS相當於draw()功能。

+0

draw()是一個循環,就像while(true){do stuff}一樣。它也嘗試保持幀率穩定。您可以查看源代碼:https://github.com/processing/processing/blob/master/core/src/processing/core/PApplet.java – 2013-03-20 06:12:34

+0

@ v.k。涼。感謝您的鏈接! – 2013-03-21 01:57:47

1

您可以使用約翰Resig的Processing.js的一個鏡頭轉換: http://processingjs.org/

Canvas和JS的作品是一個比較低的水平,也許從這裏開始: http://net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-pixel-manipulation/

+0

我試過了,但是它失敗了一個非定位令牌非法。 – 2013-03-19 13:56:45

+0

試着看看那個net.tutsplus文章,我看到至少有兩個你想要的功能。 – Jeffpowrs 2013-03-19 13:58:10

+0

也許它失敗的原因隨機,這是純java。 Processingjs不能翻譯純java。嘗試使用內置函數random() http://processing.org/reference/random_.html – 2013-03-20 06:07:54