Setinterval и getImageData - PullRequest
       0

Setinterval и getImageData

0 голосов
/ 29 октября 2010

Хорошо, моя проблема в том, что я пытаюсь получить столкновение пикселей.Когда я использую getImageData в одном вызове функции, это работает.Но если я использую Setinterval, то его, как getImageData, становится Break.Код после getImageData сущности компилируется больше.Почему это происходит ??

Если я делаю это, это работает:

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

Но если я делаю это, это не работает, и getImageData похожа на Break:

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

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

Ок, итак, я просто кратко излагаю, как я это делаю.Скрипт не будет работать в обычной среде, такой как Firefox или Internet Explorer, если он не скомпилирован через сервер.Safari и Chrome Я не сейчас, я не попробовать это.Но если вы используете Firefox или Explorer, он выдаст вам сообщение об ошибке безопасности "code:" 1000.Если вы используете getImageData и setInterval в комбинации, вам нужно скомпилировать код на сервере.Сейчас я использую WampServer (может быть, google't), который на данный момент просто создает виртуальный сервер на вашем компьютере.Я также опубликовал еще одну тему, в которой «Кайл Джонс» сказал мне, чтобы я добавил это в скрипт:

netscape.security.PrivilegeManager.enablePrivilege («UniversalBrowserRead»);

Чтобы игнорировать ошибку, ноэто вырвалось из ошибки.Не настоящий прорыв, но код позади getImageData больше не компилируется.Поэтому нужно просто скомпилировать ваш код на виртуальном или реальном сервере, чтобы проверить, работает ли он.

Код столкновения HTML5 Javascript Perfect Pixel:

var FPS = 30;

setInterval (onEnterFrame, 1000 / FPS);

функция onEnterFrame ()

{

collisionCheck ();

}

function collisionCheck () {

// Получить данные пикселей

var imgData = context2D.getImageData (x_position, y_position, 1, 1);

var imgPixelData =imgData.data;

// Проверьте, нет ли столкновения (3 - альфа-канал (RGBA))

if (imgPixelData [3]> = 1)

{

 if (window.console) 

 {

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

 } 

}

}

И вот он запускается на сервере, и вы получаете столкновение пикселей.

Я искал вокруг в интернетеи кто-то нашел какой-нибудь сайт, где есть хорошая инструкция по этому поводу, поэтому я надеюсь, что это кому-нибудь поможет:).

0 голосов
/ 29 октября 2010

Просто порезал и изменил какой-то код, который я нашел в сети, чтобы проверить предложенный вами сценарий. Кажется, работает на меня

Событие 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...