目玉キョロキョロブログパーツ
ある制作会社からの依頼でブログパーツを制作した。
AS2書き出しのプレーヤーv8に設定されたプロジェクトで、Function レイヤーの1フレーム目に次のような関数群を使って待機中に目がキョロキョロする挙動を表現している。また、Actions レイヤーフレーム1に書いてある変数は省略している。最終的には playSnakeEyes 関数を一定時に処理を行うようにして完成する。
// Make eyes snake. function playSnakeEyes() { if (movMode == false) { if (randRange(0, 9) % 3 == 0 || randRange(0, 9) % 3 == 1) {// SNAKE var randX:Number = randRange(0, Stage.width); var randY:Number = randRange(0, Stage.height); var pos_right:Object = getPos(rightEye, {x:randX, y:randY}); var pos_left:Object = getPos(leftEye, {x:randX, y:randY}); } else if (randRange(0, 9) % 3 == 2 && snakeCount % 3 == 2) {// LONPARI var pos_right:Object = getPos(rightEye, {x:(rightEye.x - 10), y:rightEye.y}); var pos_left:Object = getPos(leftEye, {x:(leftEye.x + 10), y:leftEye.y}); } setEyes({right:pos_right, left:pos_left}); } snakeCount++; } // Generate randomized number. function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min; return randomNum; } // Set positions of instance for eyes. function setEyes(pos:Object):Void { var movRate:Number = randRange(1, 9) / 10; rightEye_mc.onEnterFrame = function():Void { var xRate:Number = (pos.right.x - this._x) * movRate; var yRate:Number = (pos.right.y - this._y) * movRate; this._x += xRate; this._y += yRate; if (Math.abs(xRate) < 0.1 && Math.abs(yRate) < 0.1) { this._x = pos.right.x; this._y = pos.right.y; delete this.onEnterFrame; } }; leftEye_mc.onEnterFrame = function():Void { var xRate:Number = (pos.left.x - this._x) * movRate; var yRate:Number = (pos.left.y - this._y) * movRate; this._x += xRate; this._y += yRate; if (Math.abs(xRate) < 0.1 && Math.abs(yRate) < 0.1) { this._x = pos.left.x; this._y = pos.left.y; delete this.onEnterFrame; } }; } // Get positions of instance for eyes from position of mouse cursor. function getPos(eye:Object, pts:Object):Object { var xdiff:Number = pts.x - eye.x; var ydiff:Number = pts.y - eye.y; var radius:Number = Math.min(Math.max(Math.sqrt(xdiff * xdiff + ydiff * ydiff) / distanceFromEye, 0), MAXeyeMovement); var angle:Number = Math.atan2(ydiff, xdiff); return {x:(Math.cos(angle) * radius * ovality + eye.x), y:(Math.sin(angle) * radius + eye.y)}; }
AS3用にクラス化するかどうかは次の案件に委ねられている。
// 誰かお願いします。:-)
コメントは受け付けていません。
フリーランスのウェブとiOSアプリ開発者で一児の父親。JavaScript, ActionScript, AppleScript, PHP, SQL, ObjCの読書実行試験運用管理を生業とし、BIND, SMTP, APACHE を MacBSD, FreeBSD, Mac OS X で使い、エディタは Vi, mi, Kod と遷移して現在は Smultron、そして Coda と Xcode の IDE を重用しています。暇を見付けてはバックギャモンゲームをオンラインで楽しんでいます。