Просмотр полной версии : Не работает stageWidth, stageHeight
package
{
import flash.display.Stage
import flash.display.Sprite;
public class matrix2 extends Sprite
{
public function matrix2()
{
// Получаем размер рабочей области
var w:int = stage.stageWidth;
var h:int = stage.stageHeight;
trace("размер по горизонтали = ",h, "размер по вертикали = ", w); // [Fault] exception, information=TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
}
}
}
Мануалы читал, экспериментировал. Результат один и тот же.
Нужно дождаться добавления на stage.
var w:int;
var h:int;
if (stage){
w = stage.stageWidth;
h = stage.stageHeight;
}
trace(w, h);
addEventListener(Event.ADDED_TO_STAGE, onAdded);
//...
private function onAdded(e: Event):void
{
var w:int = stage.stageWidth;
var h:int = stage.stageHeight;
trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
}
Добавлено через 30 секунд
опаздал
Кстати по горизонтали это w, а не h.
addEventListener(Event.ADDED_TO_STAGE, onAdded);
//...
private function onAdded(e: Event):void
{
var w:int = stage.stageWidth;
var h:int = stage.stageHeight;
trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
}
Добавлено через 30 секунд
опаздал
Ругается!:
// [Fault] exception, information=TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"
public function pixScroll():void
{
if (stage) {
init();
}else {
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
}
и будет Вам счастье. (не пишите в кадрах :))
Я пишу в классах, t4arty!
Inet_PC, одну минутку.
Добавлено через 3 минуты
t4arty, принёс мне счастье!:)
package
{
import flash.display.Stage
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filters.GlowFilter;
import flash.geom.Matrix;
import flash.geom.Point;
public class LEDmatrix extends Sprite
{
private var bmpd1:BitmapData;
private var bmpd2:BitmapData;
private var LEDobj:LED;
private var LEDobj2:LED;
private var w:int;
private var h:int;
public function LEDmatrix()
{
if(super.stage)
{
init();
}
else
{
// Получаем размер рабочей области
this.addEventListener(Event.ADDED_TO_STAGE, init);
}
}
public function init(e:Event = null):void
{
if(this.hasEventListener(Event.ADDED_TO_STAGE))
{
this.removeEventListener(Event.ADDED_TO_STAGE, onAdded);
}
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
var w:int = stage.stageWidth;
var h:int = stage.stageHeight;
trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
//создаем две звезды и добавляем их в список отображения
runProgramm();
}
private function runProgramm():void
{
// Определяем размер светодиода
var size:Number = 3;
//Зазор между светодиодами
var LEDgap:Number = size + 6;
// Определяем отступы от краев раб.обл.(слева и сверху); размер светодиода делённый надвое
var identX:Number = size / 2;
var identY:Number = identX;
// Колличество светодиодов по горизонтали
var LEDamtX:Number = Math.ceil(w / LEDgap);
// Колличество светодиодов по вертикали
var LEDamtY:Number = Math.ceil(h / LEDgap);
LEDobj = new LED(60);//рисунок
LEDobj.LEDlight = false;
LEDobj.x = 200;
LEDobj.y = 100;
addChild(LEDobj);
// Строим сетку из светодиодов:
//сначала вертикаль
for (var i:int=0; i<LEDamtX; i++)
{
//затем горизонталь
for (var n:int=0; n<LEDamtY; n++)
{
// Создаём светодиодную матрицу из заранне заготовленных мувиклипов
var LEDobj2:LED = new LED(size);
var xn:Number = i * LEDgap + identX;
var yn:Number = n * LEDgap + identY;
LEDobj2.x = xn;
LEDobj2.y = yn;
LEDobj2.LEDlight = false;//выключаем СВЕТОДИОДЫ
addChild(LEDobj2);
}
}
// создаем два растровых изображения
bmpd1 = new BitmapData(stage.stageWidth,stage.stageHeight,true,0);
bmpd2 = bmpd1.clone();
// очищаем растровые изображения
bmpd1.fillRect(bmpd1.rect, 0);
bmpd2.fillRect(bmpd2.rect, 0);
// отрисовываем каждую звезду в своем растровом изображении
bmpd1.draw(LEDobj, new Matrix(1, 0, 0, 1, LEDobj.x, LEDobj.y));
bmpd2.draw(LEDobj2, new Matrix(1, 0, 0, 1, LEDobj2.x, LEDobj2.y));
// проверяем столкновение
if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
{
LEDobj2.graphics.clear();
LEDobj2.LEDlight = true;// оранджевый
}
else
{
LEDobj.visible = false;
LEDobj.LEDlight = false;// серый
}
}
}
}
package
{
import flash.display.Stage
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filters.GlowFilter;
import flash.geom.Matrix;
import flash.geom.Point;
public class LEDmatrix extends Sprite
{
private var bmpd1:BitmapData;
private var bmpd2:BitmapData;
private var LEDobj:LED;
private var LEDobj2:LED;
private var w:int;
private var h:int;
public function LEDmatrix()
{
super();
addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
private function onAdded(e: Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAdded);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
//создаем две звезды и добавляем их в список отображения
// Получаем размер рабочей области
var w:int = stage.stageWidth;
var h:int = stage.stageHeight;
trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
// Определяем размер светодиода
var size:Number = 3;
//Зазор между светодиодами
var LEDgap:Number = size + 6;
// Определяем отступы от краев раб.обл.(слева и сверху); размер светодиода делённый надвое
var identX:Number = size / 2;
var identY:Number = identX;
// Колличество светодиодов по горизонтали
var LEDamtX:Number = Math.ceil(w / LEDgap);
// Колличество светодиодов по вертикали
var LEDamtY:Number = Math.ceil(h / LEDgap);
LEDobj = new LED(60);//рисунок
LEDobj.LEDlight = false;
LEDobj.x = 200;
LEDobj.y = 100;
addChild(LEDobj);
// Строим сетку из светодиодов:
//сначала вертикаль
for (var i:int=0; i<LEDamtX; i++)
{
//затем горизонталь
for (var n:int=0; n<LEDamtY; n++)
{
// Создаём светодиодную матрицу из заранне заготовленных мувиклипов
var LEDobj2:LED = new LED(size);
var xn:Number = i * LEDgap + identX;
var yn:Number = n * LEDgap + identY;
LEDobj2.x = xn;
LEDobj2.y = yn;
LEDobj2.LEDlight = false;//выключаем СВЕТОДИОДЫ
addChild(LEDobj2);
}
}
// создаем два растровых изображения
bmpd1 = new BitmapData(stage.stageWidth,stage.stageHeight,true,0);
bmpd2 = bmpd1.clone();
// очищаем растровые изображения
bmpd1.fillRect(bmpd1.rect, 0);
bmpd2.fillRect(bmpd2.rect, 0);
// отрисовываем каждую звезду в своем растровом изображении
bmpd1.draw(LEDobj, new Matrix(1, 0, 0, 1, LEDobj.x, LEDobj.y));
bmpd2.draw(LEDobj2, new Matrix(1, 0, 0, 1, LEDobj2.x, LEDobj2.y));
// проверяем столкновение
if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
{
LEDobj2.graphics.clear();
LEDobj2.LEDlight = true;// оранджевый
}
else
{
LEDobj.visible = false;
LEDobj.LEDlight = false;// серый
}
}
}
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.