在一些位置定义精灵的x,y坐标和绘画对象之间的区别

时间:2009-10-14 08:01:24

标签: actionscript-3 flex canvas sprite

我有一个任务:

我需要在一个画布上放置大约100个精灵(上面有准备好的网格)。我需要将它们作为隐形(圆形)宝石放在板上,并且仅在鼠标悬停时可见。

我遇到的问题是,我无法将这些对象准确地放入网格中的节点。

E.g。

如果我用这种方式定义石头(它只是一个精灵,如前所述):

var stone:StoneSprite = new StoneSprite();
    stone.x = this.x + 2*cellWidth;
    stone.graphics.beginFill( 0x000000 );
    stone.graphics.drawCircle(stone.x , this.y + cellWidth, cellWidth/3 );
    stone.graphics.endFill();
    rawChildren.addChild(stone);

他们不坐在节点上...... 见图: http://img.skitch.com/20091014-kuhfyjeg1g5qmrbyxbcerp4aya.png

如果我这样做:

var stone:StoneSprite = new StoneSprite();
    stone.graphics.beginFill( 0x000000 );
    stone.graphics.drawCircle(this.x + 2*cellWidth , this.y + cellWidth, cellWidth/3 );
    stone.graphics.endFill();
    rawChildren.addChild(stone);

石头在网格节点中正确显示...见图2: http://img.skitch.com/20091014-f595tksjxramt98s7yfye591bh.png

所以我想知道这两种方法之间有什么区别。

另外,我想我需要将正确的坐标传递给石头类...如果我想改变石头物体的某些属性。例如。能见度或半径。

  1. 你能否建议,将坐标定义为stone.x,stone.y
  2. 有什么问题
  3. 如何解决定位错误的问题。
  4. 非常感谢有关这个问题的想法,我试图解决这么久:(

2 个答案:

答案 0 :(得分:2)

假设x& y为30,cellWidth为30.

第一个例子:

stone.x = 30 + 60; //90
drawCircle(90, 60, 10);

这意味着如果要在圆圈周围绘制一个矩形,则为[170,50]。 (X,Y)。

第二个例子:

stone.x = 0;
drawCircle(90, 60, 10)

这意味着您圈子周围的矩形为[80,50];


在第一个示例中,您将精灵移动到位置x==90。然后绘制一个 center 位于<{1}} 内的精灵的圆圈。因此,相对于x==90,您处于this。但是因为圆的x,y坐标是中心,所以半径减去10以获得边界x位置。

在第二个示例中,精灵默认为相对于x==180定位x==0,并且您在精灵位置this内绘制圆圈。 (因此它始于x==90)。

答案 1 :(得分:0)

我不确定是什么导致了这个问题 - 可能是容器引起的一些填充 - 没有测试也说不出来。但我相信向canvas.rawChildren添加一个Sprite(比如棋盘)并将其用作网格和石头的父级将解决问题。