【问题标题】:JavaScript multidimensional array checksJavaScript 多维数组检查
【发布时间】:2012-03-15 05:16:50
【问题描述】:

我的数组有问题。我创建了它们(我不确定设计是否正确),但很难理解如何对其进行检查。

我的数组是这样创建的:

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;

我只是假设这是存储图像位置信息并为其赋予唯一 ID 的正确方法。

然后我想检查以下示例条件:

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

但我认为我的数组结构错误?有什么建议吗?

【问题讨论】:

    标签: javascript arrays for-loop


    【解决方案1】:

    使用一个对象。更干净:

    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
    }
    

    【讨论】:

    • 我将如何做一个 if 语句来获取 id ?
    • 如果您查看第一篇文章,我试图通过检查数组中的值来获取 [uid] 值。但我认为我把数组弄错了=/
    • 我可能没明白您所说的“检查”是什么意思。你能解释一下你认为这个词是什么意思吗?
    • 基本上试图通过对值使用 if 语句来获取 uid 可以说: sprite[uid][0] = 5 sprite[uid][1]= 10 我需要获取“uid”,其中0 = 5 和 1 = 10。这是一个简化的解释
    • 问题是 uid 是数据库中携带的 id,例如,它可能从 3000 奇数开始 =/ 取决于用户的 ID,不确定带有计数器的 for 循环是否有效?
    【解决方案2】:

    看起来你想要“精灵”对象的数组

    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)
    {.... }
    

    【讨论】:

    • 我不能使用 sprites[1] 因为我试图检索 [1] 的值,也就是我试图通过检查数组的值来获取“uid”。哪个匹配=我抓取的uid =/但是如果我不能在数组中使用uid,我该如何构造数组?有许多 uid 将被加载,它们都有自己的信息
    【解决方案3】:

    您所做的测试不正确,因为您需要包含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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多