所以,我的Flash应用程序出现了更多问题。
我有几张戏剧性的电影剪辑列表,即“MiniInfos”,其中包含一些“作品”的细节。这些是在一个循环中添加到舞台上的,每次我需要添加一个eventlistener(MouseEvent.CLICK)以便能够单击它以显示更多细节。问题是,为了知道接下来应该出现哪些细节,我需要访问一个包含ID的TextField,以便能够将它传递给下一个Movieclip(让我们称之为“BigInfo”)。
所以,我知道这听起来令人困惑,但是我总是试着总结一下。
有几个MiniInfos添加到TextFields的舞台上,如“ID:1,ID:2,ID:3”等。
我希望能够点击一个,另一个动画片段(BigInfo)被添加到舞台上,并提供有关它的更多详细信息。要知道我应该在PHP上提供哪些信息,我需要知道我点击的MiniInfo的ID。
我的意识形态(没有用)是:
//on the cycle
MiniInfo.addEventListener(MouseEvent.CLICK, OpenWorkDetails);
//further down the code
public function OpenWorkDetails(e:MouseEvent):void
{
trace(MiniInfo.IDTrabalhoField.text);
//If I figure this number out, I will change it to addChild
}
所以,我得到一个错误1120:访问未定义的属性MiniInfo。
我意识到这段代码不是最好的,所以如果你们有一个不同的解决方案,请随意分享。我还在学习闪光灯。
谢谢。
Marco Fox。
答案 0 :(得分:2)
我创建了一个小型Flash应用程序来演示您可以采用的不同方法:
<强> FLASH 强>
Main.as(文档类):
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
[SWF(width="275", height="175")]
public class Main extends Sprite
{
private var _phpPath:String = "http://localhost/stackoverflow/minibiginfos/getBigInfo.php";
private var _bigInfo:BigInfo;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var xml:XML = <miniInfos>
<miniInfo id="1" text="Mini Info 1" />
<miniInfo id="2" text="Mini Info 2" />
<miniInfo id="3" text="Mini Info 3" />
</miniInfos>;
for (var i:uint = 0; i < xml.children().length(); i++)
{
var miniInfo:MiniInfo = new MiniInfo(xml.miniInfo[i].@id,
xml.miniInfo[i].@text);
miniInfo.x = 25;
miniInfo.y = 25 + ((miniInfo.height + 25) * i);
addChild(miniInfo);
miniInfo.addEventListener(MouseEvent.CLICK, onMiniInfoClick);
}// end for
}// end function
private function onMiniInfoClick(e:MouseEvent):void
{
loadBigInfo(MiniInfo(e.currentTarget).id);
}// end function
private function loadBigInfo(id:int):void
{
if (!_bigInfo)
{
_bigInfo = new BigInfo();
_bigInfo.x = 150;
_bigInfo.y = 25;
addChild(_bigInfo);
}// end if
var urlVariables:URLVariables = new URLVariables();
urlVariables.miniInfoID = id;
var urlRequest:URLRequest = new URLRequest(_phpPath);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = urlVariables;
var urlLoader:URLLoader = new URLLoader(urlRequest);
urlLoader.addEventListener(Event.COMPLETE, onURLLoaderComplete);
urlLoader.load(urlRequest);
}// end function
private function onURLLoaderComplete(e:Event):void
{
var urlLoader:URLLoader = URLLoader(e.currentTarget);
var urlVariables:URLVariables = new URLVariables(urlLoader.data);
_bigInfo.text = urlVariables.text;
}// end function
}// end class
}// end package
import flash.display.Sprite;
import flash.text.TextField;
internal class MiniInfo extends Sprite
{
private var _id:int;
private var _text:String
private var _width:Number = 100;
private var _height:Number = 25;
override public function get width():Number { return _width }
override public function get height():Number { return _height }
public function get id():int { return _id }
public function get text():String { return _text }
public function MiniInfo(id:int, text:String):void
{
_id = id;
_text = text;
graphics.beginFill(0xE1E1E1);
graphics.drawRect(0, 0, _width, _height);
graphics.endFill();
var textField:TextField = new TextField();
textField.x = textField.y = 5;
textField.text = text;
textField.mouseEnabled = false;
addChild(textField);
}// end function
}// end class
internal class BigInfo extends Sprite
{
private var _width:Number = 100;
private var _height:Number = 125;
private var _textField:TextField;
public function get text():String { return _textField.text }
public function set text(text:String):void { _textField.text = text; }
public function BigInfo()
{
graphics.beginFill(0xE1E1E1);
graphics.drawRect(0, 0, _width, _height);
graphics.endFill();
_textField = new TextField();
_textField.width = 90;
_textField.wordWrap = true;
_textField.x = _textField.y = 5;
_textField.mouseEnabled = false;
addChild(_textField);
}// end function
}// end class
<强> PHP 强>
getBigInfo.php:
<?php
if(!empty($_POST))
{
$bigInfos = array
(
array
(
'miniInfoID' => 1,
'text' => "This is the big info for mini info 1"
),
array
(
'miniInfoID' => 2,
'text' => "This is the big info for mini info 2"
),
array
(
'miniInfoID' => 3,
'text' => "This is the big info for mini info 3"
)
);
$text;
for($i = 0; $i < sizeof($bigInfos); $i++)
{
foreach($bigInfos as $item)
{
if($item['miniInfoID'] == (int)$_POST['miniInfoID'])
{
$text = $item['text'];
break;
}
}// end foreach
break;
}// end for
print "text=$text";
}// end if
?>
以下是运行Flash应用程序的图像:
答案 1 :(得分:1)
public function OpenWorkDetails(e:MouseEvent):void{
trace((e.currentTarget as MiniInfo).IDTrabalhoField.text);
}
答案 2 :(得分:0)
你确定MainFInfo,你的MainINfo.addEventListener和OpenWOrkDetails都在同一个MovieClip中吗?
您获得的错误意味着MainInfo不存在于同一个MovieClip中。 利
答案 3 :(得分:0)
您的问题可能是MiniInfo未在范围内声明。如果它是一个类实例,那么它可以工作,但是如果在函数内部声明了MiniInfo,那么一旦退出该函数它就会被“遗忘”。这就是为什么你必须做www0z0k所做的事情,并使用事件的currentTarget属性。