2011年3月24日木曜日

FlashAS3のクラスオブジェクト

わかってる人には当たり前かもしれないけど、
AS3はクラスオブジェクトをオブジェクトとして使えるのか?と言う疑問。
一応試した。

●FlashTest04.as
package test
{
import flash.display.MovieClip;
public class FlashTest04 extends MovieClip
{
public function FlashTest04(){
var classObject:Class = StaticTestClass;
trace("クラスオブジェクト",classObject.aaa);
}
}
}
●StaticTestClass.as
package test
{
public class StaticTestClass
{
public static var aaa:String = "ほほほ";
}
}
●出力
クラスオブジェクト ほほほ

2011年3月23日水曜日

高速tweenエンジン

今はtweener使ってるけど、
やっぱりアイテム数が多いのでtweenエンジンも高速なものにしたいと思って調べてみた
http://code.google.com/p/kawanet/wiki/KTweenJ
http://kawa.at.webry.info/201002/article_2.html

大体同じことが出来るけど開始ディレイは無いので少し工夫がいる。

テストコード
import net.kawa.tween.KTween;
import net.kawa.tween.KTJob;
import net.kawa.tween.easing.*;
//http://code.google.com/p/kawanet/wiki/KTweenFAQJ
//KTween.to(mySprite, 2, {alpha: 0.0}, Linear.easeOut, callback);
//KTween.from(mySprite, 3, {x:320, y;480}, Quad.easeOut).round = true;
//KTween.fromTo(mySprite, 4, {x:0, y:0}, {x:320, y;480}, Elastic.easeOut);
var job:KTJob = KTween.to(mySprite, 2,{x:320,y:40},Elastic.easeOut);
job.onCloseParams = [1234,"へへへ"];
job.onClose = function(a:int,b:String){
trace("わわわ",a,b);
}

2011年3月6日日曜日

プライベートメソッドの定義

プライベートにしたいメソッドを実装側(.mのほう)にインターフェース宣言を置く事で出来る。
(Private)の括弧の内側部分は任意で良いらしい。Protectedは無い。


#import "TestViewController.h"
@interface TestViewController(Private)
- (void) buttonDidPush;
@end
@implementation TestViewController
......

プロパティへのアクセス

プロパティへのアクセスはgetterやsetterをつかってアクセス出来る。
または構造体のメンバとして直接アクセスすることも出来る。

クラス定義:A.h
#import <Foundation/Foundation.h>
@interface A : NSObject {
@public
int aaa;
}
@property int aaa;//デフォルトでreadWriteになっている
@end
クラス定義:A.m
#import "A.h"
@implementation A
@synthesize aaa;
@end

呼び出し側:
A *abc = [[A alloc] init];
abc->aaa = 125;
NSLog(@"test = %d",abc->aaa);//プロパティへ直接アクセス
NSLog(@"test = %d",abc.aaa);//ゲタを使ってアクセス

結果:
2011-03-06 19:22:32.178 testAccessPropertyOrAccesser[50215:207] test = 125
2011-03-06 19:22:32.180 testAccessPropertyOrAccesser[50215:207] test = 125

2011年3月4日金曜日

ブロック

ブロック、良く解らないけどプログラムの小さな固まり(たぶんすごく大きくても良いけど)。
変数や、リテラル値として定義できる。
AS3の関数リテラルやJavaScriptのクロージャ?のような感じ。
ちょっとわかりにくいので使わなくても良いかな?と思うけど、
COCOAフレームワークのではメソッドの引数として使われることもあるようなので必須なのかも。

int a = 5;
int (^onefrom)(int); //ブロック変数定義
onefrom = ^(int anint){ //ブロックのリテラル定義、ブロック変数に代入
int b = 10;
return anint +a +b;
};
NSLog(@"Block =%d",onefrom(20));
結果:
2011-03-04 22:46:43.113 testBlock[15953:207] Block =35

痛風

病院行ってきた。
尿酸値9.8orz
クスリパワーアップ!