2010-09-09 67 views
0

编辑︰这得到了太复杂的方式,我将迁移这个问题到另一个问题,并把我的新代码在那里!请忽略此代码,因为它在逻辑上存在缺陷。 (请投票关闭的问题,因为它是没有意义的)JavaScript语法疑问? (mootools)

嗨,

我初始化下面的循环在我的代码。代码是使用mootools编写的。

CANVAS.init({ canvasElement : 'canvas', interactive : true }); 

var itemlayer = CANVAS.layers.add({ id : 'items' }); 

for(var j = 0; j < 5; j++) 
{ 
    for(var i = 0; i < 5; i++) 
    { 

    itemlayer.add({ 

     id : 'item-'+i + '-' + j, 
     x : 51 * i, 
     y : 51 * j, 
     w : 50, 
     h : 50, 
     state : 'normal', 
     interactive : true, 
     colors : { normal : '#f00', hover : '#00f' }, 
     events : { 
      onDraw : function(ctx){ 

        ctx.fillStyle = this.colors[this.state]; 
        ctx.fillRect(this.x,this.y,this.w,this.h); 

        this.setDims(this.x,this.y,this.w,this.h); 
      } 
     } 

    }); 


} 

} 



/* object that hold the information whether a certain object 
* is in animation right now or not. This is used to prevent 
* multiple Cmorph instances working on the same item 
* */ 

    var locked= {}; 
    for(i= 0; i<6; i++) 
    for(j= 0; j<6; j++) 
    { 
    itemid = 'item-'+i+'-'+j; 
    itemid : false, 
    } 
    //then once I have done that 
    //animate all items with the function given below 

    function animate() 
    { 
    for(i=0;i<6;i++) 
     for(j=0;j<6;j++) 
     { 
      itemid = 'item-'+i+'-'+j; 
      if(locked.itemid)return; //guess even this will return errors! 
     locked.itemid = true; 
     var item = CANVAS.layers.get('myLayer').get(itemid); 

        new Cmorph(item,{ 
        duration : 1000, 
        transition : 'bounce:out', 
        onComplete : function() 
        { 
         locked.itemid = false; 
        } 
       } 
    ).morph({ 
     y : (item.y == 50?375:50), 
     scale : (item.scale == 1?2:1) 
    }); 
     } 
    } 

    CANVAS.addThread(new Thread({ 
      id : 'myThread', 
      onExec : function(){ 
        CANVAS.clear().draw(); 
      } 
    }));​ 

是我的语法正确,将所有的id被锁定或我会有错误。另外如果我犯了一个错误,请你纠正我。我知道这是一个非常愚蠢的怀疑,但请忍受我!谢谢:)

回答

2

我不完全确定你的意思是“锁定”,但语法有一些错误。这是我将如何做到这一点:

var locked = []; 
for (var i = 0; i < 6; i++) { 
    for (var j = 0; j < 6; j++) { 
     locked.push("item-"+i+"-"+j); 
    } 
} 

它构造了一个字符串数组,保存您的项目字符串。

您不能在JSON内使用正常的代码语句({})。你需要创建它,然后填充它,如果你需要这个(更复杂的)行为。

编辑:根据您的澄清:我可以当场在最后一个语法错误:你内心for -loop缺少他的收盘}。另一方面,我不详细了解mootools,所以可能还有与mootools相关的问题。

+0

我将编辑我的问题以供进一步说明。 – Shouvik 2010-09-09 10:33:58

+0

我根据您的更改调整了我的帖子。 – jwueller 2010-09-09 10:58:20

+0

嘿谢谢!我想我将不得不等待有mootools经验的人来为我排序:) – Shouvik 2010-09-09 11:02:54

0

您不能锁定对象。相反,你可以使用数组作为锁定 -

var locked = []; 
for (var i = 0; i < 6; i++) { 
    for (var j = 0; j < 6; j++) { 
     var itemStr = "item-"+i+"-"+j; 
     locked.push(itemStr); 
    } 
} 

这将锁定存储阵列中的所有的ID,你可以访问使用locked[index]

0

我不知道你是什么意思时,你说“锁定”,但是您是否尝试创建一个使用itemid s作为属性的对象,并将其设置为false?

/* create empty object */ 
var locked = {}; 
/* loop & populate */ 
for(var i = 0; i < 6; i++) { 
    for(var j = 0; j < 6; j++) { 
     var itemStr = "item-" + i + "-" + j; 
     locked[itemStr] = false; 
    } 
} 

/* use id */ 
if(!locked["item-0-0"]) { 
    // do something 
} 
+0

我已经编辑过这个问题,请再看看并评论一下。谢谢。 – Shouvik 2010-09-09 10:50:16

0

这不是从你的问题不清楚,但我想你可能意味着:

var locked= {}; 
for(i= 0; i<6; i++) 
    for(j= 0; j<6; j++) 
     locked['item-'+i+'-'+j]= false; 

名称在JavaScript {name: value}对象文本被限制为引用的字符串或作为字符串不带引号的文字名称,而不是一般的表情。所以你不能在对象字面量中使用变量名。相反,您必须在创建后使用[]访问权来编写该属性。 (a['b']a.b相同。)

+0

感谢您的回复。我假设我可以使用你的方法作为另一个函数来定义所有函数的锁定状态。但请看看动画功能。你觉得我可以像我那样循环它吗?这会抛出语法错误吗? – Shouvik 2010-09-09 11:00:38

+0

我已将您的代码附加到我的程序中,如果代码现在看起来不错,您可以请看看并告诉我吗?谢谢。 – Shouvik 2010-09-09 11:04:53

+0

你在说'locked.itemid':这意味着属性*叫*'itemid'!你的意思是'锁定[itemid]',它的名字保存在'itemid'变量中。 – bobince 2010-09-09 11:07:44