我是AS3的新手,我正在努力实现以下情况。
首先,我收到JSON数据,对它们进行排序并将它们放入框中。每个框都有其数据集,例如Box1(Name1,Location1,Zip1),Box2(Name2,Location2,Zip2)等等。 将框放入另一个AS文件中进行显示,并将其放入视口滑块中。 试图使盒子可以点击,当点击一个盒子时,它将转到下一页并显示该特定“列表”的详细信息。
第一件事是,当电影剪辑框作为文件位于另一个内部时,如何使它可以被点击。
第二件事是,如何在单击时从该框中提取数据,因为它是由循环的JSON数据生成的。 (因为我需要使用列表中的ID将其解析为php以提取详细信息并在下一个文件中显示完整的详细信息。
谢谢你的时间!
生成框的AS文件。
package com.clark
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class SearchVectorTest extends MovieClip
{
public function SearchVectorTest(test:Vector.<searchVO1>)
{
super();
for (var j:int = 0; j < test.length; j++)
{
trace(test[j].nobed);
trace(test[j].zip);
trace(test[j].Location);
trace(test[j].price);
}
var len:int = test ? test.length : 0;
listings = new Vector.<Listing8>(len, true);
var currentY:int = 100;
for (var k:int = 0; k < test.length; k++)
{
var Bolder:Listing2 = new Listing2();
Bolder.x=20;
var bf:TextField = new TextField();
var bf1:TextField = new TextField();
var bf2:TextField = new TextField();
var bf3:TextField = new TextField();
bf3.width = 100;
bf.defaultTextFormat = new TextFormat("Arial", 12, 0, null, null, null, null, null, TextFormatAlign.CENTER);
bf.width = 100;
bf.autoSize = TextFieldAutoSize.CENTER;
bf1.width = 100;
bf1.autoSize = TextFieldAutoSize.CENTER;
bf2.autoSize = TextFieldAutoSize.CENTER;
bf3.autoSize = TextFieldAutoSize.CENTER;
bf3.width = 100;
bf1.y= bf.height+5;
bf.text = test[k].nobed;
bf1.text = test[k].zip;
bf2.text = test[k].Location;
bf3.text = test[k].price;
bf.x = (Bolder.height-bf.height)*.2
Bolder.addChild(bf);
Bolder.addChild(bf1);
Bolder.addChild(bf2);
Bolder.addChild(bf3);
Bolder.properties = test[k].nobed;
Bolder.properties = test[k].zip;
// position the object based on the accumulating variable.
Bolder.y = currentY;
addChild(Bolder);
Bolder.mouseChildren = false; // ignore children mouseEvents
Bolder.mouseEnabled = true; // enable mouse on the object - normally set to true by default
Bolder.useHandCursor = true; // add hand cursor on mouse over
Bolder.buttonMode = true;
listings[k] = Bolder;
currentY += Bolder.height + 10;
}
}
}
}
VectTest文件所在的AS文件
package com.clark
{
import flash.display.*;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Stage;
import fl.controls.Button;
public class sresultnologin extends MovieClip {
public var s1:Searchreult = new Searchreult ();
public function sresultnologin(){
addEventListener(Event.ADDED_TO_STAGE, onadded);
function onadded (event:Event):void{
s1.x=-10;
s1.y=10;
addChild(s1);
}
var s3:SearchVectorTest= new SearchVectorTest(new Vector.<searchVO1>);
addChild (s3);
s1.SRhome.addEventListener(MouseEvent.CLICK, fl_ClickToGoTol);
s1.ARsearch.addEventListener(MouseEvent.CLICK, fl_ClickToGosearch);
if( s3.listings.length > 0 )
{
// get the first listing in the listing array
var newListing:Listing8 = s3.listings[0];
newListing.addEventListener(MouseEvent.CLICK, gotoscener);
}
else
{
//
}
}
// private methods
private function fl_ClickToGoTol(event:MouseEvent):void
{
var s9:Account = new Account ();
removeChild(s1);
addChild(s9);
}
private function fl_ClickToGosearch(event:MouseEvent):void
{
var s9:searchVO1 = new searchVO1 ();
removeChild(s1);
addChild(s9);
}
}
}
编辑(在SearchVectorTest中添加)
var len:int = test ? test.length : 0;
listings = new Vector.<Listing8>(len, true);
编辑(在sresultnologin中添加)
if( s3.listings.length > 0 )
{
// get the first listing in the listing array
var newListing:Listing8 = s3.listings[0];
newListing.addEventListener(MouseEvent.CLICK, gotoscener);
}
else
{
//
}
答案 0 :(得分:0)
必须实例化“其他文件”(类),并且(作为DisplayObject
)必须添加到舞台上才能显示。
考虑以下阶段布局:
root:MainTimeline ¬
0: background:Shape
1: listingWindow:Slider
sresultnologin
(实例化时)看起来像这样:
this:sresultnologin ¬
0: s3:SearchVectorTest ¬
0: Bolder:Listing2 ¬
0: bf:TextField
1: bf1:TextField
2: bf2:TextField
3: bf3:TextField
1: s1:Searchreult
你需要做的就是将addChild(sresultnologin)添加到舞台(或你的Slider),然后会出现这些子元素。
要使其可点击,只需通过object
.addEventListener("mouseUp", listener)
将听众附加到您的对象即可。这可以在任何时候完成:在SearchVectorTest
或sresultnologin
的构造函数中,或者在单击“框”后将其添加到舞台中并显示新列表。如果您想从文档代码中执行此操作,则可能如下所示:
var newListing:Listing2 = listingWindow.getChildAt(0).getChildAt(0).getChildAt(0);
newListing.addEventListener("mouseUp", doStuff);
然而,这完全依赖于DisplayList索引(可能会发生巨大变化)。更好的解决方案可能是命名这些项目并使用getChildByName("string")
代替。但是,如果每个对象都有非唯一的名称,那么这也是危险的。因此,如果您要从其中一个类(例如sresultnologin
)中添加这些新列表,则可以在类上提供指向当前列表的属性,并从文档代码中引用该属性。 / p>
JSON数据与AS3中的任何其他对象结构没有区别。如果需要,可以将其存储为类的属性,并在指定时间引用变量。如果您要将特定列表的特定数据存储在代表它的特定对象上,请尝试在Bolder
中添加SearchVectorTest
以下内容:
Bolder.properties = test[k];
请记住,变量名称与对象上的name属性不同。换句话说......
var Bolder:Listing2 = new Listing2(); // variable is Bolder, of type Listing2
Bolder.name = "foo" // the name property on Bolder is now "foo"
getChildByName("Bolder") // this should fail since there is no object with that name
getChildByName("foo") // works.
只要你意识到这些差异,这并不复杂。 Please run the script I gave you(在“Pathing to Objects”下),显示您的舞台的层次结构。获得输出后,应该不言自明地说明了引用变量所需的路径。