AS3: как ссылаться на объект по его свойствам

#actionscript-3 #object #properties #refer

#actionscript-3 #объект #свойства #обратитесь

Вопрос:

Ну, я играю в шашки, и мне нужно сослаться на фигуру по ее положению (x и y, оба) и удалить ее с экрана (с этим проблем нет).

Я собирал комбинации с «этим». но ничего. Как бы вы это сделали?

Ответ №1:

this.x и this.y являются функциональными из области вашего объекта checkers pieces; однако, если вы обращаетесь к фрагменту за пределами их области, вы должны использовать имя экземпляра фрагмента. Хотя это и не оптимально, вы можете перебирать дочерние DisplayObjects .

 // create a collection of your checker pieces
var checkers:Array = [];

// create a checker piece, whatever your DisplayObject class is.
var checker:Checker;
checkers.push(checker);

// add it to the stage, probably your game board
addChild(checker);    
checker.x = 100;
checker.y = 100;

// loop through the children (from your game board)
for (var i:uint = 0; i < numChildren; i  )
{
    var checker:DisplayObject = getChildAt(i);
    trace(checker.x);
    trace(checker.y);
}
  

Использование координат для ссылки на фигуру может быть неоптимальным для игры. Возможно, вы захотите рассмотреть строку / столбец или подойти к нему с точки зрения того, как работает ваша игровая доска.

Если это неясно, вам следует указать некоторый код или расширить свой вопрос более подробно.

Комментарии:

1. Все средства проверки взяты из класса Checker (расширенного из MovieClip) и checker . side — это свойство вида strig, которое может быть «белым» или «черным». Когда они расположены на экране, создается массив для хранения их относительного положения. Итак, у шашек также есть _row (от 0 до 7) и _column (тоже от 0 до 7), и массив обновляется после каждого перемещения, чтобы вычислить, возможно ли перемещение или нет. Но контролеры не находятся в массиве, должен ли я сделать то, что вы сделали в вашем примере кода, и найти их по _row и _column ?

2. Я последовал вашему примеру, и это сработало, все, что мне было нужно, это добавить все контрольные элементы в массив и волшебную строку «var checker:DisplayObject = getChildAt(0);», чтобы проверить один за другим, какая проверка обладает этим свойством, и удалить его. Я изменил вашу последнюю часть примера, чтобы попробовать это: <br/> function removeChecker (event:TimerEvent){ for(var i:uint = 0; i<checkers.length; i ){<br/> var checker:DisplayObject = getChildAt(i);<br/> if (checker.x==200 amp;amp; checker.y==200){<br/> removeChild(checker);<br/> }<br/> }<br/> } Большое спасибо.

3. Да, извините, у меня был getChildAt(0) — вы совершенно правы. Спасибо!