Проблема Actionscript в addChild

#flash #actionscript-3 #flash-cs4 #flash-cs5

#flash #actionscript-3 #flash-cs4 #flash-cs5

Вопрос:

 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);
  

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

Ответ №1:

Поскольку вы добавляете свой прямоугольник в x: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. Но я добавил спрайт «cir» в спрайт «bin». Все в порядке. Дайте мне знать, в чем заключается разница, применяющая x, y pos внутри и снаружи? bin.graphics.drawRoundRect(40,40,100,100,5,5); // bin.graphics.drawRoundRect(0,0,100,100,5,5); bin.x = bin.y = 40;

Ответ №2:

Причина, по которой это добавляется вне поля, заключается в том, что 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
  

Ответ №3:

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

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

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

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

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