PDA

Просмотр полной версии : Пропадает отображение, если выставить размеры.


cpu
01.08.2010, 20:54
Странная проблема, не могу понять её логику.
Если создать Sprite и проставить размеры mySprite.width и mySprite.height например 200 пикселов, после в коде что-нить нарисовать через graphics, этого нарисованого не видно.
Причем не первый раз уже.

udaaff
01.08.2010, 20:59
Вы размеры пытаетесь пустому месту задать?

cpu
01.08.2010, 21:05
Если на Sprite который является рабочей областью проги нарисовать прямоугольник, 2000*1000, то трейсом длину и высоту видно, а если выставить через свойства width и height то 0.
Это правильно будет, устанавливать размер таким образом(через прямоугольник)?

udaaff
01.08.2010, 21:17
Непонятно почему через width и height 0. Приведите пример...

cpu
01.08.2010, 21:44
Основной класс, на котором строится проект.
Класс расширяет Sprite(ну это понятно думаю).

Размер stage, фоновый цвет выставил.

package {
import flash.display.Sprite;
import org.moock.drawing.Ellipse;

[SWF(frameRate = "61", backgroundColor = "0x373d4b", width="600", height="500")]

public class ShapeTest extends Sprite
{
private var ell: Ellipse;

public function ShapeTest ()
{
/*--------1 вариант------------------------------------------------------*/
//так трасе показывает "600", и все что добавляется на Sprite видно
graphics.drawRect(0, 0, 600, 500);
trace(this.width);
/*--------2 вариант---------------------------------------------------*/
//так трасе показывает "0", и еще не рисуются эллипсы, которые добавляются по коду ниже
this.width = 600;
this.height = 500;
trace(this.width);
/*---------------------------------------------------------------------*/
ell = new Ellipse(250, 50);
ell.setStrokeStyle(2, 0xFFFF00);
ell.setFillStyle(0xED994F);
for (var i:uint = 1; i < 100; i++)
{
ell = new Ellipse();
addChild(ell);
ell.x = random(100, stage.stageWidth - 100);
ell.y = random(100, stage.stageHeight - 100);
arr.push(ell);
}

public function random (minVal:int, maxVal:int):int
{
return minVal + Math.floor(Math.random() * (maxVal + 1 - minVal));
}

}
}

udaaff
01.08.2010, 21:55
var s:Sprite = new Sprite();
s.graphics.drawRect(0, 0, 123, 123);
trace(s.width) // 123
s.width = 300;
trace(s.width) // 300
Обычно перед рисованием фигуры задается заливка или стиль линии. Иначе получается, что вилами по воде водите.

cpu
01.08.2010, 22:00
Вы меня не поняли, варианты должны быть по отдельности, т.е. посмотрите с первым как, а потом удалив первый, сделайте как во втором.
Заливка не имеет значение, потому как во втором варианте вообще нет graphics.бла-бла.

udaaff
01.08.2010, 22:11
Ну тогда перечитайте второй пост. Пустому месту нельзя задавать размеры.

cpu
01.08.2010, 22:15
Ну тогда перечитайте второй пост. Пустому месту нельзя задавать размеры. значит это нормальное поведение.
Меня просто смущало, что на спрайте есть объекты(добавленные через addChild), которых видно, и как бы спрайт поэтому не пустой, но получается что система один хер его считает пустым, пока на нем чего-нить не нарисовано через graphics.

udaaff
01.08.2010, 22:16
Если в нем будут объекты, то он будет не пустым.

cpu
01.08.2010, 22:25
Достал наверно вас)
public class Main extends Sprite
{

public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var k:Shape = new Shape();
k.graphics.lineStyle(1);
k.graphics.beginFill(0x000000, 1);
k.graphics.drawRect(5, 5, 100, 100);
k.graphics.endFill();
addChild(k);

trace(this.width); //покажет "0", хотя вижу прямоугольник "k" размером 100*100 пикселей.
//получается Main все таки 0-го размера
}
}

udaaff
01.08.2010, 22:32
У меня 101 вывело.

cpu
01.08.2010, 22:41
Перезагрузил FD и заработало. Ну и глюк был. Спасибо за терпение.