トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     XMLの表示順を期日によって、変更させる。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
田伏庸朗
Åê¹ÆNo.43848
投稿日時: 2009-11-5 18:56
半人前
居住地: 新潟県新潟市
投稿: 36
使用環境:
FLASH CS4
windows xp
AS3.0
XMLの表示順を期日によって、変更させる。
毎度お世話になっております。
また質問させていただきます。

現在、as2.0で、
xmlを使って、イベントリストを表示させ、
期日が過ぎたら、期日が過ぎたイベントを一番末尾に表示させる、
というものを作ってくれという依頼がありました。

XMLからのデータを表示させ、
期日を拾得するまでは、思いつくのですが
XMLからのデータの表示順を変えるという
スクリプトを思いつきません。
XMLのノード順でしか表示できないのでしょうか?

出来るか出来ないか、と出来るならば、
ザックリとしていても全然いいので、
方法論を教えてください。

ご迷惑をおかけしますが、
よろしくお願いいたします。




永井勝則
Åê¹ÆNo.43849
投稿日時: 2009-11-5 22:56
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: XMLの表示順を期日によって、変更させる。
ざっくりした方法ですが、

var theDate1104:Date = new Date(2009, 11, 4);
var theTime1104:Number = theDate1104.getDate();
で、1970/1/1からの経過時間がミリ秒で得られます。

同様に期限の時間も
var theDueDate:Date = new Date(2009, 11, 3);
var theDueTime:Number = theDueDate.getDate();
で得られます。

この2つの数値を比べると、その日にちが期日を過ぎているかどうかが分かります。

XMLのデータにこの時間の数値を入れるのも手でしょうし、
XMLの年月日からFlash Player内で時間の数値を作ることもできます。

XMLのデータは後で使いまわすことになると思うので、
わたしが以前よく使っていた方法は、Objectを作って、そのプロパティにXMLのデータを割り当て、
そのObjectを配列に入れる、という方法です。

Object.id = "1"
Object.year = "2009"
Object.month = "11"
Object.date = "4"

というようなObjectを必要な分だけつくり、
[Object, Object, Object...]という配列を作って、これを処理する方法です。

いずれにせよ読み込んだXMLはただのデータなので、あとはそれを使いやすい形式に整理さえすれば、いかようにでも料理できます。


----------------
永井勝則:
himco.jp :

田伏庸朗
Åê¹ÆNo.43854
投稿日時: 2009-11-6 11:05
半人前
居住地: 新潟県新潟市
投稿: 36
使用環境:
FLASH CS4
windows xp
AS3.0
Re: XMLの表示順を期日によって、変更させる。
永井様、返信ありがとうございます。

引用:

XMLのデータは後で使いまわすことになると思うので、
わたしが以前よく使っていた方法は、Objectを作って、そのプロパティにXMLのデータを割り当て、
そのObjectを配列に入れる、という方法です。

Object.id = "1"
Object.year = "2009"
Object.month = "11"
Object.date = "4"

というようなObjectを必要な分だけつくり、
[Object, Object, Object...]という配列を作って、これを処理する方法です。

いずれにせよ読み込んだXMLはただのデータなので、あとはそれを使いやすい形式に整理さえすれば、いかようにでも料理できます。


なるほど!objectにしてしまって、
配列順を変えれば良いんですね!
ありがとうございました。
光が見えてきました。
永井勝則
Åê¹ÆNo.43859
投稿日時: 2009-11-7 13:15
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: XMLの表示順を期日によって、変更させる。
とっかかりとなるようなざっくりしたものを作成したので、
今後検索される方のために追加しておきます。
(不要かもしれませんが)

XMLは次のように作成しています。

<events>
<event id="1" year="2009" month="11" date= "5" name="2009/11/5のイベント" />
<event id="2" year="2009" month="11" date= "6" name="2009/11/6のイベント" />
...
</events>
メインのタイムラインのActionScript
function loadXML(url:String):Void {
	var xml:XML = new XML();
	xml.ignoreWhite = true;
	var list:Array = new Array();

	xml.onLoad = function(success:Boolean):Void  {
		if (success) {
			var rootNode:XMLNode = this.firstChild;
			var childNode:XMLNode = rootNode.firstChild;
			while (childNode) {
				var temp:Object = new Object();
				temp.id = childNode.attributes.id;
				temp.year = childNode.attributes.year;
				temp.month = childNode.attributes.month
				temp.date = childNode.attributes.date;
				temp.name = childNode.attributes.name;
				list.push(temp);
				childNode = childNode.nextSibling;
			}
			//trace(list[0].date)
			setXMLData(list);
		}
	};
	xml.load(url);
}

var due:Date = new Date(2009, 11, 8);
var dueTime:Number = due.getTime();

function setXMLData(array:Array):Void {
	var len:Number = array.length;
	for (var i:Number = 0; i<len; i++) {
		//trace(array[i].date);
		//trace(array[i].date);
		//trace(array[i].name);
		var theYear:Number = Number(array[i].year)
		var theMonth:Number = Number(array[i].month)
		var theDate:Number = Number(array[i].date)
		
		var theDay:Date = new Date(theYear, theMonth, theDate);
		var theTime:Number = theDay.getTime();
		
		if(theTime < dueTime) {
			trace("期限切れ");
			trace(array[i].name)
		}
	}
}
loadXML("eventsDate.xml");


XMLはAS3の方が相当扱いやすいです。


----------------
永井勝則:
himco.jp :

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops