我在AS3中创建一个XML驱动的饼图,每个饼图中有2个文本框。两个文本字段都是动态的,因为它们由XML文档填充,然后告诉它们将自己放在AS3中的位置。我让他们两个都使用相同的x和y位置来放置自己(当然它们正确地将它们放在彼此的顶部),但是我想制作其中一个字段(它就像一个标签或者更大数字和%文本字段的标题)将自身放在另一个文本字段周围的特定位置。我正在寻找的结果是让较小的“标题”文本字段显示在大约5个像素上方并左对齐到较大的“百分比”字段。那有意义吗?我对这类代码很糟糕,所以我期待你们的帮助。并提前感谢。
无论如何,这是我目前得到的两段代码。对于Tags部分,第一个块使用一个好的旧x和y方法设置“百分比”文本字段的位置。对于标题,第二个块正在为较小的“标题”文本设置位置。
//evaluate tags
private function evaluateTags():void{
for(s = 0; s
//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;
}
}
}
答案 0 :(得分:0)
一切都很好,我明白了。解决方案是:
//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