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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     _rotationでの誤差?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
toudoury
Åê¹ÆNo.16458
投稿日時: 2005-4-4 8:15
新米
居住地:
投稿: 2
使用環境:
_rotationでの誤差?
携帯のFlashLiteが面白そうなので
FLASHとActionScriptの勉強をはじめました。
開発環境はMX2000proのトライアルです。

手始めにアナログ時計でも作ってみようと思い
時間を取得し
_rotationで秒針、長針、短針を回転させる術までは
なんとかわかったのですが、
_rotationで針を回転させていくうちに
針の画像(ムービークリップ?)が段々小さくなっていきます。
setProperty("byousin",_rotation,360*sec/60);
として針を回転させています。
他に画像を操作するsetPropertyや
他のActionScript等は組み込んでません。
_rotationを繰り返すうちに段々小さくなってしまうんだと
解釈しましたが・・・
どうにかできないでしょうか?
Komatsu
Åê¹ÆNo.16459
投稿日時: 2005-4-4 10:32
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
Re: _rotationでの誤差?
こんにちは、toudouryさん。

FlashやOSのバージョンは、ご自身のプロフィールとして登録しておけば便利ですよ。

引用:
toudouryさんは書きました:
_rotationで針を回転させていくうちに
針の画像(ムービークリップ?)が段々小さくなっていきます。
setProperty("byousin",_rotation,360*sec/60);
として針を回転させています。


現象を確認するために、似た構成で針を回転させるものを作成してみました。
私が作成したものでは、回転が進むほどムービークリップ(以下MCとします)の長さが伸びてしまいました。


以下私が実験した内容です。

構成:ステージ上に、秒針のMCを配置。秒針のMCの基準点は針の根元としています。インスタンス名「byousin」。

設定:Flash Lite1.1書き出し

//メインタイムライン1フレーム目
sec = 0;

//メインタイムライン2フレーム目
sec++;
setProperty("byousin",_rotation,360*sec/60);
trace(_root.byousin._yscale);

//メインタイムライン3フレーム目
gotoAndPlay(2);


trace文で「_yscale」をとってみると、確かに長さが変わっていきます。


簡略化した書き方ではどうかと思い、以下の2つの角度を変更するコードも試しましたが、結果は同じでした。

setProperty("byousin",_rotation,6*sec);
byousin._rotation=6*sec;



DocomoのHTMLシュミレータIIでも同じ現象がおきました。
Flash Player4でも同じ現象がおきました。
Flash Player5?7ではおきていません。

Flash Player4ならびに、Flash Lite1.0?1.1においての「_rotation」の実装が異なるんですかねえ?
もしくはFlash Player4用に演算処理をエミュレートしている誤差なんでしょうか?
なんにせよ、これ困った問題ですね。


改善点ではなく代案なのですが、条件文を使用して、取得した時間が0の時に「_yscale」を100(%)として設定しなおすことをしてみてはいかがでしょうか?
Fumio
Åê¹ÆNo.16460
投稿日時: 2005-4-4 10:44
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
Re: _rotationでの誤差?
つまり、[Flash Lite 1.0]または[Flash Lite 1.1]でパブリッシュされているということですね。[パブリッシュ設定]は大切なポイントですので、できるだけわかりやすく明記しましょう。
引用:
toudouryさんは書きました:
携帯のFlashLiteが面白そうなので
FLASHとActionScriptの勉強をはじめました。
開発環境はMX2000proのトライアルです。

最初、問題を再現することはできませんでした。_rotationプロパティに、小数以下の値を設定すると発生するようですね。

Flash LiteがベースとするFlash 4では、90度単位でないと縮むという問題があったようです。Flash Playerの演算処理方法にもとづく現象のようですので、半ば仕様と考えられました。Flash Lite(私が試したのは1.1)では1度単位なら問題ありませんでしたので、それよりはましでしょう。

角度を整数に丸めるか、以下のように_xscaleおよび_yscaleを100に戻せばよいでしょう。
引用:
_rotationで針を回転させていくうちに
針の画像(ムービークリップ?)が段々小さくなっていきます。
setProperty("byousin",_rotation,360*sec/60);
setProperty("byousin", _xscale, 100);
setProperty("byousin", _yscale, 100);

