Suzukaで中心点を2ヶ所にして回転させる方法

このQ&Aのポイント
  • suzukaで中心点(制御点)を2ヶ所にしてそれぞれ回転させる方法について
  • 四角の図形が一つあり、クレーンのような動きで回転させる方法
  • 制御点の変更方法に苦戦している
回答を見る
  • ベストアンサー

suzukaで中心点(制御点)を2ヶ所にしてそれぞれ回転させるには

suzukaで中心点(制御点)を2ヶ所にしてそれぞれ回転させるには 四角の図形が一つあり、クレーンのような動きで、右下側を中心とした右回転をさせると左側が上がります。その位置を保持したまま、左下側を中心とした左回転をさせ右側も上げます。 これで、図形は最初から少し浮き上がった状態になります。このような動きをさせるために以下のように行いましたが、制御点(中心点)の変更方法がわからず苦戦しています。 400×160ピクセルの四角.PDRをスプライト1(インスタンス名:sikaku)に入れ、制御点を右隅にし、タイムライン1とします。 タイムライン1をコピーしてタイムライン60にコピーしトゥイーンにチェックし角度を20度とするスプライトです。 メインにボタンを二つ作成します。上げる、下げるで 上げるには on (press) { sikaku.play(); } on (release) { sikaku.stop(); } これでボタンをクリックしたままで左側がスムーズに上がり、離すととまります。 下げるには on (press) { bodyF.prevFrame(); } を入れていますが、1クリックでタイムライン一つしか動かずもとの位置まで戻すのに何度もクリックが必要です。これを上げる動作と同じようにクリックしたままでスムーズに戻らないか。 最大の問題が、例えば、中心点が右隅にある状態で上げるボタンをクリックしてタイムラインが30、角度が10度上がった位置でとめ、次に別のボタンを作成しておき、左隅に中心点を移して上げる、下げるを行いたいのです。  スプライトを二つ用意してそれぞれ中心点を右隅、左隅にして同じタイムラインにおいてもうまく意図する動作となりませんし、どうすればいいでしょうか。

  • Flash
  • 回答数2
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> スプライトを二つ用意してそれぞれ中心点を右隅、 > 左隅にして同じタイムラインにおいても > うまく意図する動作となりませんし スプライト2個は正解だと思いますが構造に問題があるのではないでしょうか。 親スプライト内に子スプライトを用意して その子スプライト内にPDR画像を入れるのですよ。 PDRをシンボルリストに追加して PDRと同じ大きさの子になるスプライトをシンボルリストに追加し その子スプライト内のレイヤーにPDRを配置します。 次にPDRと同じ大きさの親となるスプライトをシンボルリストに追加し その親スプライト内のレイヤーに子スプライトを配置します。 子スプライトの中では PDRの制御点は左にして 右回転させます。 親スプライトの中では 子スプライトの制御点を右にして 左回転させます。 親内の子スプライトには例えば「ko」というインスタンス名を付けておきます。 親スプライトには例えば「oya」というインスタンス名を付けておきます。 ※下のイメージ図参照のこと↓。 メインのタイムラインにボタンを4つ配置し, 右回転にかかわる2つのボタンには次のように書きます。 ------------------ on (press) { oya.play(); } on (release) { oya.stop(); } ------------------ ------------------ on (press) { //親1フレームごとに実行するメソッドを定義 oya.ko.onEnterFrame = function(){ //親内を前のフレームに戻して停止 this.prevFrame(); }; } on (release) { //親に定義した1フレームごとに実行するメソッドを削除 delete oya.ko.onEnterFrame; } ------------------ 左回転にかかわる2つのボタンには次のように書きます。 ------------------ on (press) { oya.ko.play(); } on (release) { oya.ko.stop(); } ------------------ ------------------ on (press) { //子に1フレームごとに実行するメソッドを定義 oya.ko.onEnterFrame = function(){ //子内を前のフレームに戻して停止 this.prevFrame(); }; } on (release) { //子に定義した1フレームごとに実行するメソッドを削除 delete oya.ko.onEnterFrame; } ------------------ 「動きの足し算はスプライトの入れ子をする」です。  

kmaekawa
質問者

お礼

この質問には2つの疑問がありまして、それが二つとも見事に解決しました。まさにストライクです。 ご丁寧に画像もお付けいただいてたいへんありがとうございました。 「動きの足し算はスプライトの入れ子をする」ということがよくわかりました。私が行ったのは、スプライトを二つ用意して、タイムラインでどちらを前にするとか後にするとかで全く見当違いでおよそ1週間悩んでいまして・・・。  それと、プレビューのスクリプトですが、クリック時に連続して動作するともすごいことです。 今でもなぜそうなるのか全く理解できていません。 on (press) { //親1フレームごとに実行するメソッドを定義 oya.onEnterFrame = function(){ //親内を前のフレームに戻して停止 this.prevFrame(); }; } PRESS時にprevFrameだけでは、一つずつ戻り、Functionにすると、連続動作するのかなーって感じです。 on (release) { //親に定義した1フレームごとに実行するメソッドを削除 delete oya.onEnterFrame; }  下段の部分は上でprevframeした動作を消すということでしょうか。 大変ご丁寧に全ての回答をお示しいただき、本当にありがとうございました。  ここからまた応用させたり、Functionについて勉強したいと思います。 大変助かりました。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です すみません4つあるボタンのスクリプトのうち 2つ目が間違っていました。 次のように訂正します。 ---------------------------- on (press) { //親1フレームごとに実行するメソッドを定義 oya.onEnterFrame = function(){ //親内を前のフレームに戻して停止 this.prevFrame(); }; } on (release) { //親に定義した1フレームごとに実行するメソッドを削除 delete oya.onEnterFrame; } -------------------------  

関連するQ&A

  • 回転中の独楽の理想的中心(点)は回転していますか

    以前にも同じような質問をさせていただいたかもしれませんが、やはり釈然としない気持ちになっています。回っている独楽は確かに回っていますが、中心(点)というのは回転していてもわからないものなのか。現実の独楽は軸の先端で位置を変えている部分は中心ではないように思えるのですが、どのように考えたらよいのかご教示いただければ幸いです。

  • 回転移動のときの点

    中1です。 図形の回転移動で2つの図形がある点を中心に回転している場合、その点の位置はどうやって、だすのですか?簡単に見ただけでわかる場合と、2つの図形から離れたところにある場合があり、その場合がわかりません。教えてください。

  • 3D回転ツールの3D中心点(Z:)について

    WindowsでFlashCS5を使用しています。 どうぞ、よろしくお願いいたします。 3D回転ツールを使って、 ムービークリップを、 モーショントゥイーンを使い、 Y軸で回転するアニメーションを作りたいです。 モーショントゥイーンを使って、Y軸で回転させる際ですが、 ムービークリップのZ座標と、 3D中心点のZ座標を、異なる値に設定することは、 仕様上、可能でしょうか? ※惑星の周りをまわる衛星のアニメーションを作るようなイメージです。 ※モーショントゥイーンを使わず、  ムービークリップのZ座標と、3D中心点のZ座標が異なる状態で、  ムービークリップをY軸で回転させるだけなら、  出来ることは確認できました。  ですが、これではアニメーションが出来ません。 下記の手順で、モーショントゥイーンを使ったアニメーションを試してみましたが、 上手くいきませんでした。 1.ムービークリップを1つ作成。 2.ステージに配置。 3.ムービークリップを配置したタイムラインを、10フレームまで延ばす。 4.そのタイムラインに、モーショントゥイーンを設定する。 5.「変形」パネルの「3D中心点」の「Z:」に、100を入力する。 6.3D回転ツールで、Y軸で回転させる。 3D回転ツールで、表示された円をドラッグしている間は、 ムービークリップのZ座標と、3D中心点のZ座標が、異なる値に設定された状態で、 回って表示されています。 ※衛星のような軌道です。 しかし、ドラッグを終えると、 ムービークリップのZ座標と、3D中心点のZ座標が、同じ値の場合の結果と なってしまいます。 ※その場で回り続ける惑星のようです。 Q1. これは、モーショントゥイーンでは、3D中心点のZ:に値を設定することが 出来ない、という意味でしょうか? Q2. また、希望するアニメーションを実現する方法は、ありますでしょうか? ※ムービークリップに、衛星のような軌道を進ませるアニメーションです。 ご教示のほど、どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ドラッグ中の回転を止めたいのですが…

    ドラッグができて,なおかつクリックすると90度回転するようにするため,サンプル集を見てムービークリップ(sikaku_mc)に 次のようなアクションスクリプト(以下AS)を書きました。 もともと解説にあったのですが,これだとドラッグしている最中も 回転してしまいます。クリックすると回転しても ドラッグしているときは回転しないようにするためにはどうすればいいでしょうか。 ちなみにこのASはムービークリップ(sikaku_mc)の編集画面のタイムラインに書き込んだものです。 function onPress() { this.startDrag(false); var xm:Number = this._xmouse; var ym:Number = this._ymouse; this._x = _root._xmouse; this._y = _root._ymouse; sikaku_mc._x -= xm; sikaku_mc._y -= ym; this.onEnterFrame = mawasu; this.onMouseMove = updateStage; } function updateStage() { updateAfterEvent(); } function mawasu() { this._rotation += 90; } this.onRelease = this.onReleaseOutside=stopDragMe; function stopDragMe() { this.stopDrag(); delete this.onEnterFrame; delete this.onMouseMove; } ご教授よろしくお願いします。

    • ベストアンサー
    • Flash
  • Suzuka にて テキストを50フレーム表示するには

    フラッシュ初心者です。FlashソフトSuzukaを使い始めました。 練習で脱出ゲームを作っています。 対象物をクリックした時に、テキストでコメントを30フレーム表示させたいです。 例えば ボタンとしてタイムラインに設置した『カレンダーの画像』を、 クリックするたびに、”今は1月だ”と50フレーム表示させたいです。 今やっている方法ではボタンを押した瞬間1フレームだけコメントが表示されてスグに消えてしまいます。 今やっている方法は以下の通りです。 ------------------------------------------- ボタン 通常時:カレンダーの画像 押下時:スプライト01 マウス通過:カレンダーの画像 スプライト01 カレンダーの画像 50フレーム 表示させたいコメント 50フレーム ------------------------------------------- どうやったら 50フレームコメントを表示させておけるのでしょうか? また、ボタンとして以外の方法じゃないとダメなのでしょうか? ご教示宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • AS2でキーによる音楽制御について

    AS勉強中で初心者の者です。 今回キーによる音楽制御を勉強しておりまして、不明点がありますので教えてください。 環境はwindows、Flash5.5、AS2です。 内容はAキーを押すと音楽がループ再生し、Bキーを押すと音楽が停止するもの。また他のキーを使って複数の音楽を同時再生、そのうちの1つの音楽のみを停止させる等、複数の音楽をそれぞれ制御できるものを制作したいです。 現在ライブラリにボタン1とボタン2、リンゲージ設定されたsoundAを用意し、シーン1にボタン1を配置し、ボタン1に on (release) { soundObj.start(0, 100); } を書きました。 同じようにシーン1にボタン2を配置し、ボタン2に on (release) { soundObj.stop("soundA"); } を書きました。 そして、シーン1のタイムライン1フレーム目に soundObj = new Sound(); soundObj.attachSound("soundA"); を書きました。 これではステージ上のボタン1、2をマウスクリックすることで音楽を制御することになります。 これをキーで制御したいのですが、どのようにすればいいのでしょうか? 自分なりに模索したのはon (release) をonClipEvent(onKeyDown)にすればいいのか(←これだとAキー等の指定はどうすればいいか?)、on (release) ではなくKey.isDown(65);を使うのか(これは動かなかったので、何かた足りないのか?)です。 後はそもそもキーで制御する際はボタンではなく、ムービークリップの方がいいのでしょうか? 説明が下手で至らない点もあるとは思いますが、どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • on(press)などで変数nを変える方法

    Suzukaというソフトを使ってFLASHを勉強しています。 タイムライン上にアクションレイヤーで n = 10 ; として 変数n に10を代入しました。 次に スプライトAでボタンを作って、以下のように記述しました。 on(Press){ n = n - 1; } 私の中では、任意のタイミングでこのボタンを押して、 変数nの値から-1するつもりだったのですが 変数nの値が変わりません。 任意のタイミングでボタンを押して変数nに変化を与えるにはどうしたら良いのでしょうか? 今は以下のようにして変数を-1しています。 ////////////////////////////////////////////////////////// スプライトAに on(Press){ _root . スプライトB. gotoAndPlay(2); } を記述。 スプライトBのタイムライン2フレーム目に n = n - 1; を記述。 (一旦別のスプライトBを用意して そのスプライトBの中のタイムラインに設定したアクションレイヤーに n = n - 1; を踏ませています。 ////////////////////////////////////////////////////////// しかしこの方法だと、タイミングが2フレームずれてしまい 厳密にはPressした瞬間ではなくなってしまいますよね。 これ以外にon(Press)などで変数を変える事はできないんでしょうか? お詳しい方いらっしゃいましたら、ご教授宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • モーター制御について教えて下さい。

    初心者ですが、モーター制御で良くわからない点があり、教えて下さい。 ACサーボモーターを使用してトルク制御を行なおうと考えています。 具体的には、ある原点位置から ・角度θ1の位置に至ったら、トルクT1を出力 ・角度θ2の位置に至ったら、トルクT2を出力 (省略) ・角度θxの位置に至ったら、トルクTxを出力 といった出力を連続して行なうことを考えています。 (トルクはフィードバック制御を行なう) ある位置で定義したトルクを超える負荷が掛かると、次の位置に至り、その位置で定義したトルクを超える負荷が掛かるとまた次へ。。。 といった単純な仕組みを考えています。 そこで、良くわからない点というのが、角度θ1からθ2に至る時の軸の回転速度がどの様になるのかです。 例えば、トルクT1が大きい状態からトルクT2が小さい状態へ変化する時、モーター軸の回転速度は負荷イナーシャによって決まる物でしょうか? 速度は制御するわけではないので、単純に考えるとイナーシャの大きさとトルクの変化量によって決まるのかと思うのですが。。。 できれば、このトルク制御をベースに、θ1からθ2に変化する時の速度を増減させる様な事をしたいのですが、原理的に可能でしょうか? (特に、トルクが大きい状態から小さい状態へ変化する時の速度を大きくコントロールしたい) 色々資料を見ていますが、トルク制御をした場合の速度変化をどう考えれば良いか、トルク制御をベースに速度も制御することが可能なのかを明記している資料も事例も無さそうなので、ご教示いただけると幸いです。

  • 既に配置されているMCを外部から制御する

    あまり質問ばかりでは叱られるので 自分なりに調べてはいるのですが、相互関係が どうしても理解できなく質問させて頂きました。 どこかのボタンをクリックするとかではなく イベントとしてマウスがクリックされたら 既に配置してあるMCが動き出すにはどうすればいいでしょうか? (MCは1フレームに空白を居れSTOPさせています) 今までは、クリックされたらメインのタイムラインを 移動させ、動くMCの所に飛べば済んだのですが 分岐が多いため、スプリクトで制御した方が 後々に良いと思って質問させて頂きました。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • プレビューできません

    Flash5日本語版を使っていますがリカバリーした為、再インストール後何故かテキストをムービークリップにし移動させそれに対してアルファや回転を施すと制御→ムービープレビューで見ると最後のフレームのみ表示されて後は何も表示されなくなりました。作成画面でタイムラインのフレーム数が書いて有る所の赤い四角をクリックして動かすとちゃんとアルファも回転も利いています。よろしくお答えの程お願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう