ActionScript проблема в addChild - PullRequest
0 голосов
/ 09 мая 2011
import flash.display.Sprite;

var bin:Sprite = new Sprite();
var cir:Sprite = new Sprite();

cir.graphics.beginFill(0x00ff00,1);
cir.graphics.drawCircle(0,0,30);
cir.graphics.endFill();

bin.graphics.beginFill(0xff0000,1);
bin.graphics.drawRoundRect(40,40,100,100,5,5);
bin.graphics.endFill();
addChild(bin);
bin.addChild(cir);

// Вот почему круг добавляется за пределами квадратной рамки?

Ответы [ 3 ]

2 голосов
/ 09 мая 2011

Причина, по которой он добавляется за пределы поля, заключается в том, что drawRoundRect все еще создает спрайт в точке 0,0 на сцене, но не начинает заливку до 40,40. Вы можете проверить это, проследив свойства bin x и y, чтобы увидеть, что они начинаются с 0,0, а свойства width и height, чтобы увидеть, что они оба - 100, а не 60. Возможно, вам повезет больше, если вы отрисовываете все объекты от 0 0, а затем просто настройте родительский DisplayObject следующим образом:

import flash.display.Sprite;

var bin:Sprite = new Sprite();
var cir:Sprite = new Sprite();

bin.graphics.beginFill(0xff0000,1);
bin.graphics.drawRoundRect(0,0,60,60,5,5);
bin.graphics.endFill();

cir.graphics.beginFill(0x00ff00,1);
cir.graphics.drawCircle(0,0,30);
cir.graphics.endFill();

addChild(bin);
bin.addChild(cir);
bin.x = bin.y = 40; //move the parent object, all child objects will move with it
2 голосов
/ 09 мая 2011

Потому что вы добавляете свой прямоугольный топор: 40 / y: 40, но ваш круг в x: 0 / y: 0

var bin:Sprite = new Sprite();
var cir:Sprite = new Sprite();

cir.graphics.beginFill(0x00ff00,1);
cir.graphics.drawCircle(40,40,30);
cir.graphics.endFill();

bin.graphics.beginFill(0xff0000,1);
bin.graphics.drawRoundRect(40,40,100,100,5,5);
bin.graphics.endFill();
addChild(bin);
bin.addChild(cir);

Работает нормально

1 голос
/ 09 мая 2011

Посмотрите на ваши функции рисования:

drawCircle(x, y, radius)
drawRoundRect(x, y, width, height...)

Таким образом, центр круга расположен в 0,0 точке и имеет радиус 30 пикселей, прямоугольник начинается в 40,40, поэтому он начинается дальше конца кругаВы, скорее, попробуйте:

drawCircle(90, 90, radius)
drawRoundRect(40, 40, 100, 100...)

, чтобы круг в центре прямоугольника.

...