Разница между определением координат x, y спрайта и рисованием объекта в каком-либо месте

У меня есть задача:

Мне нужно разместить около 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. Как исправить проблему с неправильным позиционированием.

Был бы очень признателен за идеи по поводу проблемы, я так долго пытаюсь решить :(


person Oleg Tarasenko    schedule 14.10.2009    source источник


Ответы (2)


Предположим, что x и y равны 30, а ширина ячейки - 30.

Первый пример:

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

Это означает, что если бы вы нарисовали прямоугольник вокруг своего круга, он был бы в точке [170,50]. (х, у).

Второй пример:

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

Это означает, что прямоугольник вокруг вашего круга находится в точке [80,50];


В первом примере вы перемещаете спрайт в позицию x==90. Затем рисуем круг, центр которого находится в x==90 внутри спрайта. Итак, относительно this, вы на x==180. Но поскольку координаты x, y круга являются центром, вычтите 10 для радиуса, чтобы получить положение границы x.

Во втором примере спрайт по умолчанию занимает позицию x==0 относительно this, и вы рисуете круг внутри спрайта в позиции x==90. (следовательно, он начинается с x==80).

person Glenn    schedule 14.10.2009
comment
Итак ... из первого примера видно, что drawCircle использует x таким образом, drawCircle (начало спрайта (90) + то, что я разместил здесь (90) = 180,60,10). Вот почему я должен использовать 0 вместо этого. .. И предмет утонет в центре Спрайта. Правильный? - person Oleg Tarasenko; 14.10.2009
comment
Только что проверил ... Установка 0 сделала свое дело! БОЛЬШОЕ СПАСИБО! ВЫ ДЕЙСТВИТЕЛЬНО ПОМОГЛИ !! - person Oleg Tarasenko; 14.10.2009
comment
Не беспокойся. Просто помни. Центр круга - это (x, y) функции drawCircle относительно спрайта. Сам спрайт по-прежнему будет находиться в позиции (0,0) относительно своего родителя, если вы также не установите (x, y) камня. - person Glenn; 14.10.2009

Я не уверен, что вызывает проблему - может быть, из-за контейнера - не могу сказать без тестирования. Но я считаю, что добавление Sprite (скажем, доски) к canvas.rawChildren и использование его в качестве родительского элемента для сетки и камней решит проблему.

person Amarghosh    schedule 14.10.2009