2009/12/29 (火) 10:59
前回作った回るメニューの動きで、マウスが乗っていいないときの動きがさみしかったので、前回作成したものをステージにマウスが乗っていないときにランダムで切り替わるようにしました。
処理自体はとくに難しいところはなく、flag1という変数を作って判定しています。ちなみにステージの外に出たかどうかの判定は MOUSE_LEAVEという便利なイベントがあったので、それを使っています。
stage.addEventListener(Event.MOUSE_LEAVE, onMLeave);
前に発生させた乱数と同じ数値を出さないようにする方法
ここでちょっとした問題が発生。乱数を使って次に表示する花を選んでいるわけだが、この乱数が前の数値を同じであると、その花が通常の2秒プラス2秒で4秒表示しているかのうように見える。このため、一瞬FLASHが停止したかのようにも見える。
これを改善するために前の数値で発生した乱数と、次に発生した乱数が一致しないようにスクリプトを少し修正した。↓がその一文。
var regNum:int=clickedNum;//ひとつ前の数を残しておくための変数
//前の数値と乱数でいま発生した数値が一致するかの判定はdo-whileの繰り返し分を使う。
//doは必ず一度処理する部分 whileは繰り返すか繰り返さないか判定を行う部分
//do{ 必ず一度処理する部分 }while(この条件式が正ならば繰り返し)
do {
clickedNum=int(Math.random()*12);//乱数を発生させ、値を代入する
} while ( clickedNum == regNum);//ひとつ前と同じか判定する
}
この同じ乱数を発生させない方法は他のところにも利用できそうだ。
回転する画像メニュー(花)ActionScript 3.0
コメント(0)続きを読む
2009/12/29 (火) 9:50
コメント(1)続きを読む
2009/11/11 (水) 21:52
マウスの位置によって回転速度が変わる万華鏡
マウス位置を変数として回転の計算をするスクリプト
//変数定義
var numBalls:int = 1000;
var vr:Number = 0.05;
var balls:Array = new Array();
//複数のボールの初期位置を決定、配列にそれぞれを格納
for(var i:int = 0; i<numBalls; i++){
var ball:Ball = new Ball(Math.random() * 10 +5, Math.random() * 0xffffff);
addChild(ball);
ball.x = Math.random() * stage.stageWidth * 2 - stage.stageWidth/2;
ball.y = Math.random() * stage.stageHeight * 2 - stage.stageHeight/2;
balls.push(ball);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
//フレーム毎のイベント
function onEnterFrame(e:Event):void {
var angle:Number = (mouseX - stage.stageWidth/2) * 0.0001;
var cos:Number = Math.cos(angle);
var sin:Number = Math.sin(angle);
//それぞれのボールの動きをひとつずつ計算
for(var i:int = 0; i<numBalls; i++){
var ball:Ball = balls[i];
var x1:Number = ball.x - stage.stageWidth/2;
var y1:Number = ball.y - stage.stageHeight/2;
var x2:Number = cos * x1 - sin * y1;//回転の公式
var y2:Number = cos * y1 + sin * x1;//回転の公式
ball.x = stage.stageWidth/2 + x2;
ball.y = stage.stageHeight/2 + y2;
}
}
ブラウザしばらく放置後におきるなぞの現象↓
コメント(0)続きを読む
関連する記事