forked from: How to create next circle?
forked from How to create next circle? (diff: 40)
_circleを使いまわす方針で。 プログラミング初心者です。質問があります。 円を間隔をあけて5個表示させたいです。表示は1個表示させて円が画面外に消えると新たな円が出てくるようにしたいです。 for文を書く位置がわかりません。表示リストに追加を5回繰り返せばよいと思い記入しましたが変わりませんでした。
ActionScript3 source code
/**
* Copyright uwi ( http://wonderfl.net/user/uwi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/fiMj
*/
// _circleを使いまわす方針で。
//
// forked from naoyashiga's How to create next circle?
// forked from 9re's 円を動かす
//プログラミング初心者です。質問があります。
//円を間隔をあけて5個表示させたいです。表示は1個表示させて円が画面外に消えると新たな円が出てくるようにしたいです。
//for文を書く位置がわかりません。表示リストに追加を5回繰り返せばよいと思い記入しましたが変わりませんでした。
package {
import flash.display.*;
import flash.events.Event;
[SWF(frameRate="30", width="465", height="465")]
public class MyFirstAnimation extends Sprite {
private var _circle:Circle;
public function MyFirstAnimation() {
// クラスCircleのインスタンスを作る
_circle = new Circle(10);
// 半透明(不透明度25%)
_circle.alpha = 0.25;
_circle.vx = 3;
_circle.vy = 4;
// 最初の位置をwonderflの画面の中央にセット
_circle.x = 465 / 2;
_circle.y = 465 / 2;
// 表示リストに追加
//for文を追加
// 同じのを5個追加してもしょうがない
// for(var i:int=0;i<5; i++){
addChild(_circle);
// }
// 1フレーム毎に実行する処理にenterFrameHandlerを追加する
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
_rep = 0;
}
private var _rep : uint; // 回数
// フレーム毎に行われる処理 [25行目で登録される]
private function enterFrameHandler(e:Event):void {
// 1フレーム分動かす
_circle.move();
// 画面外にでたかどうかの判定
if(
_circle.x < 0 - _circle.radius ||
_circle.x > stage.stageWidth + _circle.radius ||
_circle.y < 0 - _circle.radius ||
_circle.y > stage.stageHeight + _circle.radius
){
// 回数を増やす
_rep++;
if(_rep == 5){
// 5回繰り返したらしゅうりょう
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
return;
}
// ここで_circleのプロパティを再設定
var nx : Number = _circle.vx * Math.cos(Math.PI / 3) - _circle.vy * Math.sin(Math.PI / 3);
var ny : Number = _circle.vy * Math.cos(Math.PI / 3) + _circle.vx * Math.sin(Math.PI / 3);
_circle.vx = nx;
_circle.vy = ny;
// 最初の位置をwonderflの画面の中央にセット
_circle.x = 465 / 2;
_circle.y = 465 / 2;
}
}
}
}
import flash.display.Sprite;
class Circle extends Sprite {
public var vx:Number;
public var vy:Number;
public var radius:Number;
// コンストラクタ
public function Circle(_radius:Number, _fillColor:uint = 0x00CCCC) {
// 塗り_fillColor, 半径_radiusの円
graphics.beginFill(_fillColor);
graphics.drawCircle(0, 0, _radius);
graphics.endFill();
// 半径の大きさをパブリックな変数に保存しておく
radius = _radius
}
// 1フレーム分の動き
public function move():void {
x += vx;
y -= vy;
}
}