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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     Tweenクラスの挙動について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
NOB-Q
Åê¹ÆNo.39532
投稿日時: 2008-7-14 12:20
新米
居住地:
投稿: 5
使用環境:
WinXP Pro(SP3) Flash CS3
Tweenクラスの挙動について
初めて投稿させて頂きます。

ムービークリップの移動をTweenクラスで行っています。

Tweenクラスで回転した後に、Tweenクラスで横幅を変更すると
縦幅まで変更されているように見えます。

環境は
Windows XP Professional SP3
Flash CS3 Professional
Flash Player 9,0,124,0
ActionScript 2.0
で確認しています。

// ライブラリに縦横100pxの四角をリンケージ名[box]で用意
// 1フレーム目にフレームアクションで記述

import mx.transitions.Tween;
import mx.transitions.easing.*;

var box_mc:MovieClip = attachMovie("box", "box_mc", 1);
box_mc._x = 200;
box_mc._y = 200;
new Tween(box_mc, "_rotation", easing.None, 0, 30, 40, false);

var cnt:Number = 0;
this.onEnterFrame = function () {
	if (cnt == 50) {
		new Tween(box_mc, "_width", easing.None, 0, 200, 40, false);
	}
	cnt++;
}


回転を180度や360度にすると正常?に動いているように見えます。
また、拡大してからの回転は正常?に動いているように見えます。

このような動きはTweenクラスとして正しいのでしょうか?

どなたかご存知の方がいましたら、ご回答お願いします。
ひろゆき
Åê¹ÆNo.39533
投稿日時: 2008-7-14 12:42
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Tweenクラスの挙動について
Tweenクラスは全く無関係ですね。

ムービークリップの「横幅」(_width)が何を指しているのか、
確認することが先決でしょう。

_root 上にムービークリップ(インスタンス名: mc)を配置。

_root 第1フレームに
trace(mc._width);
mc._rotation = 45;
trace(mc._width);

trace(mc._yscale);
と記述。

[追記]
easing.None ではなく、None.easeNone ではないかと思いますが。


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

野中文雄
Åê¹ÆNo.39534
投稿日時: 2008-7-14 12:55
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Tweenクラスの挙動について
ひろゆきさんのいわれるとおり、Tweenクラスの問題ではありません。[プロパティ]インスペクタで矩形のMovieClipインスタンスを回転すれば、幅と高さは変わるはずです。

この動作は、予想外で不当でしょうか。しかし、この仕様のおかげで、正方形を菱形に歪めることができるのです。
引用:
NOB-Qさんは書きました:
Tweenクラスで回転した後に、Tweenクラスで横幅を変更すると
縦幅まで変更されているように見えます。


----------------
 

NOB-Q
Åê¹ÆNo.39535
投稿日時: 2008-7-14 13:36
新米
居住地:
投稿: 5
使用環境:
WinXP Pro(SP3) Flash CS3
Re: Tweenクラスの挙動について
ひろゆきさん、野中さんご回答ありがとうございます。

_widthの値を確認しました。

回転した後の_widthはローカル座標基準ではなく、
グローバル座標基準での値になっていました。

私的には回転した後でも_widthの値は
ローカル座標での値だと思っていました。

先ほど提示しましたスクリプトに新たにbox_mc2を追加したスクリプトです。

import mx.transitions.Tween;
import mx.transitions.easing.*;

var box_mc:MovieClip = attachMovie("box", "box_mc", 1);
box_mc._x = 400;
box_mc._y = 200;
new Tween(box_mc, "_rotation", easing.None, 0, 30, 40, false);

// add start
var box_mc2:MovieClip = attachMovie("box", "box_mc2", 2);
box_mc2._x = 200;
box_mc2._y = 200;
box_mc2._rotation = 30;
// add end

var cnt:Number = 0;
this.onEnterFrame = function () {
	if (cnt == 50) {
		new Tween(box_mc, "_width", easing.None, 0, 200, 40, false);
		// add start
		box_mc2._width = 200;
		// add end
	}
	cnt++;
}


私的にはbox_mc2のようにTweenクラスが
振舞ってくれることを期待していました。

Tweenクラスでスコープ?を変更させることは可能なのでしょうか?
ひろゆき
Åê¹ÆNo.39536
投稿日時: 2008-7-14 13:40
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Tweenクラスの挙動について
_yscale を使えばよいのでは?
# 値を算出する必要があるとは思いますが。

easing.None ではなく、None.easeNone ではないかと思いますが。

import mx.transitions.Tween;
import mx.transitions.easing.*;

this.attachMovie("box", "box_mc", 1);
box_mc._x = 200;
box_mc._y = 200;
var boxWidth:Number = box_mc._width;

new Tween(box_mc, "_rotation", None.easeNone, 0, 30, 40, false);

var cnt:Number = 0;
this.onEnterFrame = function():Void {
	if (cnt == 50) {
		delete this.onEnterFrame;
		new Tween(box_mc, "_yscale", None.easeNone, 100, 200/boxWidth*100, 40, false);
	}
	cnt++;
};


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

野中文雄
Åê¹ÆNo.39538
投稿日時: 2008-7-14 14:04
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Tweenクラスの挙動について
こういうことですか?仕様が意にそわないことに悩むより、仕様に則った方法を探る方が建設的に思えます。
引用:
NOB-Qさんは書きました:
import mx.transitions.Tween;
import mx.transitions.easing.*;
var _mc:MovieClip = 
createEmptyMovieClip("holder_mc", getNextHighestDepth());
// var box_mc:MovieClip = attachMovie("box", "box_mc", 1);
var box_mc:MovieClip = _mc.attachMovie("box", "box_mc", 1);
// box_mc._x = 400;
_mc._x = 400;
// box_mc._y = 200;
_mc._y = 200;
// new Tween(box_mc, "_rotation", easing.None, 0, 30, 40, false);
new Tween(_mc, "_rotation", easing.None, 0, 30, 40, false);
// add start
var box_mc2:MovieClip = attachMovie("box", "box_mc2", 2);
box_mc2._x = 200;
box_mc2._y = 200;
box_mc2._rotation = 30;
// add end

var cnt:Number = 0;
this.onEnterFrame = function() {
	if (cnt == 50) {
		new Tween(box_mc, "_width", easing.None, 0, 200, 40, false);
		// add start
		box_mc2._width = 200;
		// add end
	}
	cnt++;
};

私的にはbox_mc2のようにTweenクラスが
振舞ってくれることを期待していました。


----------------
 

NOB-Q
Åê¹ÆNo.39540
投稿日時: 2008-7-14 14:07
新米
居住地:
投稿: 5
使用環境:
WinXP Pro(SP3) Flash CS3
Re: Tweenクラスの挙動について
ひろゆきさん
ご回答ありがとうございます。

scaleを使えば、想像通りの動きにすることが出来ました。

new Tween(box_mc, "_xscale", None.easeNone, box_mc._xscale, (200 / box_mc._width) * box_mc._xscale, 40, false);


ありがとうございました!

※None.easeNoneの間違いでした。
最初の返信にもありましたね・・・
ご指摘ありがとうございます。
NOB-Q
Åê¹ÆNo.39541
投稿日時: 2008-7-14 14:27
新米
居住地:
投稿: 5
使用環境:
WinXP Pro(SP3) Flash CS3
Re: Tweenクラスの挙動について
野中さん
ご回答ありがとうございます。

こちらの意図通りの動きになっています。

回転とサイズ変更を別ムービークリップで
行う方法は全く思いつきませんでした・・・。

Tweenクラスの挙動について、
キチンとした認識が出来ました。

ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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