//define methods to retrieve boundaries Stage.getLeft = function() { return -1*(this.width-this.originalWidth)/2; }; Stage.getTop = function() { return -1*(this.height-this.originalHeight)/2; }; Stage.getRight = function() { return this.originalWidth+(this.width-this.originalWidth)/2; }; Stage.getBottom = function() { return this.originalHeight+(this.height-this.originalHeight)/2; };
Чтобы перемещать эти фильмы на свои места при изменении размеров рабочего места, нужно создать для них приемники. Объект Stage имеет список объектов и/или фильмов, которые зарегистрированы вместе с ним для получения уведомления о том, что размер рабочего места изменен. Каждый раз при изменении рабочего места объект Stage будет вызывать событие onResize во всех объектах, которые с ним зарегистрированы. Сначала нужно зарегистрировать наши фильмы с объектом Stage и затем создать для каждого из них метод onResize для расположения их на нужных местах.
// register four movie clips to receive notification of onResize Stage.addListener(tl); Stage.addListener(tr); Stage.addListener(bl); Stage.addListener(br);
// top left tl.onResize = function() { this._x = Stage.getLeft(); this._y = Stage.getTop(); }; // top right tr.onResize = function() { this._x = Stage.getRight()-this._width; this._y = Stage.getTop(); }; // bottom left bl.onResize = function() { this._x = Stage.getLeft(); this._y = Stage.getBottom()-this._height; }; // bottom right br.onResize = function() { this._x = Stage.getRight()-this._width; this._y = Stage.getBottom()-this._height; };
Итак, получаем следующий код.
fscommand("allowscale", "false") ; Stage. scaleMode="showAll"; Stage.originalWidth = Stage.Width; Stage.originalHeight = Stage.Height; Stage.scaleMode="noScale" Stage.getLeft = function() { return -1*(this.width-this.originalWidth)/2; }; Stage.getTop = function() { return -1*(this.height-this.originalHeight)/2; }; Stage. getRight = function() { return this.originalWidth+(this.width-this.originalWidth)/2; }; Stage.getBottom = function() { return this.originalHeight+(this.height-this.originalHeight)/2; }; Stage.addListener(tl); Stage.addListener(tr); Stage.addListener(bl); Stage.addListener(br); // top left tl.onResize = function() { this._x = Stage.getLeft(); this._y = Stage.getTop(); }; // top right tr.onResize = function() { this._x = Stage.getRight()-this._width; this._y = Stage.getTop(); }; // bottom left bl.onResize = function() { this._x = Stage.getLeft(); this._y = Stage.getBottorn()-this._height; }; // bottom right br.onResize = function() { this._x = Stage.getRight()-this._width; this._y = Stage.getBottom()-this._height; };Пример 5.1.
Все работает как нужно, но не оптимально. Каждый раз, когда надо найти левую координату рабочего места, мы вызываем функцию Stage.getLeft, тогда как это значение изменяется только при изменении размера рабочего места.