Fire Monkey 3D で作成した 3D Shape をアニメーションで回転させるには?

解決


Patlice2011  2012-09-20 21:29:32  No: 42969  IP: 192.*.*.*

Fire Monkey 3D で、Form を作成し、ツールパレットから
3D Shapes の TRoundCube を Form に貼り付けます。
Form上にマウスを置いてマウスの左ボタンをシングルクリックしたら、
TRoundCube が、Y軸を軸にして90度回転させる方法は、
2012/09/17(最終更新日)で教わりました。
回転角度が90度ですと動いたか動いていないか分かりにくく
動いていないようにも見えます。
(45度だと動いている様子が分かります)
そこで、マウスの左ボタンをシングルクリックしたら TRoundCube が、
Y軸を回転軸として90度回転させ、アニメーションで動いている様子が
分かるようにする方法はありますでしょうか。

詳しい方がいらっしゃいましたらご指導の程よろしくお願い致します。

使用環境
WIN7 Pro SP1 64bit
Delphi XE2 Pro Update4 Hotfix1

編集 削除
DEKO  2012-09-20 22:40:44  No: 42970  IP: 192.*.*.*

こんにちは。

以前にご紹介したダ○ボーとか右手座標系のサンプルは
アニメーションで回転するハズですが?

[FireMonkey で作る地球儀 〜 多分、4 分以内に 〜]
http://www.youtube.com/watch?v=elZt84EzygY

編集 削除
patlice2011  2012-09-21 23:25:59  No: 42971  IP: 192.*.*.*

FireMonkey で作る地球儀を自分で1から新規作成してみます。

編集 削除
patlice2011  2012-09-22 09:53:15  No: 42972  IP: 192.*.*.*

「FireMonkey で作る地球儀」を自分でなぞって再現させました。
あとは自分でやってみます。
ありがとうございました。

編集 削除
Patlice2011  2012-09-22 22:20:57  No: 42973  IP: 192.*.*.*

たびたびすいません。
自分で作成してみたのですが、マウスの左ボタンをクリックしなくても
Y軸を軸に回転してしまいます。
マウスの左ボタンをクリックしたら、アニメーションでY軸を軸に回転
させるにはどのようにコードを書けばよろしいでしょうか。
ご指導の程よろしくお願い致します。

使用環境
WIN7 Pro 64bit SP1
Delphi XE2 Pro Update4 Hotfix1

編集 削除
DEKO  2012-09-23 00:38:05  No: 42974  IP: 192.*.*.*

TRoundCube の子コントロールになっている FloatAnimation の Enabled を設計時に False にしておき、
マウスクリックのイベントハンドラ内で Enabled を True にしてやればいいです。

その際、Loop プロパティは False にしておかないと延々と回転してしまいます。

編集 削除
DEKO  2012-09-23 11:11:16  No: 42975  IP: 192.*.*.*

失礼。

誤: マウスクリックのイベントハンドラ内で Enabled を True に
正: マウスクリックのイベントハンドラ内で TFloatAnimation.Start;

です。

編集 削除
DEKO  2012-09-23 11:19:27  No: 42976  IP: 192.*.*.*

[アニメーション効果って? (Delphi FireMonkey Tips)]
http://ht-deko.minim.ne.jp/techf005.html

[[Animations] カテゴリ - FireMonkey で使えるコンポーネントは? (Delphi FireMonkey Tips)]
http://ht-deko.minim.ne.jp/techf001_animations.html

編集 削除
patlice2011  2012-09-23 17:05:58  No: 42977  IP: 192.*.*.*

TFloatAnimation.Start;
を下記のように追加したのですが、
TFloatAnimation.Start;  でエラーになります。

if (Button = TMouseButton.mbLeft) then Begin
    TFloatAnimation.Start;
end

お手数かけますがご指導の程よろしくお願い致します。

編集 削除
DEKO  2012-09-23 21:39:54  No: 42978  IP: 192.*.*.*

TFloatAnimation というのは "型" です。

"TRoundCube の子コントロールになっている FloatAnimation" には、
"名前" が付いています。FloatAnimation1 とか FloatAnimation2 とか。

[構造] ペインで名前を確認して下さい。

