AS3 + XML 投票代码,出现问题是把code里的值改成大于40,就不显示投票条
/************AS3代码*************/varmyXML:XML=newXML();varmyXMLURL:String="stat.xml";v...
/************AS3代码*************/
var myXML:XML = new XML();
var myXMLURL:String = "stat.xml";
var node;
var xmlarr:Array = new Array();
//var citys:Array = new Array();
/****************/
var myXMLURLR:URLRequest = new URLRequest(myXMLURL);
var myXMLLoader:URLLoader =new URLLoader(myXMLURLR);
myXMLLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(e:Event) {
myXML = XML(e.target.data);
//trace(typeof myXML.Node);
node = myXML.Node;
init();
}
function init(){
for(var i:uint = 0; i < node.length(); i++) {
var tmparr = new Array(node[i].Name , node[i].Code);
xmlarr.push(tmparr);
}
/*
把XML里的数据重做成数组
xmlarr[0][0]=city;
xmlarr[0][1]=code;
*/
xmlarr.sort(compare);
var px:Number = 1 / Number(xmlarr[0][1]);
for(var j:uint = 0; j < xmlarr.length; j++) {
createCity(j);
createLine(j,px);
}
}
function createCity(i:uint) {
var city:TextField = new TextField();
city.text = xmlarr[i][0];
city.y = 50 * i;
addChild(city);
}
function createLine(i:uint,px:Number = 1) {
var line:Sprite = new Sprite();
line.graphics.beginFill(0xFFCC00);
line.graphics.drawRect(0,0,px,20);
line.x = 50;
line.y = 50 * i;
addChild(line);
/*动起来*/
var myTimer:Timer = new Timer(10 , 100);
myTimer.addEventListener("timer", timerHandler);
myTimer.start();
function timerHandler(event:TimerEvent):void {
line.scaleX = line.scaleX + Number(xmlarr[i][1]);
event.updateAfterEvent();
}
myXMLLoader.removeEventListener("complete", xmlLoaded);
}
//比较
function compare(paraA:Object,paraB:Object):int
{
//trace(paraA.Code);
var resultA:Number=Number(paraA[1]);
var resultB:Number=Number(paraB[1]);
if(resultA>resultB) return -1;//A放B后面,从小到大排列
if(resultA<resultB) return 1;
return 0;
}
/************stat.xml*************/
<?xml version="1.0" encoding="utf-8"?>
<xmldoc>
<Node>
<Name>北京</Name>
<Code>30</Code>
</Node>
<Node>
<Name>上海</Name>
<Code>35</Code>
</Node>
</xmldoc>
///////////////////////////////////////
如果把 <Code>35</Code> 改成 <Code>40</Code>
就会显示不正常..没有了投票条...
我想知道为什么?
希望大侠经过的时候帮看一下问题出 在哪 展开
var myXML:XML = new XML();
var myXMLURL:String = "stat.xml";
var node;
var xmlarr:Array = new Array();
//var citys:Array = new Array();
/****************/
var myXMLURLR:URLRequest = new URLRequest(myXMLURL);
var myXMLLoader:URLLoader =new URLLoader(myXMLURLR);
myXMLLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(e:Event) {
myXML = XML(e.target.data);
//trace(typeof myXML.Node);
node = myXML.Node;
init();
}
function init(){
for(var i:uint = 0; i < node.length(); i++) {
var tmparr = new Array(node[i].Name , node[i].Code);
xmlarr.push(tmparr);
}
/*
把XML里的数据重做成数组
xmlarr[0][0]=city;
xmlarr[0][1]=code;
*/
xmlarr.sort(compare);
var px:Number = 1 / Number(xmlarr[0][1]);
for(var j:uint = 0; j < xmlarr.length; j++) {
createCity(j);
createLine(j,px);
}
}
function createCity(i:uint) {
var city:TextField = new TextField();
city.text = xmlarr[i][0];
city.y = 50 * i;
addChild(city);
}
function createLine(i:uint,px:Number = 1) {
var line:Sprite = new Sprite();
line.graphics.beginFill(0xFFCC00);
line.graphics.drawRect(0,0,px,20);
line.x = 50;
line.y = 50 * i;
addChild(line);
/*动起来*/
var myTimer:Timer = new Timer(10 , 100);
myTimer.addEventListener("timer", timerHandler);
myTimer.start();
function timerHandler(event:TimerEvent):void {
line.scaleX = line.scaleX + Number(xmlarr[i][1]);
event.updateAfterEvent();
}
myXMLLoader.removeEventListener("complete", xmlLoaded);
}
//比较
function compare(paraA:Object,paraB:Object):int
{
//trace(paraA.Code);
var resultA:Number=Number(paraA[1]);
var resultB:Number=Number(paraB[1]);
if(resultA>resultB) return -1;//A放B后面,从小到大排列
if(resultA<resultB) return 1;
return 0;
}
/************stat.xml*************/
<?xml version="1.0" encoding="utf-8"?>
<xmldoc>
<Node>
<Name>北京</Name>
<Code>30</Code>
</Node>
<Node>
<Name>上海</Name>
<Code>35</Code>
</Node>
</xmldoc>
///////////////////////////////////////
如果把 <Code>35</Code> 改成 <Code>40</Code>
就会显示不正常..没有了投票条...
我想知道为什么?
希望大侠经过的时候帮看一下问题出 在哪 展开
2个回答
展开全部
亲~要说原因的话,先说下他画图的原理,他先画一个宽度很小很小的矩形,然后通过改变矩形的scaleX来"变长"。
问题就出在这个"很小很小"上,下面的(1)中的px值就是指定的这个很小很小值,问题是,当这个值小于等于0.025时,flash里的画图已经把他默认为0了,于是(2)中不管怎么修改scaleX,长度都是0,不会有任何改变。
1.function init() {
······
var px:Number = 1 / Number(xmlarr[0][1]); //你可以输出px,会发现 <Code>40</Code>时,刚好得到0.025,当是<Code>39</Code>时,是0.0256,所以能看到。
······
}
2. function createLine(i:uint,px:Number = 1) {
······
line.graphics.drawRect(0,0,px,20); //<——画出一个起始点是(0,0),长px、宽20的矩形,你可以输出line.width来检测它是否为0。当其为0时,就是你看不见投票条的时候。
······
}
修改方法:
如果你变化的值不大,可以像这样在后面加一个参数:
var px:Number = 1 / Number(xmlarr[0][1])+0.005;
但这不是长久的方法,因为<Code>中的值如果很大的话,px还是会到0.025以下,比如上面加了0.005,那么它只能显示到<Code>49</Code>,如果<Code>变50了,就又让px等于0.025,然后就又不显示了。这是这个算法的死穴。
问题就出在这个"很小很小"上,下面的(1)中的px值就是指定的这个很小很小值,问题是,当这个值小于等于0.025时,flash里的画图已经把他默认为0了,于是(2)中不管怎么修改scaleX,长度都是0,不会有任何改变。
1.function init() {
······
var px:Number = 1 / Number(xmlarr[0][1]); //你可以输出px,会发现 <Code>40</Code>时,刚好得到0.025,当是<Code>39</Code>时,是0.0256,所以能看到。
······
}
2. function createLine(i:uint,px:Number = 1) {
······
line.graphics.drawRect(0,0,px,20); //<——画出一个起始点是(0,0),长px、宽20的矩形,你可以输出line.width来检测它是否为0。当其为0时,就是你看不见投票条的时候。
······
}
修改方法:
如果你变化的值不大,可以像这样在后面加一个参数:
var px:Number = 1 / Number(xmlarr[0][1])+0.005;
但这不是长久的方法,因为<Code>中的值如果很大的话,px还是会到0.025以下,比如上面加了0.005,那么它只能显示到<Code>49</Code>,如果<Code>变50了,就又让px等于0.025,然后就又不显示了。这是这个算法的死穴。
展开全部
首先要解析XML,E4X方式很简单,比如XML是这种结构:
<data>
<status>1</status>
<status>2</status>
<status>1</status>
<status>2</status>
<data>
做个循环遍历这个XML
for(var i:int=0;i<myxml.children().length();i++){
if(XMLList(myxml.children()[i]).text().toXMLString()=="1"){
//播放动画1
}else{
//播放动画2
}
}
<data>
<status>1</status>
<status>2</status>
<status>1</status>
<status>2</status>
<data>
做个循环遍历这个XML
for(var i:int=0;i<myxml.children().length();i++){
if(XMLList(myxml.children()[i]).text().toXMLString()=="1"){
//播放动画1
}else{
//播放动画2
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询