【AS3】丸をかくclass
iyamaです。
ActionScriptで誰得?な、丸を描くclassを作ったのでご紹介します。
最近ActionScriptばっかりやってるんですが、そこで気がついたのが、
なんとなくしかclassとか継承とかgetter/setterとか理解してないなってこと。
class使えるけど、作れなくなってないか?と思いまして、勉強しなおしてます。
今日は練習の1つとして作った丸を表示するclassについてです。
■環境
ActionScript 3.0
(※今回もFlashDevelopにてパブリッシュして検証しました)
■classes/Circle.as
丸を描くCircleクラスをclasses内に配置しました。
package classes
{
import flash.display.Shape;
public class Circle extends Shape
{
private var _color:Number = 0x000000;
private var _alpha:Number = 1;
private var _x:Number = 50;
private var _y:Number = 50;
private var _radius:Number = 50; // 半径
public function Circle()
{
// init
}
// method ------------------------------
public function draw():void {
graphics.beginFill(_color, _alpha);
graphics.drawCircle(_x, _y, _radius);
graphics.endFill();
}
// getter/setter ------------------------------
/**
* alpha
*/
public function get circleAlpha():Number {
return _alpha;
}
public function set circleAlpha(value:Number):void {
_alpha = value;
}
/**
* color
*/
public function get color():Number {
return _color;
}
public function set color(value:Number):void {
_color = value;
}
/**
* redius
*/
public function get radius():Number {
return _radius;
}
public function set radius(value:Number):void {
_radius = value;
}
/**
* x
*/
public function get circleX():Number {
return _x;
}
public function set circleX(value:Number):void {
_x = value;
}
/**
* y
*/
public function get circleY():Number {
return _y;
}
public function set circleY(value:Number):void {
_y = value;
}
}
}
■Main.as
では実際にCircleクラスを使ってみましょう。
package Main
{
import flash.display.Sprite;
import flash.events.Event;
import classes.Circle;
public class Main extends Sprite
{
private var myCircle:Circle;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
myCircle = new Circle();
myCircle.color = 0xff0000;
myCircle.circleAlpha = 0.5;
myCircle.circleX = 200;
myCircle.circleY = 200;
myCircle.radius = 150;
myCircle.draw();
addChild(myCircle);
}
}
}
■解説
Circle.asの解説から。
ホントにただ塗りつぶした丸を表示するだけのclassです。
丸を表示するにはdraw()を使用してください。
丸のプロパティを指定できるようにgetterとsetterを用意。
丸の色、透明度、丸の中心のx座標、丸の中心のy座標、半径が指定できます。
また、getterとsetterを作るとき、コーディングの注意がいくつかあるようです。
- fooのストレージ変数には「_foo」という名前を付けます。
- setterの引数にはvalueを使用
- プロパティ名を基準にアルファベット順に並べます。
- getterを記述してからsetterを記述
大体、上記のルールは守ったつもりですが、変数のつけ方が違いますね。
alpha、x、yは予約語だったっぽくてpublicにしてたら怒られました。
プロパティ名は直したんですがclass内の変数をそのままにしちゃってました。
それからMain.asのほうですが、Circleクラスをimportして指定してください。
インスタンスを作ってプロパティを指定し(指定しなくてもClass内のデフォルト値が入るだけ)
stageにaddChildしてください。
これで丸が表示されます。
■実行結果
Main.asを実行すると以下のようになります。

うむ。
これでgetterとsetterについて学びなおせたかな。
以上です。

>・fooのストレージ変数には「_foo」という名前を付けます。
>・setterの引数にはvalueを使用
>・プロパティ名を基準にアルファベット順に並べます。
>・getterを記述してからsetterを記述
↑これコーディング規約的なものですか?それともエラーになっちゃう?
紛らわしくてごめんなさい。
コーディング規約です。無視しても動きます。
ただプロパティ名が、alpha、x、yなどだと
既に存在するプロパティなのでエラーになります。
ですよね、ありがとうございます!
コード規約がそのままsyntax errorになったりする言語もあるっぽいので確認でした!