編集 削除
DEKO  2012-09-23 21:49:35  No: 42979  IP: 192.*.*.*

以前にご紹介したダ○ボーとか右手座標系のサンプルの
ソースコード中にも Start() メソッドは使われていますよ。

ソースコードは読まれましたか?

編集 削除
patlice2011  2012-09-23 22:01:29  No: 42980  IP: 192.*.*.*

[ダ○ボー サンプルソースコード]は、コンパイルエラーが出るので
[右手座標系 サンプルソースコード]を新規作成でゼロからなぞってみます。
ありがとうございました。

編集 削除
DEKO  2012-09-23 23:25:15  No: 42981  IP: 192.*.*.*

> コンパイルエラーが出るので
coin.res か...。
使われていないリソースファイルが混入していたようですね。
アーカイブを更新しておきました。

繰り返しになりますが...
作成された TFloatAnimation の名前は [構造] ペインで確認できます。

[構造] ペインはこんな奴です。
http://ht-deko.minim.ne.jp/fm_pic/techf002_01.png

TFloatAnimation は "patlice2011 さんが作られたもの" ですから、
私には名前がわかりませんので、具体的なコードが書けないのです。

[表示 | 構造 (Shift+Alt+F11)] で、構造ペインを出し、
TRoundCube (これまた名前がわかりませんが) の下にぶら下がっている、
TFloatAnimation の名前を見つけて、

if (Button = TMouseButton.mbLeft) then Begin
    その名前.Start;
end

とするだけの話なのですよ。

編集 削除
patlice2011  2012-09-25 09:52:57  No: 42982  IP: 192.*.*.*

たびたびすいません。
[右手座標系 サンプルソースコード]を解析しているのですが、
[右手座標系 サンプルソースコード]の構造ペインを見ると
frmMain となっています。
FireMonkey HD、FireMonkey 3D で新規作成しても構造ペインは、
Form1 になっています。
どうやれば、frmMain になるのでしょうか。
お手数かけますがご指導の程よろしくお願い致します。

編集 削除
patlice2011  2012-09-25 10:32:08  No: 42983  IP: 192.*.*.*

[右手座標系 サンプルソースコード]のURLを追記します。
http://ht-deko.minim.ne.jp/software/righthandrule.zip

編集 削除
DEKO  2012-09-25 11:08:19  No: 42984  IP: 192.*.*.*

> FireMonkey HD、FireMonkey 3D で新規作成しても構造ペインは、
> Form1 になっています。
> どうやれば、frmMain になるのでしょうか。

そこからですか... (^^;A

フォームを作成した場合、デフォルトでは Form1, Form2, Form3...のように自動的に名前が振られます。
この名前はフォーム (TForm / TForm3D) の Name プロパティで変更できますので、
[オブジェクトインスペクタ] で "Name" プロパティを探してそこを変更して下さい。

コントロールも同様で、貼る度に Button1, Button2, Button3...、
Edit1, Edit2, Edit3... のようにデフォルトの名前が振られていきます。

前の投稿で 「あなたが付けた名前は私にはわからない」と書いたのはこういう事です。

[[オブジェクト インスペクタ](IDE チュートリアル)(DocWiki)]
http://docwiki.embarcadero.com/RADStudio/ja/%EF%BC%BB%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%9A%E3%82%AF%E3%82%BF%EF%BC%BD%EF%BC%88IDE_%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%89

# だんだん元質問から離れていってる気が。

編集 削除
Patlice2011  2012-09-25 11:25:52  No: 42985  IP: 192.*.*.*

失礼しました。
オブジェクト インスペクタで、Name を変えるだけだったのですね。
ありがとうございました。

編集 削除
Patlice2011  2012-09-26 21:25:52  No: 42986  IP: 192.*.*.*

>TRoundCube (これまた名前がわかりませんが) の下にぶら下がっている、
>TFloatAnimation の名前を見つけて、
>if (Button = TMouseButton.mbLeft) then Begin
>    その名前.Start;
>end
>とするだけの話なのですよ。

名前が誤っていました。
すいませんでした。
名前を合わせたところ意図する動作をしました。
DEKO さんありがとうございました。

編集 削除