2010-10-29 50 views
0

好吧,所以我的問題是,即時通訊嘗試獲得像素衝突。 當在單個函數調用中使用getImageData時,它可以工作。 但是,如果即時通訊使用Setinterval它像getImageData成爲一個休息。 getImageData之後的代碼正在被編譯。 這是怎麼發生的?Setinterval和getImageData

如果我這樣做的工作:

checkCollision(); 
function checkCollision() 
{ 
    var imgData = context.getImageData(0, 0, 10, 10); 
    context.log(imgData.data); 
} 

但是,如果我做到這一點不起作用,getImageData像一休:

setInterval(checkCollision, 1000/FPS); 
function checkCollision() 
{ 
    var imgData = context.getImageData(0, 0, 10, 10); 
    // Code essent being compiled 
    context.log(imgData.data); 
} 
+0

假設它在問題中有一個錯字,但不應該是'conteXt.log(...)'? – 2010-10-29 10:00:01

+0

y這是一個錯字:P srry,但問題仍然存在:) – 2010-10-29 10:01:02

+0

所以這是更好:) – 2010-10-29 10:01:40

回答

0

只是切碎,改變了一些代碼,我發現通過網絡來測試你提出的場景。似乎正在爲我工​​作

onload事件觸發主函數。一旦圖像呈現,我添加了警報消息,以確認代碼是否按照設定的時間間隔被調用。

測試了webkit和firefox上的代碼,它似乎工作得很好。

<script type="text/javascript"> 

function main() { 
    window.setInterval("renderImage();",2000); 

} 

function renderImage(){ 
    var canvas = document.getElementById('canvas'); 
    var ctx = canvas.getContext('2d'); 
    var img = new Image(); 

    img.addEventListener('load', function() { 
    var x = 0, 
     y = 0; 

    ctx.drawImage(this, x, y); 

    var imgd = ctx.getImageData(x, y, this.width, this.height); 
    var imxpxl = imgd.data; 
    var len=Math.floor(Math.random()*imxpxl.length+1); 
    for (var i = 0; i < len; i += 4) { 
     imxpxl[i] = 255 - imxpxl[i]; // red 
     imxpxl[i + 1] = 255 - imxpxl[i + 1] // green; 
     imxpxl[i + 2] = 255 - imxpxl[i + 2] // blue; 
     // i+3 is alpha 
    } 
    ctx.putImageData(imgd, x, y); 
    javascript: console.log(imgd.data); 
}, 
    false); 

    img.src = './logo.png'; 

}

</script> 
+0

我確定函數被調用。爲了確保我在getImageData之前放置了一個context.log(..),並調用了它,但第二個context.log(..)需要它。我也嘗試了你建議的setInterval。但仍然沒有區別。 – 2010-10-29 10:14:53

+0

您能否將時間段增加到10-15秒或添加事件偵聽器?我也會爲自己嘗試。 – Philar 2010-10-29 10:25:58

+0

我試過了,但是我在「」裏面放了什麼,addEventListener中沒有繼續循環函數。 10-15秒沒有工作。 – 2010-10-29 10:36:55

0

奧凱所以笏我DIT的痘痘總結。如果不通過服務器進行編譯,腳本不會在Firefox或Internet Explorer等常規環境中工作。 Safari和Chrome我現在不用我親自試試這個。但是如果你使用Firefox或者Explorer,它會給你安全錯誤「code:」1000。如果您正在使用getImageData和setInterval,則需要在服務器上編譯代碼。我現在使用的是「WampServer」(可以是google't),它只是暫時在您的計算機上創建一個虛擬服務器。我還發布了另一個話題,「凱爾瓊斯」告訴我把它放在腳本中:

netscape.security.PrivilegeManager.enablePrivilege(「UniversalBrowserRead」);

要忽略錯誤,但它會突破錯誤。不是真正的休息,但getImageData背後的代碼正在被編譯了。所以要做的事情就是在虛擬或真實服務器上編譯你的代碼,看它是否有效。

的HTML5的Javascript絕佳像素碰撞代碼:

變種FPS = 30;

setInterval(onEnterFrame,1000/FPS);

功能的onEnterFrame()

{

collisionCheck();

}

功能collisionCheck() {

//獲取像素數據

變種imgData = context2D。getImageData(x_position,y_position,1,1);

var imgPixelData = imgData.data;

//看是否有任何碰撞(3爲阿爾法通道(RGBA))

如果(imgPixelData [3]> = 1)

{

if (window.console) 

{ 

     console.log("You go a Hit!!"); 

} 

}

}

這就是它運行在服務器上,你g像素碰撞。

我搜索角落找尋在互聯網上,dident找到任何網站geving約一個很好的指示,所以我希望這可以幫助別人了:)。