AS3: установка динамической позиции для текстового поля относительно другого динамического текстового поля - PullRequest
0 голосов
/ 08 декабря 2010

Я создаю управляемую XML круговую диаграмму в AS3 с двумя текстовыми полями в каждом круговом срезе. Оба текстовых поля являются динамическими в том смысле, что они заполняются документом XML, а затем указываются места в AS3. У меня есть они оба, использующие одну и ту же позицию x и y, чтобы расположить себя в данный момент (что, конечно, помещает их прямо друг на друга), но я бы хотел сделать одно из полей (которое действует как метка или заголовок к большему числу и текстовому полю%) разместите себя в определенном месте вокруг другого текстового поля. В результате я ищу, чтобы текстовое поле меньшего размера title отображалось примерно на 5 пикселей выше и выравнивалось по левому краю для большего поля процента. Имеет ли это смысл? Я ужасен в этом типе кода, поэтому я жду вас, ребята, за помощью. И заранее спасибо за это.

В любом случае, вот два раздела кода, которые у меня есть на данный момент. Первый блок для части «Теги» устанавливает позицию для текстового поля «процент», используя старый добрый метод x и y. Второй блок, для заголовков, устанавливает позицию для меньшего текста заголовка.

//evaluate tags
private function evaluateTags():void{

для (с = 0; с

    //setting the position
    arTags[s].x= -objPie.radius * 
    objTag.distance*Math.cos(objData.midAngles[s]+Math.PI/2) - arTags[s].width/2;
    arTags[s].y= -objPie.radius *objTag.distance*Math.sin(objData.midAngles[s]+Math.PI/2) - arTags[s].height/2;

    //calculatind corner angles
    var angO1:Number = (360+90+Math.atan2(arTags[s].y,arTags[s].x)*180/Math.PI)%360
    var angO2:Number = (360+90+Math.atan2(arTags[s].y+arTags[s].height,arTags[s].x)*180/Math.PI)%360
    var angO3:Number = (360+90+Math.atan2(arTags[s].y,arTags[s].x+arTags[s].width)*180/Math.PI)%360
    var angO4:Number = (360+90+Math.atan2(arTags[s].y+arTags[s].height,arTags[s].x+arTags[s].width)*180/Math.PI)%360

    //min angle
    var minO:Number = Math.min(angO1,angO2);
    minO = Math.min(minO,angO3);
    minO = Math.min(minO,angO4);
    minO = minO * Math.PI / 180;

    //max angle
    var maxO:Number = Math.max(angO1,angO2);
    maxO = Math.max(maxO,angO3);
    maxO = Math.max(maxO,angO4);
    maxO = maxO * Math.PI / 180;

    //evaluating if the tag must be showed or not
    if(minO<objData.iniAngles[s] || maxO>objData.endAngles[s]){
    arTags[s].textShowed = false;
    }else{
    arTags[s].textShowed = true;
    }
    } 
    }

//evaluate titles
private function evaluateTitles():void{
for (s=0; s<nbS; s++) {

    //setting the position
    arTitles[s].x= -objPie.radius * objTitles.distance*Math.cos(objData.midAngles[s]+Math.PI/3) - arTitles[s].width/2;
    arTitles[s].y= -objPie.radius * objTitles.distance*Math.sin(objData.midAngles[s]+Math.PI/3) - arTitles[s].height/2;

    //calculatind corner angles
    var angO1:Number = (360+90+Math.atan2(arTitles[s].y,arTitles[s].x)*180/Math.PI)%360
    var angO2:Number = (360+90+Math.atan2(arTitles[s].y+arTitles[s].height,arTitles[s].x)*180/Math.PI)%360
    var angO3:Number = (360+90+Math.atan2(arTitles[s].y,arTitles[s].x+arTitles[s].width)*180/Math.PI)%360
    var angO4:Number = (360+90+Math.atan2(arTitles[s].y+arTitles[s].height,arTitles[s].x+arTitles[s].width)*180/Math.PI)%360

    //min angle
    var minO:Number = Math.min(angO1,angO2);
    minO = Math.min(minO,angO3);
    minO = Math.min(minO,angO4);
    minO = minO * Math.PI / 180;

    //max angle
    var maxO:Number = Math.max(angO1,angO2);
    maxO = Math.max(maxO,angO3);
    maxO = Math.max(maxO,angO4);
    maxO = maxO * Math.PI / 180;

    //evaluating if the titles must be shown or not
    if(minO<objData.iniAngles[s] || maxO>objData.endAngles[s]){
    arTitles[s].textShowed = false;
    }else{
    arTitles[s].textShowed = true;
    }
    } 
    }

1 Ответ

0 голосов
/ 08 декабря 2010

Все хорошо, я понял это.Решение:

//evaluate titles
private function evaluateTitles():void{
for (s=0; s<nbS; s++) {

    //setting the position
    arTitles[s].x= -objPie.radius * objTag.distance*Math.cos(objData.midAngles[s]+Math.PI/2) - arTags[s].width/2;
    arTitles[s].y= -objPie.radius * objTag.distance*Math.sin(objData.midAngles[s]+Math.PI/2) - arTags[s].height/2 -        arTitles[s].height + 4;

    //calculatind corner angles
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...