ホーム > AS3.0
AS3引き続き勉強中。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
/**
* 2008.08
* 線形上下運動
*/
public class Sample03_a extends Sprite
{
private var ball:Oyaji;
private var angle:Number = 0;
private var text:TextField;
private var speed:Number = 0.1;
private var centerY:Number = stage.stageHeight;
private var range:Number = 50;
public function Sample03_a()
{
init();
}
private function init():void {
ball = new Oyaji();
addChild(ball);
//centerに
ball.x = stage.stageWidth / 2;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//text
text = new TextField;
stage.addChild(text)
text.x = 40;
text.y = 175;
text.width = 200;
text.height = 20;
text.selectable = false;
text.textColor = 0xffffff;
}
public function onEnterFrame(evemt:Event) {
//Stageの半分の高さ + サインを求めてrangeから-rangeまでの振幅を算出
ball.y = centerY / 2 + Math.sin(angle) * range;
angle += speed;
var bally_num:Number = ball.y;
text.text = String(bally_num);
}
}
}
ball.y = centerY / 2 + Math.sin(angle) * range;
angleのサインを求めてそれにrange(50)をかける
幅はrange(50)から-range(-50)まで
それにStage分の高さ(200)を2で割った分を足す(100)
振幅は 150 から 50 まで
angle += speed;
angleにspeed分を足していき上下運動をさせる(値が高いとspeed up)
ちなみに
ball = new Oyaji();
記事as3.0:表示リスト/親子関係で作った親父グラフィックを分けて親父クラスを作成してみました。
package
{
import flash.display.Sprite;
/**
* 2008.08.07
*/
public class Oyaji extends Sprite
{
public function Oyaji() {
init();
}
public function init():void {
//Oyaji用
graphics.beginFill(0xffffff);
graphics.drawCircle(0, 0, 20);
graphics.endFill();
graphics.beginFill(0xaa0000);
graphics.drawCircle(0, 0, 10);
graphics.endFill();
graphics.beginFill(0x000000);
graphics.drawCircle(0, 0, 6);
graphics.endFill();
graphics.beginFill(0xffffff);
graphics.drawCircle(-5, -5, 3);
graphics.endFill();
}
}
}
好きなものを使って勉強すると楽し~。
AS3最近ちょっと勉強中。
AS2と比べると大きく違うことはまず書き方だと思うけど、
型定義を宣言してStageにaddChildしないと表示されないことかな。
でも型定義・宣言してるからどこか記述ミスした時にエラーが出るから便利!
AS2だと何か対策しとかないとどこ記述ミスしたのか分からない・・・ってことあったもんなぁ
あと親の中に表示させた子要素をいちいち削除しないで
別の親要素に移動できるのがすごいー
いままでのattachしてremoveして…なんて繰り返さなくてもいいってことですよね。
試しにサンプル作ってみました
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
public class Sample01 extends Sprite
{
//型を宣言
private var parent1:Sprite;
private var parent2:Sprite;
private var ball:Sprite;
private var text:TextField;
public var ballFlg:Boolean = false;
private var message:String = "押してみるのじゃ!";
public function Sample01()
{
init()
}
private function init():void {
//親要素1
parent1 = new Sprite();
addChild(parent1);
parent1.graphics.lineStyle(1, 0);
parent1.graphics.drawRect( -50, -50, 100, 100);
parent1.x = 60;
parent1.y = 60;
//親要素2
parent2 = new Sprite();
addChild(parent2);
parent2.graphics.lineStyle(1, 0);
parent2.graphics.drawRect( -50, -50, 100, 100);
parent2.x = 200;
parent2.y = 60;
//子要素1
ball = new Sprite();
parent1.addChild(ball);
//Oyaji用
ball.graphics.beginFill(0xffffff);
ball.graphics.drawCircle(0, 0, 20);
ball.graphics.endFill();
ball.graphics.beginFill(0xaa0000);
ball.graphics.drawCircle(0, 0, 10);
ball.graphics.endFill();
ball.graphics.beginFill(0x000000);
ball.graphics.drawCircle(0, 0, 6);
ball.graphics.endFill();
ball.graphics.beginFill(0xffffff);
ball.graphics.drawCircle(-5, -5, 3);
ball.graphics.endFill();
ball.addEventListener(MouseEvent.CLICK, onBallClick);
//text
text = new TextField;
stage.addChild(text)
text.x = 90;
text.y = 120;
text.width = 150;
text.height = 20;
text.selectable = false;
text.textColor = 0xffffff;
text.text = message;
}
public function onBallClick(event:MouseEvent):void {
if (ballFlg==false){
parent2.addChild(ball);
text.text = "わしを元に戻せい!";
ballFlg = true;
}
else {
parent1.addChild(ball);
text.text = "押してみるのじゃ!";
ballFlg = false;
}
}
}
}
「parentX.addChild(ball);」部分を変更するだけで子要素が移動する。便利ー



