我正在使用actionscript构建一个Facebook客户端,而我遇到了一个问题。我有这段代码:
var loader:URLLoader = URLLoader(event.target);
var feedResponse:String = (event.target.data);
var object:Object = JSON.decode(feedResponse); //getting the data
var friendsStatus:Array = new Array(); //array for status'
var friendsName:Array = new Array(); //array for names
var startX:int = 120;
var startY:int = 100;
var myFormat:TextFormat = new TextFormat();
myFormat.size = 16;
var statusMessage:TextField = new TextField();
statusMessage.defaultTextFormat = myFormat;
statusMessage.wordWrap = true;
statusMessage.width = 600;
var faceFriend:TextField = new TextField();
faceFriend.defaultTextFormat = myFormat;
faceFriend.wordWrap = true;
faceFriend.width = 300;
for(var i:int = 0; i < 10; i++)
{
if(object.data[i].message == undefined){
var userStory:String = object.data[i].story; // mowing through the facebook JSON response
friendsStatus[i] = userStory;
} else {
var userStatus:String = object.data[i].message;
friendsStatus[i] = userStatus;
}
var fName:String = object.data[i].from.name;
friendsName[i] = fName;
}
for(var j:int; j < 10; j++) // The headache loop
{
faceFriend.x = startX;
faceFriend.y = startY;
faceFriend.text = friendsName[j]; //assign the current name to the TextField text property
addChild(faceFriend); //add it to the stage
startY += 30; //increase the y value so they dont overlap
trace(startY);
trace(faceFriend.text);
trace("");
statusMessage.x = startX;
statusMessage.y = startY;
statusMessage.text = friendsStatus[j]; //same here for the status'
addChild(statusMessage);
startY += 20;
trace(startY);
trace(statusMessage.text);
trace("");
}
应该遍历一组状态',将它们分配给变量并将它们添加到舞台上。但是,我所获得的只是最后一个状态被添加到舞台上。 从所有跟踪中可以看出,我发现所有数组都具有正确的信息,并且y值(因此它们并非全部在彼此之上)正在正确进行。它只是拒绝让最后的TextField可见:(
有什么想法吗?
P.S。我意识到这不是完美的代码 - 对于提前的头痛感到抱歉:P
答案 0 :(得分:0)
您需要创建
var faceFriend:textField inside the loop.
您目前正在做的是创建一个文本字段并反复操作它。这是导致问题的原因。此代码将生成10个字段并水平对齐。
var faceFriend:TextField;
for(var i:uint;i<10;i++)
{
faceFriend = new TextField();
faceFriend.x = i*20;
addChild(faceFriend);
}
而这段代码会生成一个字段操纵它10次,并显示一个字段,这基本上就是你正在做的事情。
var facefriend:TextField = new TextField();
for(var i:uint;i<10;i++)
{
faceFriend.x = i*20;
addChild(faceFriend);
}
此
答案 1 :(得分:0)
您现在正在做的只创建一个实例。然后,您将在循环中设置位置,因此您最初创建的位置正在移动。
要创建10个文本字段,您需要在循环内创建一个实例。
所以你需要做
for(var i:int=0; i<10; i++) {
var faceFriend:TextField = new TextField();
faceFriend.defaultTextFormat = myFormat;
faceFriend.wordWrap = true;
faceFriend.width = 300;
//Everything else
}