PDA

Просмотр полной версии : Не работает stageWidth, stageHeight


Шурик_2
14.10.2011, 14:36
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".

}
}
}
Мануалы читал, экспериментировал. Результат один и тот же.

Inet_PC
14.10.2011, 14:38
Нужно дождаться добавления на stage.

stweet
14.10.2011, 14:38
var w:int;
var h:int;

if (stage){
w = stage.stageWidth;
h = stage.stageHeight;
}

trace(w, h);

Inet_PC
14.10.2011, 14:39
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 секунд
опаздал

Шурик_2
14.10.2011, 14:40
Inet_PC, спасибо!

Inet_PC
14.10.2011, 14:41
Кстати по горизонтали это w, а не h.

Шурик_2
14.10.2011, 14:48
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"

t4arty
14.10.2011, 14:52
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);

}

и будет Вам счастье. (не пишите в кадрах :))

Inet_PC
14.10.2011, 14:53
Покажите весь код.

Шурик_2
14.10.2011, 14:56
Я пишу в классах, t4arty!
Inet_PC, одну минутку.

Добавлено через 3 минуты
t4arty, принёс мне счастье!:)

Genzo
14.10.2011, 15:05
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;// серый
}
}
}
}

Inet_PC
14.10.2011, 15:08
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;// серый
}
}
}
}