トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     Flashで可能なのでしょうか?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
monkeygirl
Åê¹ÆNo.24062
投稿日時: 2006-2-28 22:38
新米
居住地:
投稿: 19
使用環境:
Win2000
Flash MX2004pro
Flashで可能なのでしょうか?
お願いします。

http://www.o-kami.jp/のサイトの
「ちょっと一息」にある「The一閃」というゲームについてですが
任意で線を引いてその軌跡で敵を好きなように切れます。
これはFlashで可能なのでしょうか?
可能ならどのように作っているのか
教えていただけませんか?
よろしくお願いします。
anko
Åê¹ÆNo.24068
投稿日時: 2006-3-1 12:13
半人前
居住地:
投稿: 38
使用環境:
MAC_G4
FLASH5,FLASH MX2004
Re: Flashで可能なのでしょうか?
ただの推測ですが、
このターゲットになる絵は最初から2つのパーツで出来ていて、
マウスを放すと同時に、瞬時にマスクの角度と位置を計算して、
(最近はマスクもスクリプトで操作出来ると聞きます)
るのでは。この時点では見た目一つの絵。

次はその2つのパーツが次第に離れていく動き。これはトゥィーンでも出来そうです。

いやぁ、作れと言われても困りますがね(汗
ひろゆき
Åê¹ÆNo.24072
投稿日時: 2006-3-1 14:22
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Flashで可能なのでしょうか?
こんな感じでしょうか。

サンプル

基本的な作りは、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ファイル公開しますけど。


----------------
質問する際は、回答者に具体的な情報を与えてください。

monkeygirl
Åê¹ÆNo.24291
投稿日時: 2006-3-11 21:02
新米
居住地:
投稿: 19
使用環境:
Win2000
Flash MX2004pro
ありがとうございます。
お返事ありがとうございます。
御二方のアドバイスのおかげで
どうにか仕組みを作ることができました。
あとは絵を描くだけです。
お世話になりました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops