【问题标题】:Text Dynamic changes depending on frame number文本动态变化取决于帧数
【发布时间】:2014-07-06 09:16:27
【问题描述】:

我有一个 xml 文件,其中包含 100 多个文本条目和一个动态文本字段。我希望文本根据帧号进行更改。这是我的(非工作)代码:

var myXML5: XML = new XML();
var XML_URL5: String = "assets/bulles.xml";
var myXMLURL5: URLRequest = new URLRequest(XML_URL5);
var myLoader5: URLLoader = new URLLoader(myXMLURL5);
myLoader5.addEventListener("complete", xmlLoaded5);
var list5: Number = 0;

function xmlLoaded5(event: Event): void {
myXML5 = XML(myLoader5.data);
}

function fnPeople5(peopleList5: XML): void {
bulles.text = peopleList5.bullestext.bulle.text()[list5];
}


function bulles2(e: Event): void {
var i5: int = france_map.currentFrame();
list5 = i5;
fnPeople5(myXML5);
}

我希望有人可以提供帮助:) 杰瑞尔

【问题讨论】:

  • 你能在描述中添加xml结构吗?
  • 有什么错误吗?痕迹的结果?尤其是trace(peopleList5.bullestext.bulle.text()[list5]) in fnPeople5
  • bejrut: text text2 (我是初学者所以我不知道它是否正确,但它在我制作的另一个迷你应用程序中工作)
  • @MartonPallagi 没有错误,应用程序的其余部分工作正常,但文本字段中没有文本。我在 fnPeople5 中添加了跟踪部分,但没有结果。

标签: actionscript-3 flash


【解决方案1】:

这应该会给你一个想法。假设你的 xml 是这样的

<?xml version="1.0" encoding="UTF-8"?>
<br>&lt;myTexts&gt;
<br> <bullestext> <bulle> text1a </bulle> </bullestext> <bullestext> <bulle> text2b </bulle> </bullestext> <bullestext> <bulle> text3c </bulle> </bullestext> <bullestext> <bulle> text4d </bulle> </bullestext> <bullestext> <bulle> text5e </bulle> </bullestext>
<br>&lt;/myTexts&gt;

那么你可以像这样编写代码..

var myXML5: XML = new XML();
var XML_URL5: String = "assets/bulles.xml";
var myXMLURL5: URLRequest = new URLRequest(XML_URL5);
var myLoader5: URLLoader = new URLLoader(myXMLURL5);
myLoader5.addEventListener("complete", xmlLoaded5);
var list5: Number = 0;

function xmlLoaded5(event: Event): void 
{
    trace ("XML loaded complete");
    myXML5 = XML(myLoader5.data);
    //trace (myXML5); ///show xml contents

    //fnPeople5(myXML5); 
    france_map.gotoAndStop(3); //for test (shows xml entry [3] later on)
    bulles2();
}

//testing without event (click event?)
//function bulles2(e: Event): void 
function bulles2(): void 
{
    var i5: int = france_map.currentFrame;   //.currentFrame();
    list5 = i5 - 1; //frame [1] is equal to xml entry [0] so we minus by 1
    trace ("list5 : " + list5);
    fnPeople5(myXML5);
}

function fnPeople5(peopleList5: XML): void 
{
    //testing traces
    trace(peopleList5.bullestext[0].bulle);
    trace(peopleList5.bullestext[4].bulle);

    //show entry (example: entry 3) 
    bulles.text = peopleList5.bullestext[list5].bulle;
}


我没有设置用于测试的鼠标/键盘事件,但不用担心,您之前所拥有的没有任何问题,因此您仍然可以将function bulles2(e: Event): void 与您自己的完整代码一起使用。此外,由于 XML 从零开始计数,但帧计数从一开始,我们知道每个 XML 条目等于帧数减一。

如果textField 中没有显示文本,但可以与fnPeople5(peopleList5: XML): void 中的trace 一起使用,则尝试嵌入字体。检查此链接:What methods are there for creating FLAs with dynamically created text, that outputs swfs with only the font glyphs included that are required?

【讨论】:

  • 我尝试了您的代码(我将 xml 调整为您建议的结构),但出现此错误:
  • TypeError:错误 #1090:XML 解析器故障:元素格式错误。在 france_fla::MainTimeline/xmlLoaded5() [france_fla.MainTimeline::frame1:994] 在 flash.events::EventDispatcher/dispatchEventFunction() 在 flash.events::EventDispatcher/dispatchEvent() 在 flash.net::URLLoader/onComplete ()
  • 第 994 帧上什么都没有,但我可能知道它为什么会出错。我的时间线是真实的时间线(一帧 = 一年)。它始于公元前 3000 年,止于公元 2014 年。第 1 帧 = 1bc,第 3000 帧 = 3000bc,第 3001 帧 = 1ad。帧 5014 = 2014ad。应用程序的这一部分不是从 3000bc 开始,而是从 60bc 开始,因此第 61 到 3000 帧是空的。在我的 xml 中,前 60 帧对应于一个条目,但第 61 到 5014 帧是空的(我正在寻找一种方法来“跳过”xml 文件中的第 61 到 3000 条目)。丢失的条目可能是为什么会出现此错误?无论如何,非常感谢这个完整而清晰的答案。
  • [france_fla.MainTimeline::frame1:994] 表示Error is from frame1 code &amp; caused by line 994。我怀疑格式错误的部分是您在&lt;node&gt; 名称中添加了一个空格?举个简单的例子:&lt;my Node&gt; 格式错误,但&lt;myNode&gt; 可以,甚至&lt;my_Node&gt;。内容text1a 可以有空格,所以te xt 1 a 很好,所以只有&lt;no de&gt; 部分对有空格很敏感。
  • PS:对于跳过条目,请考虑已发布代码的最后一个函数中的 //testing traces 代码。它检查 xml 中的第 1 [0] 和第 5 [4] 项,因此它已经跳过了第 2,3 和 4 项。这就是如何跳过您不想要的索引位置的一般想法。不要“使用”它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多