※ ChatGPTを利用し、要約された質問です(原文:xmlで読み込んだ幅が違う画像を横に並べる方法がわかりません。【AS3】)
xmlで読み込んだ幅が違う画像を横に並べる方法がわかりません。
このQ&Aのポイント
Flash CS3 AS3を使用して、xmlで読み込んだ幅が異なる画像を横に並べる方法が分かりません。
要求された仕様に基づいて、表示される画像の高さを360pxに固定し、各画像の幅を計算して10pxの間隔で横に並べたいです。
現在のコードではうまく動作せず困っています。助けていただけると幸いです。
xmlで読み込んだ幅が違う画像を横に並べる方法がわかりません。【AS3】
xmlで読み込んだ幅が違う画像を横に並べる方法がわかりません。
Flash CS3 AS3 MacOS10.6.2
流れは、xmlに書かれた「画像URL」「幅」「高さ」を読み込み、
画像高さ=360pxに固定し、それによって算出された新しい画像幅を
10px間隔で、横に並べたい。
のですが、、、うまくいかなくて困っております。
誰か助けてください。。。
ソースは以下の通りです。
XML-----------------------
<?xml version="1.0" encoding="UTF-8"?>
<root>
<banner image="A.jpg" link="a.html" target="_self" imgwidth="533" imgheight="800" />
<banner image="B.jpg" link="b.html" target="_self" imgwidth="640" imgheight="476" />
<banner image="C.jpg" link="c.html" target="_self" imgwidth="600" imgheight="603" />
<banner image="D.jpg" link="d.html" target="self" imgwidth="533" imgheight="800" />
<banner image="E.jpg" link="e.html" target="_self" imgwidth="533" imgheight="800" />
<banner image="F.jpg" link="f.html" target="_self" imgwidth="640" imgheight="476" />
</root>
---------------------------
(画像ファイル名は実際自由な名前が付きます)
◆ソースはhondakiyoshiさんのを参考にさせていただきました。
http://hondakiyoshi.com/actionscript/_as3-0_外部xml読み込みで表示するスクロールバナー.html
ASファイル(scrbanner.as)--------------------------
package {
-----省略---------
public class scrbanner extends MovieClip {
public const BNR_WIDTH:int = 260; //画像のX軸設定用数値
private const BNR_NUM:int = 5;
-----省略---------
// コンストラクタ
public function scrbanner(){
//XML読み込み
-----省略---------
}
//XML読み込み完了後の処理
function LoaderInfoCompleteFunc (event : Event) {
loadxml = new XML(url_loader.data);
var xmlList:XMLList = loadxml.banner;
scrollmc = new scrollclass();
scrollmc.y=scrollmc.x =0;
//画像の数だけバナークラスの作成を繰り返す
var i:int=0;
var rw:Array = new Array();
while (i<BNR_NUM){
for each(var element:XML in xmlList){
bannermc[i]=new bannerclass(element.@image,element.@link,element.@target,element.@imgwidth,element.@imgheight);
rw[i] = 360*xmlList[i].@imgwidth/xmlList[i].@imgheight+10; //ここで各画像の幅+余白10pxを計算
//bannermc[i].x = i * BNR_WIDTH; //このままだと等間隔に並ぶ
bannermc[i].x = bannermc[i].x + + rw[i]; //★ここが問題の部分
scrollmc.addChild(bannermc[i]);
i++;
}
}
-----省略---------
addChild(scrollmc);
}
}
}
---------------------------------------------------------------------
ASファイル(bannerclass.as)--------------------------
package {
-----省略---------
public class bannerclass extends MovieClip {
-----省略---------
public function bannerclass(imagepath:String,inurl:String ,tgt:String,imgw:int,imgh:int){
-----省略---------
}
//ローディング中の処理
-----省略---------
};
//画像読み込みが終わったら。
private function completeHandler(event:Event):void {
//フェードイン用に最初が白いMOVIEクリップを準備
bf= new bunner_fadein();
//マウスオーバー用MOVIEクリップを準備
ovmc = new bannerover();
bf.width = ovmc.width = this.width;
bf.height = ovmc.height = this.height;
addChild(bf);
addChild(ovmc);
loadingmc.visible=false;
bf.gotoAndPlay("fadein");
ovmc.addEventListener(MouseEvent.ROLL_OVER, bnover);
ovmc.addEventListener(MouseEvent.ROLL_OUT, bnout);
ovmc.addEventListener(MouseEvent.CLICK, bnclick);
ovmc.buttonMode = true;
ovmc.useHandCursor = true ;
ovmc.mouseEnabled = true;
//ここで表示画像サイズを指定しました。
this.width = 360*width/height;
this.height = 360;
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("Unable to load image: " );
}
-----省略---------
}
}
---------------------------------------------------------------------
ASファイル(scrollclass.as)-----------------------------------------------
これはそのままです。
---------------------------------------------------------------------
長々とすみません。
もうどうしようもできなくて。。。
よろしくお願いいたします。
お礼
ありがとうございます! ばっちりでした!!!! キレイに並びました。 もうここで何日苦労したか。。。 これで今日はゆっくり寝れそうです。 間違いの部分も作って頂いたサンプルを見て直せました。 +=でrwを足していくということですね。 色々勉強になります。 これから、ボタンを配置して、クリックでスライドするスクリプトに挑戦です! ありがとうございました!