画面のサイズを拡大縮小しても
常にセンターに表示させる
アクションスクリプトで質問がございます。
back_mcが【背景】
main_mcが【オブジェクト】
_root.main_mc._x = ( Stage.width - _root.main_mc._width ) /2;
_root.main_mc._y = ( Stage.height - _root.main_mc._height) /2;
このアクションスクリプトで【オブジェクト】が最初から常にセンター表示になる事は分かるのですが、例えば座標x600 y500で始まるようにするのはどうしたら良いのでしょうか。
下記のアクションスクリプトでは、【オブジェクト】がx600 y500の位置に最初はあるのですが画面のサイズを拡大縮小してもピクリとも動きません。
Stage.align = "TL";
Stage.scaleMode = "noScale";
Stage.addListener(this);
this.onResize = function() {
_root.main_mc._x = 600;( Stage.width - _root.main_mc._width ) /2;
_root.main_mc._y = 500;( Stage.height - _root.main_mc._height) /2;
_root.back_mc._width = Stage.width;
_root.back_mc._height = Stage.height;
}
this.onResize();
いまいち分かりにくい質問ですが伝わりますでしょうか。
分かる方、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
まず大前提の確認ですが,
back_mc【背景】も,main_mc【オブジェクト】も,
基準点を左上のコーナーにしてあるムービークリップですよね
(基準点の座標によってスクリプトは変わります)。
また,back_mc【背景】も,main_mc【オブジェクト】も,
_root の直下に配置されていますよね。
そういう前提だと,
ご質問の日本語通りにスクリプトを書き直すと次のようになります。
-----------------------------------
Stage.align = "TL";
Stage.scaleMode = "noScale";
//
// main_mc を初期座標 (600,500) に配置
_root.main_mc._x = 600;
_root.main_mc._y = 500;
// back_mc のサイズをステージ全体に合わせる
_root.back_mc._width = Stage.width;
_root.back_mc._height = Stage.height;
//
// この階層(MC)を Stage クラスのリスナーとして登録
Stage.addListener(this);
//
// ステージのサイズが変わった時に実行
this.onResize = function() {
// main_mc を ステージ中央に配置
_root.main_mc._x = (Stage.width-_root.main_mc._width)/2;
_root.main_mc._y = (Stage.height-_root.main_mc._height)/2;
// back_mc のサイズをステージ全体に合わせる
_root.back_mc._width = Stage.width;
_root.back_mc._height = Stage.height;
};
-----------------------------------
ActionScriptという言語や,
座標の計算のなどの問題ではなくて,
肝腎の 「何がどうなったときに何をどうしたいのか」 ということ。
これがコーディングに欠けていると思います。
『最初はx=600,y=500 でステージがリサイズされたときに 中央』
これをそのままスクリプトにすると(コーディングすると),
上のようになると思います。
=======================
ちなみにどうでも良いことですが,
「私の個人的な好みのイメージ」として
上のようなスクリプトにしても 私が思う良い動き ではありません。
また,そうする意味をあまり感じません。
個人的には次のような動きにすると,
x=600,y=500 にする意味もわかりますし,イメージ的にもしっくり来ます。
-----------------------------------
Stage.align = "TL";
Stage.scaleMode = "noScale";
//
// 中央配置するスピードの変数 spd を設定
// (0以上1未満の数で好みによって変える)
spd = 1/8;
//
// main_mc を初期座標 (600,500) に配置
_root.main_mc._x = 600;
_root.main_mc._y = 500;
//
// この階層(MC)を Stage クラスのリスナーとして登録
Stage.addListener(this);
//
// ステージのサイズが変わった時に実行
this.onResize = function() {
// back_mc のサイズをステージ全体に合わせる
_root.back_mc._width = Stage.width;
_root.back_mc._height = Stage.height;
// 表示を即更新
updateAfterEvent();
};
// 上の this.onResize を即実行
this.onResize();
//
// 1フレーム進む時間毎に随時実行
this.onEnterFrame = function() {
// main_mc を ステージ中央に徐々に移動
_root.main_mc._x += ((Stage.width-_root.main_mc._width)/2-_root.main_mc._x)*spd;
_root.main_mc._y += ((Stage.height-_root.main_mc._height)/2-_root.main_mc._y)*spd;
};
-----------------------------------
back_mc【背景】 は,
最初表示されたときも,ステージのサイズが変わったときも,
ステージのフィットさせています。
一方,
main_mc【オブジェクト】 は,
x=600,y=500 から徐々に中央配置させています。
つまり,
back_mc【背景】 も main_mc【オブジェクト】 も,
全く別のタイミングで全く別の動きをさせています。
イベントハンドラも別々です。
上のスクリプトのようにするにしても,下のスクリプトのようにするにしても,
どっちにしても,
「何がどうなったときに何をどうしたいのか」 をしっかりと持つことが肝腎だと思います。
No.1
- 回答日時:
Stage.scaleMode = "noScale";
Stage.align = "TL";
main_mc._x = 600;
main_mc._y = 500;
var stage_obj :Object = new Object();
stage_obj.onResize = function()
{
onEnterFrame = mover;
}
function mover()
{
var sx :Number = Stage.width / 2;
var sy :Number = Stage.height / 2;
main_mc._x += (sx - main_mc._x) / 5;
main_mc._y += (sy - main_mc._y) / 5;
}
Stage.addListener(stage_obj);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
四角形の端っこをドラッグした...
-
看護師です。体温表のマクロを...
-
AS3 mc0~5をまとめて処理する
-
テキストボックスにセルの値を...
-
プログラミング、アーキテクチ...
-
テキストボックスの中身をリセ...
-
【Photoshop】レイヤー効果の境...
-
テキストエリア内の文字列にリ...
-
ipconfig /releaseって何ですか?
-
【VB.NET】別Formのボタンが押...
-
【ExcelVBA】ファイル名をセル...
-
SNMPの標準MIBについて
-
フォームのテキストの入力数字...
-
Access2000 実行時エラー '3061':
-
IP Address 入力フォームについて
-
FLASHのActivescriptでオブジェ...
-
photoshopで書いた四角の枠の中...
-
VB.NETで数十行のプログラムを...
-
YOASOBI
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
VBAユーザーホームテキストボッ...
-
テキストファイルから読み込ん...
-
外部SWFファイルを再生バーでコ...
-
AS3 mc0~5をまとめて処理する
-
エンドロール風テキストの表示...
-
ロールオーバーで下画像を表示...
-
看護師です。体温表のマクロを...
-
縦横比率のを変えずに画像のサ...
-
photoshopで書いた四角の枠の中...
-
YOASOBI
-
VBScriptでMsgBoxのYesNoボック...
-
プログラミング、アーキテクチ...
-
python ボタンを押すと複数の関...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
五芒星は、悪魔崇拝とどういう...
-
else if文の順序を変えることに...
-
変数に256文字以上のテキストを...
おすすめ情報