前回の記事を書いたら、早速 yo-suke さんが突っ込んでくれて、見よう見まねで修正してみた。ありがとうございます。
/**
* 残りの日付を呼び出すクラス
*/
class com.yokozunat.util.DateUtil {
//コンストラクタ
public function DateUtil() {
}
public static function getCountDay(y:Number, m:Number, d:Number) {
var timeStamp:Number;
var targetTimeStamp:Number;
var my_date:Date = new Date();
//
timeStamp = my_date.getTime();
my_date.setFullYear(y, m, d);
targetTimeStamp = my_date.getTime();
//
return Math.floor((targetTimeStamp-timeStamp)/1000*1/3600*1/24);
}
}
import com.yokozunat.util.DateUtil;
var countDay:Number = DateUtil.getCountDay(2007, 11, 31);
trace("大晦日まであと"+countDay+"日");
そもそも前回書いたクラスでDateを継承する必要がないのでは?とかDateUtilはインスタンス化する必要がないのでは?とかgetCountDayをstaticにすればいいというアドバイスを頂き、手をいれました。
staticってのもよくわかってないんですが、静的メソッドとか静的プロパティとかを作る時に使うもの?クラスが呼ばれるたびに値がクリアされるのではなく、初め呼び出された時に1回だけ作られる?みたいな、そのクラスが何回作られたかを調べたりするのにつかえるみたい。この辺をもう少し掘り下げたい。勉強勉強。
tags:as2
【追記】つづきあります --> 続・残りの日付を呼び出す
Dateを拡張して残りの日数を返してもらうクラスを書いてみたのでメモ。
/**
* 残りの日付を呼び出すクラス
*/
class com.yokozunat.util.DateUtil extends Date {
var timeStamp:Number;
var targetTimeStamp:Number;
var countDay:Number;
//コンストラクタ
function DateUtil() {
}
function getCountDay(y:Number, m:Number, d:Number) {
timeStamp = this.getTime();
this.setFullYear(y, m, d);
targetTimeStamp = this.getTime();
countDay = Math.floor((targetTimeStamp-timeStamp)/1000*1/3600*1/24);
return (countDay);
}
}
/**
* flaファイルのフレームスクリプト
*/
import com.yokozunat.util.DateUtil;
var targetDay:DateUtil = new DateUtil();
var countDay:Number = targetDay.getCountDay(2007, 11, 31);
trace("大晦日まであと"+countDay+"日");
後から考えたら、すごい情けない話なんですが、透過PNGをFlash上に読み込んでムービークリップにしてアルファ0からじょじょに出てくるスクリプト書いてて、なんか透過PNGがギザギザするなぁってしばらく悩んでいたんですが、よくよく考えたら、スクリプトが雑だった事が原因でした。ようはアンチェイリアスが濃くなってギザギザになってるって事なんですかね。あまりに情けなかったので、メモ。てか100以上って、、、。
this.mc._alpha = 0;
this.mc2._alpha = 0;
this.onEnterFrame = Func;
//
function Func() {
//mcはアルファが100になったらループを止める
if (this.mc._alpha>=100) {
this.mc._alpha = 100;
delete this.onEnterFrame;
} else {
this.mc._alpha += 1;
}
//mc2は2ずつ増やす
//ループが止まるまでにアルファが200になる
this.mc2._alpha += 2;
}
split はある文字列(例えば'?ID=5&cID=7'とか)をある文字(例えば'&'など)で分割して配列変数に入れてくれるやつです。
splitって使った事なかったんですが、めっちゃ便利じゃないですか。うんうんうなっていた悩みをプログラマのtk84くんが解決してくれた。ありがとう。
var strQuery:String = '?ID=5&cID=7';
var row:Array = strQuery.substr(1, strQuery.length).split('&');
var cnt:Number = row.length;
var query:Object = new Object();
for (i=0; i<cnt; i++) {
var tmp:Array = row[i].split('=');
query[tmp[0]] = tmp[1];
}
trace(query["ID"]);
trace(query["cID"]);
例えば、?ID=5&cID=7 っていう引数からIDとcIDの変数の中身を取得したいときに、splitを使って、まずID=5とcID=7に分けて、それらをさらにIDと5、cIDと7に分けて配列で持つという事なんですが、へ〜勉強になるなと、ただただ感心してしまった。こういう基本がまだまだできてないな。がんばらねば。
tags:as2
前から悩んでいた外部から読み込んだ画像を回転とか拡大縮小とかするとギザギザになるやつの解決方法がわかったかも、、、。bitmapの処理とかよくわかってないので、へんな記述も混じってるかも。下のが画像を読み込んで回転させただけのやつ、エッジがギザギザしてる。上がスムージングをかけたやつ。この間作ってみた色のやつを改良したらなんとなくできた。もっと色々調べないといけませんね。勉強がたりない。
import flash.geom.Matrix;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
//
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
//trace(target+".onLoadProgress with "+bytesLoaded+" bytes of "+bytesTotal);
};
listener.onLoadInit = function(target:MovieClip):Void {
trace(target+".onLoadInit");
init();
};
mcLoader.addListener(listener);
mcLoader.loadClip("sample.jpg", container);
//
function init() {
var bitmap:BitmapData = new BitmapData(container._width, container._height);
var matrix:Matrix = new Matrix();
bitmap.draw(container, matrix);
/////
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
var newBitmap:BitmapData = new BitmapData(container._width, container._height, false, 0x00FF0000);
mc.attachBitmap(newBitmap, this.getNextHighestDepth(), "auto", true);
//ためしに回転させてみる
mc._x = Stage.width/2-mc._width/2;
mc._y = Stage.height/2-mc._height/2;
mc._rotation = 30;
//
newBitmap.copyPixels(bitmap, new Rectangle(0, 0, container._width, container._height), new Point(0, 0));
container.removeMovieClip();
}
ダイナミックテキストをぺたっと貼るのではなく、なにかしらのちょっとした動きをつけたいと思い、試行錯誤。それと正しいクラスの作り方をニューフェイスtk84くんに教えてもらいました。やっぱりプログラムをちゃんとやってる人はすごいね。勉強になります。。。
クラスの書き方がまだあやふやだったので、trick7.com blog: カスタムクラスとクラスパスを参考にあれこれしていたら、ここに書いてあったxfactorstudioのXPass4AS2ってのがすげー便利。なんでもっと早くこの存在に、、、。FlashでRSSリーダーのサンプルを作ってみました。ちょっとクラスの扱いをちゃんとまとめなきゃ。


