こんな感じでしょうか。
「
サンプル」
基本的な作りは、ankoさんが書かれた通りで。
引用:
このターゲットになる絵は最初から2つのパーツで出来ていて、
マウスを放すと同時に、瞬時にマスクの角度と位置を計算して、
(最近はマスクもスクリプトで操作出来ると聞きます)
るのでは。この時点では見た目一つの絵。
_root
|_ frog
|_ mask1 (マスクレイヤー)
|_ base1
|_ mask2 (マスクレイヤー)
|_ base2
#base1, base2 は、同じシンボルに別のインスタンス名。
問題は、線を引く部分と位置計算でしょうか。
lineTo にするのか、他の方法を採るのか。
もっとシンプルにスクリプトは書けそうな気がしますが。
ざっと動けばいいかなということで...。
#妙なところがあったら、指摘してください。
#フラグの使い方、切断判定は適当です。
#あと、かえる君が複数になる場合は考慮していません。
var frogPosX:Number;
var frogPosY:Number;
var startPosX:Number;
var startPosY:Number;
var endPosX:Number;
var endPosY:Number;
var lineDrawing:Boolean = false;
var frogCutting:Boolean = false;
setFrog();
function setFrog():Void {
clearInterval(setID);
frog._visible = true;
frogCutting = false;
frogPosX = 100 + Math.floor(Math.random()*100);
frogPosY = 180;
this.attachMovie("frog", "frog", 1, {_x: frogPosX, _y: frogPosY});
frog.mask1._y = -60;
frog.mask2._y = -60;
frog.base1._y = 0;
frog.base2._y = 0;
}
function resetFrog():Void {
clearInterval(resetID);
frog._visible = false;
setID = setInterval(this, "setFrog", 500);
}
this.createEmptyMovieClip("line", 2);
this.onMouseDown = function():Void {
if (!lineDrawing && !frogCutting) {
line.clear();
line.endPoint.removeMovieClip();
lineDrawing = true;
startPosX = _xmouse;
startPosY = _ymouse;
line.attachMovie("point", "startPoint", 1, {_x: startPosX, _y: startPosY});
}
};
this.onMouseMove = function():Void {
if (lineDrawing && !frogCutting) {
line.clear();
line.lineStyle(4, 0xFF0000, 100);
endPosX = _xmouse;
endPosY = _ymouse;
line.attachMovie("point", "endPoint", 2, {_x: endPosX, _y: endPosY});
line.moveTo(startPosX, startPosY);
line.lineTo(endPosX, endPosY);
}
};
this.onMouseUp = function():Void {
if (lineDrawing && !frogCutting) {
var startCheck:Number = startPosX - frogPosX;
var endCheck:Number = endPosX - frogPosX;
if (startCheck*endCheck < 0
&& Math.abs(startCheck) > 50 && Math.abs(endCheck) > 50) {
frogCutting = true;
cutID = setInterval(this, "cutFrog", 500);
} else {
outID = setInterval(this, "lineOut", 500);
}
lineDrawing = false;
}
};
function cutFrog():Void {
clearInterval(cutID);
line.clear();
line.startPoint.removeMovieClip();
line.endPoint.removeMovieClip();
var distanceX:Number = endPosX - startPosX;
var distanceY:Number = endPosY - startPosY;
var linePosX:Number = (startPosX + endPosX)/2;
var linePosY:Number = (startPosY + endPosY)/2;
var lightPosX:Number = frogPosX;
var lightPosY:Number = distanceY/distanceX*(frogPosX - startPosX) + startPosY;
frog.targetY = 15;
frog.moveY = 0;
frog.mask1._x = linePosX - frogPosX;
frog.mask2._x = linePosX - frogPosX;
frog.mask1.baseY = linePosY - frogPosY ;
frog.mask2.baseY = linePosY - frogPosY;
var angle = Math.atan2(distanceY, distanceX)*180/Math.PI;
if (Math.abs(angle) > 90) {
angle += 180;
}
frog.mask1._rotation = frog.mask2._rotation = angle;
this.attachMovie("light", "light", 3, {_x: lightPosX, _y: lightPosY});
light._rotation = angle;
frog.onEnterFrame = function() {
this.moveY += (this.targetY - this.moveY)*0.4;
this.mask1._y = this.mask1.baseY - this.moveY;
this.mask2._y = this.mask2.baseY + this.moveY;
this.base1._y = - this.moveY;
this.base2._y = this.moveY;
if (Math.abs(this.targetY - this.moveY) < 0.5) {
light.removeMovieClip();
if (!lineDrawing && frogCutting) {
resetID = setInterval(this._parent, "resetFrog", 1000);
}
delete this.onEnterFrame;
}
};
}
function lineOut():Void {
clearInterval(outID);
line.clear();
line.startPoint.removeMovieClip();
line.endPoint.removeMovieClip();
}
#一部修正。
#手を加える方がいらっしゃるのであれば、flaファイル公開しますけど。
----------------
質問する際は、回答者に具体的な情報を与えてください。