Проверка многомерных массивов JavaScript - PullRequest
0 голосов
/ 15 марта 2012

У меня проблема с моими массивами.Я создаю их (я не уверен, что они правильно спроектированы), но мне трудно понять, как их проверять.

Мой массив создан так:

id              = i++;
uid             = my_id;
imgwidth        = img[0].width;
imgheight       = img[0].height;
spritea[uid]    = new Array();
spritea[uid][0] = abposx;
spritea[uid][1] = abposy;
spritea[uid][2] = imgwidth;
spritea[uid][3] = imgheight;

I'mтолько предполагая, что это правильный способ хранения информации о положении изображения и присвоения ему уникального идентификатора.

Затем я хочу выполнить проверки по следующим критериям:

if (x > spritea[0] && x < spritea[0]+spritea[2]){
    var uid = //get the UID of the array ;
}

Но ядумаете, я неправильно структурировал свой массив?Любой совет?

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

Используйте объект.Это чище:

function create_image(id) {
    this.id = id;
    this.height = 0;
    this.width = 0;
    this.x = 0;
    this.y = 0;
}

my_image = create_image(++i);
my_image.width = img[0].width;
my_image.height = img[0].height;
my_image.x = abposx;
my_image.y = abposy;​

Для поиска попробуйте это:

found_image = false;

for (var i = 0; i < spritea.length; i++) {
  if (spritea[i].width == 4) {
    found_image = spritea[i];
    break;
  }
}

if (found_image) {
  // found_image is your image
}
1 голос
/ 15 марта 2012

Похоже, вы хотите массив «спрайтовых» объектов

var sprites=[];

sprite[123] = { x:aposx, y:aposy, width:imgwidth, height:imgheight };

и отметьте как

var sprite = sprites[1];
if (x < sprite.x && sprite.x + sprite.width < x)
{.... }
0 голосов
/ 15 марта 2012

Тест, который вы делаете, неверен, так как вам нужно включить uid

т.е.

if (x > spritea[someuid][0] && x < spritea[someuid][0]+spritea[someuid][2]){

Но это может быть лучше:

function Image(id, x, y, w, h)
{
   this.width = w;
   this.height = h;
   this.x = x;
   this.y = y;
   this.IsXInside = function(x) { return (x > this.x && x < (this.x + this.width)); };
}

Вы создаете изображения:

spritea[uid] = new Image(id, abposx, abposy, imgwidth, imgheight);

Тогда тест становится

if (sprite[someuid].IsXInside(x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...