として針を回転させています。


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

Fumio
Åê¹ÆNo.16461
投稿日時: 2005-4-4 10:51
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
Re: _rotationでの誤差?
ほぼ同じ内容で、テストしていました。trace()すると、確かに伸縮しています(私も伸びした)。失礼しました。 端数の方が、目に見える変化が出やすいということですね。
引用:
野中文雄は書きました:
最初、問題を再現することはできませんでした。_rotationプロパティに、小数以下の値を設定すると発生するようですね。

引用:
コマツさんは書きました:
現象を確認するために、似た構成で針を回転させるものを作成してみました。
私が作成したものでは、回転が進むほどムービークリップ(以下MCとします)の長さが伸びてしまいました。


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

toudoury
Åê¹ÆNo.16464
投稿日時: 2005-4-4 11:43
新米
居住地:
投稿: 2
使用環境:
Re: _rotationでの誤差?
コマツさん、野中文雄さん返信ありがとうございます!
やっぱりバグなのか、誤差が出てしまうんですね…。
ご提案の通り、
setProperty("byousin", _xscale, 100);setProperty("byousin", _yscale, 100);

で毎フレーム大きさを直してみようと思います。

パブリッシュ設定は違いはよくわかってないんですが
auなのでFlashLite1.1に設定しています。

プロフィールなんていうものがあったんですね
活用してみますね!

ありがとうございました!
Komatsu
Åê¹ÆNo.16466
投稿日時: 2005-4-4 12:43
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
Re: _rotationでの誤差?
野中さん>>
「表示の速さ」を優先した結果での「仕様」なんですね。
勉強になりました。
自分で試したサンプルは最初は長くなって、放置しておいてしばらくしてみると、針のMCはかなり縮んでました。
なので、これからFlash Lite1.1で時計作るときには、scaleのプロパティを設定することにしようとおもいました。


ユタさん>>
パブリッシュの設定はFlash Lite1.1で問題ないですよ?。
あと、プロパティの設定については、(thisは使えませんけど)ドットシンタックスでもかけますので、

byousin._xscale=100;
byousin._yscale=100;

みたいな書き方でもOKですよ。
Fla4man
Åê¹ÆNo.16474
投稿日時: 2005-4-4 14:12
職人
居住地: かまくら
投稿: 517
使用環境:
Re: _rotationでの誤差?
PC用プレーヤー(7)でも「変な現象」はでます。
バカフラに投稿したまだ未完成の3D富士山がそうです。

ファイルバージョンヘッダーが「4」、
rotationの値が小数

だと富士山が段々Hな形になってしまったのでびっくらこきました。

Flashlite1.1は実質バージョン5なので出ないのだと思いますが
実際プレーヤー自体がFlashlite1.1に対応していないと
ファイルで工夫しても現象は出ると思います。
Flashlite1で暫定的に対応するには
とりあえず回転の値を小数でキープしつつも
値を整数化(int)してからいれれば
少なくともPC版プレーヤー及びFlash4プレーヤーでも
大丈夫だったのでよいのでは無いかと思います。

PCの場合90度単位でなくても(1度単位)とりあえず一晩動かして
誤差はでませんでした。


----------------
通常のハンドル名:×○○× ねた回収モードに突入 現在1/100

SeeDa
Åê¹ÆNo.16477
投稿日時: 2005-4-4 14:49
職人
居住地: Nagoya
投稿: 221
使用環境:
Re: _rotationでの誤差?
コマツさん、携帯強いですね?。
ドットシンタックスが使えるとは知りませんでした
一つのMCでしか試していませんが、3種類の記述方法でファイルサイズを比べたらドットシンタックスがトップでした。
kakudo = 45;
//
hoge_mc._rotation = kakudo;			// 170Byte
//
setProperty("hoge_mc", _rotation, kakudo);		// 171Byte
setProperty("hoge_mc", _rotation, /:kakudo);	// 173Byte
//
tellTarget ("hoge_mc"){
	_rotation = /:kakudo;			// 180Byte
}
tellTarget ("hoge_mc"){
	_rotation = ../:kakudo;		// 182Byte
}

これはっ!と、いろんなコンテンツで試してみたら、単にファイル容量だけ見た場合は『時と場合によりけり…』が結論みたいです
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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