前回の第20回はクラスMyTimerに修正を加えて、

プロパティを設定するメソッドの定義
たとえば、

プロパティsecondsの値をminutesに繰上げるには、
// ActionScript 3.0クラス定義ファイル: MyTimerInfo.as
package {
public class MyTimerInfo {
public var milliseconds:int;
public var seconds:int;
public var minutes:int;
public var hours:int;
public function MyTimerInfo(nMilliseconds:Number=0) {
setTime(nMilliseconds);
}
public function setSeconds(nSeconds:Number) { // 追加
setTime(nSeconds*1000);
}
private function setTime(nTime:Number):void {
milliseconds = nTime % 1000;
nTime = Math.floor(nTime / 1000);
seconds = nTime % 60;
nTime = Math.floor(nTime / 60);
minutes = nTime % 60;
hours = Math.floor(nTime / 60);
}
}
}
MyTimerInfoインスタンス

get/setアクセサメソッド
前項
getおよびsetアクセサメソッドは、
private var プロパティ:データ型;
public function get アクセサメソッド():データ型 {
return プロパティ;
}
public function set アクセサメソッド(引数:データ型):void {
プロパティ = 引数;
}
getとsetのアクセサメソッドには、
// ActionScript 3.0クラス定義ファイル: MyTimerInfo.as
package {
public class MyTimerInfo {
public var milliseconds:int;
private var _seconds:int;
public var minutes:int;
public var hours:int;
public function MyTimerInfo(nMilliseconds:Number=0) {
setTime(nMilliseconds);
}
public function get seconds():int {
return _seconds;
}
public function set seconds(nSeconds:int) {
setTime(nSeconds*1000);
}
private function setTime(nTime:Number):void {
milliseconds = nTime % 1000;
nTime = Math.floor(nTime / 1000);
_seconds = nTime % 60;
nTime = Math.floor(nTime / 60);
minutes = nTime % 60;
hours = Math.floor(nTime / 60);
}
}
}

それでは、
したがって、
// ActionScript 3.0クラス定義ファイル: MyTimerInfo.as
package {
public class MyTimerInfo {
private var totalMilliseconds:Number;
public function MyTimerInfo(nMilliseconds:Number=0) {
totalMilliseconds = nMilliseconds;
}
public function get milliseconds():int {
var nMilliseconds:int = totalMilliseconds%1000;
return nMilliseconds;
}
public function get seconds():int {
var nSeconds:int = Math.floor(totalMilliseconds/1000)%60;
return nSeconds;
}
public function get minutes():int {
var nMinutes:int = Math.floor(totalMilliseconds/1000/60)%60;
return nMinutes;
}
public function get hours():int {
var nHours:int = Math.floor(totalMilliseconds/1000/60/60);
return nHours;
}
public function set milliseconds(nMilliseconds:int):void {
setTime(hours, minutes, seconds, nMilliseconds);
}
public function set seconds(nSeconds:int):void {
setTime(hours, minutes, nSeconds, milliseconds);
}
public function set minutes(nMinutes:int):void {
setTime(hours, nMinutes, seconds, milliseconds);
}
public function set hours(nHours:int):void {
setTime(nHours, minutes, seconds, milliseconds);
}
public function setTime(nHours:int=0, nMinutes:int=0, nSeconds:int=0, nMilliseconds:int=0):void {
nMinutes = nHours*60+nMinutes;
nSeconds = nMinutes*60+nSeconds;
nMilliseconds = nSeconds*1000+nMilliseconds;
totalMilliseconds = nMilliseconds;
}
}
}
この仕様変更にともない、
アクセサメソッドsecondsは、
// タイムライン: メイン
// フレームアクション
var myObject:MyTimer = new MyTimer();
var oElapsedTime:MyTimerInfo = myObject.getElapsedTime();
oElapsedTime.seconds = 150; // 150秒を設定
trace(oElapsedTime.minutes, oElapsedTime.seconds);
oElapsedTime.seconds -= 50; // 50秒を差引く
trace(oElapsedTime.minutes, oElapsedTime.seconds);

これでクラス定義の基本は、
今回解説した次のサンプルファイルがダウンロードできます。