「単純な」フラッシュプロジェクトに取り組んでいます。. フラッシュ要素には 2 つのボタンがあり、それぞれにテキストと変化する画像があります。表示されるテキストと画像は、XML ファイルから読み取られます。このプロジェクトは、さまざまな場所にあるキオスクのデフォルト ページとして使用されます。flashVars を介してキオスクの場所を SWF ファイルに渡します。これにより、キオスクが場所固有のテキストと画像を取得できるようになります。私はフラッシュ開発者ではありませんが、このプロジェクトを与えられたのは、他の誰もそれを望んでおらず、AS3 について何も知らなかったからです。このプロジェクトの作成に使用した、stackOverflow と google で多くの優れた例を見つけました。
私の問題は、ボタンの上にカーソルを合わせると、回転中の画像が空白になることです。
元々、両方のボタンは XML ファイルから動的であり、両方とも画像を非表示にしていました。トラブルシューティングで、左ボタンをハードコーディングしたところ、画像が空白になりませんでした。タイムラインのバグなのか、as3 コードのバグなのかわかりません。xml ファイルの場所をハードコーディングすると問題が「修正」されるという事実は、実際に動的 xml ファイルを読み取って最初に画像を表示する場合、私には意味がありません。
このプロジェクトを私の個人サイトに置いたので、助けたい人は誰でもファイルを表示してアクセスできます。
閲覧するには: http://minerb.com/kiosk/as3.cfm
両方の側で xml ファイルへのパスがハードコードされており、動作します: http://minerb.com/kiosk/as4.cfm
ファイルにアクセスするには: http://minerb.com/kiosk/index.cfm
ハードコーディングされた xml ファイルの場所からのコード抜粋 (Option1SlideShow 行 21-30):
var d = new Date();
var n = d.getMinutes();
my_xml_loader.load(new URLRequest("assets/default/content.xml?"+n));
動作していない動的 xml ファイルの場所からのコード スニップ (動的にスライドした方法の 21 ~ 30 行目): :
var d = new Date();
var n = d.getMinutes();
// start dynamic content.xml
var option2Loc:String;
option2Loc = loaderInfo.parameters.option2Loc+"content.xml?"+n;
// end dynamic content.xml
my_xml_loader.load(new URLRequest(option2Loc));
XML ファイルから画像を読み込む AS3 コード全体
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
var my_speed:Number;
var my_total:Number;
var my_images:XMLList;
var my_loaders_array:Array = [];
var my_success_counter:Number = 0;
var my_playback_counter:Number = 0;
var my_slideshow:Sprite = new Sprite();
var my_image_slides:Sprite = new Sprite();
var my_timer:Timer;
var my_prev_tween:Tween;
var my_xml_loader:URLLoader = new URLLoader();
//start test bits
var d = new Date();
var n = d.getMinutes();
// start dynamic content.xml
var option2Loc:String;
option2Loc = loaderInfo.parameters.option2Loc+"content.xml?"+n;
// end dynamic content.xml
my_xml_loader.load(new URLRequest(option2Loc));
//end test bits
my_xml_loader.addEventListener(Event.COMPLETE, processXML);
function processXML (e:Event):void{
var my_xml:XML = new XML(e.target.data);
my_speed=my_xml.button.images.@SPEED;
my_images=my_xml.button.images.IMAGE;
my_total=my_images.length();
loadImages();
}
function loadImages():void{
for (var i:Number = 0; i < my_total; i++){
var my_url:String = my_images[i].@URL;
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest(my_url));
my_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
my_loaders_array.push(my_loader);
}
}
function onComplete(e:Event):void{
my_success_counter++;
if (my_success_counter == my_total){
startShow();
}
}
function startShow():void{
addChild(my_slideshow);
my_slideshow.addChild(my_image_slides);
setChildIndex(my_slideshow,0);
nextImage();
my_timer = new Timer(my_speed*1000);
my_timer.addEventListener(TimerEvent.TIMER, timerListener);
my_timer.start();
}
function nextImage():void{
var my_image:Loader = Loader(my_loaders_array[my_playback_counter]);
my_image_slides.addChild(my_image);
//my_image.x = (stage.stageWidth - my_image.width)/2;
//my_image.y = (stage.stageHeight - my_image.height)/2;
if (my_image.width == my_image.height) {
my_image.width = 305;
my_image.height = 305;
} else if( my_image.width > my_image.height ) {
var newWidth = (my_image.width *(305 / my_image.height));
my_image.height = 305;
my_image.width = newWidth;
} else if( my_image.width < my_image.height ) {
var newHeight = (my_image.height *(305 / my_image.width));
my_image.width = 305;
my_image.height = newHeight;
}
my_image.x = 80;
my_image.y = -140;
new Tween(my_image,"alpha",Strong.easeOut,0,1,1,true);
}
function timerListener (e:TimerEvent):void{
hidePrev();
my_playback_counter++;
if (my_playback_counter == my_total){
my_playback_counter =0;
}
nextImage();
}
function hidePrev():void{
var my_image:Loader=Loader(my_image_slides.getChildAt(0));
my_prev_tween = new Tween(my_image,"alpha",Strong.easeOut,1,0,1,true);
my_prev_tween.addEventListener(TweenEvent.MOTION_FINISH, onFadeOut)
new Tween(my_image,"alpha",Strong.easeOut,1,0,1,true);
}
function onFadeOut(e:TweenEvent):void{
my_image_slides.removeChildAt(0);
}
画像を読み込むための AS3 コードを終了する
** XML ファイルから動的テキストを読み込むための AS3 コード全体 **
import flash.net.URLRequest;
// start dynamic content.xml
var option2Loc:String;
option2Loc = loaderInfo.parameters.option2Loc;
// end dynamic content.xml
var xmlData:XML = new XML();
var d = new Date();
var n = d.getMinutes();
var theURL_ur:URLRequest = new URLRequest(option2Loc+"content.xml?"+n);
var loader_ul:URLLoader = new URLLoader(theURL_ur);
loader_ul.addEventListener("complete", fileLoaded);
function fileLoaded(e:Event):void
{
xmlData = XML(loader_ul.data);
option2Text.text = xmlData.button.text;
}
** テキスト読み込みの終了コード **