ASだけで雨は降るのかどうか



2015/09/24 00:59


今まで何かを降らせるときはスプライトに配置してどうのこうの
をやっていたけど、ASだけで実装できるかチャレンジしてみた

参考はこちら
http://d.hatena.ne.jp/habu024/20090624/1245855963

結果


スクリプト晒しておく
ほぼ流用だというのが丸わかりだけど落書きみたいなもんだし

イベントリストファイルリストにrainfっていうスプライトを置くだけで使える
イベントリストファイルリストに追加せずに作ろうとして、duplicateMovieClip()とかcreateEmptyMovieClip(); とか試したけど位置が悪いのか、そのままじゃ使えなかった
全部スクリプトでやろうとすると、降らせたいものを変えるときが面倒になりそう

var offset = 50; //rainが横に動く分ずらす
var drops = 150; //雨の数
var windSpeed= 3; //X方向の移動量
var fallSpeed = 28; //Y方向の移動量
var rainArray = new Array();

//this.createEmptyMovieClip("raina",1);

//雨配置
for (var i = 0; i < drops; i++) {


rain_fall=this.attachMovie("rainf","rain"+i,i);
//rain_fall=raina.duplicateMovieClip("rain"+i,i);
//雨をasで表示
// --------------------------
rain_fall.colors = [0xffffff, 0xffffff];
rain_fall.alphas = [5, 11];
rain_fall.ratios = [0x00, 0xFF];
rain_fall.matrix = {
matrixType: "box", // マトリックスの種類
x: -37.302920, // x座標
y: 60.697080, // y座標
w: 144.605839, // 幅
h: 144.605839, // 高さ
r: 108 * Math.PI / 180 // 角度
};
rain_fall.beginGradientFill ("linear", rain_fall.colors, rain_fall.alphas, rain_fall.ratios, rain_fall.matrix);
rain_fall.moveTo(65, 18);
rain_fall.lineTo(47, 80);
rain_fall.curveTo(29, 142, 24, 154);
rain_fall.curveTo(20, 166, 22, 153);
rain_fall.curveTo(25, 141, 45, 79);
rain_fall.lineTo(45, 79);
rain_fall.lineTo(65, 18);
rain_fall.endFill ();




//雨の初期位置
rain_fall._x = Math.random() * (Stage.width + offset);
rain_fall._y = Math.random() * Stage.height *-1;
//雨の大きさ設定
rain._xscale = Math.round(((Math.random() * 0.8) + 0.3) * 10) / 10;
rain._yscale=rain._xscale;
rainArray.push(rain_fall); //rainを配列に格納

}
//雨の動き

onEnterFrame=function(){
//function dropRain(evt){
for (var i = 0; i < drops; i++) {
rainArray[i]._x -= windSpeed;
rainArray[i]._y += fallSpeed;
//雨がステージより下にいった後の処理
if (rainArray[i]._y > Stage.height) {
rainArray[i]._x = Math.random() * (Stage.width + offset*2);
rainArray[i]._y =Math.random() * Stage.height*-1;
windSpeed = Math.round(Math.random() *5);

}
};
};


/*いろいろ間違っていたので修正版*/




//初期設定
var offset = 50; //初期位置
var count = 150; //雨の数
var xSpeed= 0; //X方向の移動量
var ySpeed = 58; //Y方向の移動量
var effectArray = new Array();

//this.createEmptyMovieClip("eff",1);

//雨配置
for (var i = 0; i < count; i++) {


effect=this.attachMovie("eff","eff"+i,i);
//effect=eff.duplicateMovieClip("eff"+i,i);
//雨をasで表示
// --------------------------
effect.colors = [0xffffff, 0xffffff];
effect.alphas = [25, 31];
effect.ratios = [0x00, 0xFF];
effect.matrix = {
matrixType: "box", // マトリックスの種類
x: -37.302920, // x座標
y: 60.697080, // y座標
w: 144.605839, // 幅
h: 144.605839, // 高さ
r: 108 * Math.PI / 180 // 角度
};
effect.beginGradientFill ("linear", effect.colors, effect.alphas, effect.ratios, effect.matrix);
effect.moveTo(65, 18);
effect.lineTo(47, 80);
effect.curveTo(29, 142, 24, 154);
effect.curveTo(20, 166, 22, 153);
effect.curveTo(25, 141, 45, 79);
effect.lineTo(45, 79);
effect.lineTo(65, 18);
effect.endFill ();




//雨の初期位置
effect._x = Math.random() * (Stage.width + offset);
effect._y = Math.random() * Stage.height *-1;
//雨の大きさ設定

effect._xscale = Math.round(((Math.random() * 0.8) + 0.3) * 10) +10;
effect._yscale = effect._xscale+30;

effectArray.push(effect); //rainを配列に格納

trace(effect._xscale);


}


//雨の動き

onEnterFrame=function(){

for (var i = 0; i < count; i++) {
effectArray[i]._x -= xSpeed;
effectArray[i]._y += ySpeed;
//雨がステージより下にいった後の処理
if (effectArray[i]._y > Stage.height) {
effectArray[i]._x = Math.random() * (Stage.width + offset*2);
effectArray[i]._y =Math.random() * Stage.height*-1;


}
};
};




/*ここまで*/

変数名とかもいじりまわした
effってスプライトを置けば使えます

comment(0)











BLコンテスト・グランプリ作品
「見えない臓器の名前は」
- ナノ -