2

DisplayObject の高さプロパティの自動変更を防ぐ方法はありますか? 私の swf ファイルの高さは 32 ピクセルですが、コンテンツに合わせて自動的にサイズ変更されます。以下のコードは、これを証明するものです。最初のフレームのの高さは 32 ですが、その後は 27.5 になり、スクリプトが台無しになります。

getRect() と getBounds() はまったく同じものを返します。また、最初のフレームで正しい高さを表示し、2 番目のフレームで変更すると、最初から 27.5 を表示する必要がある理由を知りたいです。

package {
    import flash.display.Sprite;
    import flash.events.Event;
    public class Main extends Sprite {
        private var enemy:Sprite;
        [Embed(source = '../lib/enemy.swf')] private var swf:Class;
        public function Main():void {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function update(e:Event):void {
            trace(enemy.height);
        }

        private function init(e:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            enemy = new swf();
            addChild(enemy);
            addEventListener(Event.ENTER_FRAME, update);
        }

    }

}
4

4 に答える 4

2

「ハッキー」な解決策は、必要な最大サイズのシェイプを敵に追加し、それを非表示に設定することです。私はそのようにオブジェクトのヒットボックスを作成しましたが、それは非常にうまく機能しました。

1つの方法は、FlashIDEでオブジェクトを作成するときに追加することです。図形を描き、希望どおりに配置してから、「sizeHolder」のようなインスタンス名を付けます。敵を作成した後、あなたはそれから呼び出すでしょう

enemy.sizeHolder.visible = false;

Flash IDEでは、別のタイムラインに配置し、そのタイムラインを非表示にしてロックすることができます。これにより、実際のオブジェクトを編集するときに邪魔になりません。

もう1つの方法は、コードで追加することです。オブジェクトを別のDisplayObjectに描画し、非表示に設定してから、敵にaddChildします。

于 2011-03-08T14:00:24.207 に答える
1

敵のスプライト アニメーション シーケンスは高さが異なります。これはアニメーション プロセスの一部です。したがって、フレームごとの実際の高さは、スプライトのバウンディング ボックスによって異なります。あなたがよく観察したように、これは デフォルトの動作です。

方法:

  • あなたが現在フォローしているものは、高さを保存して計算に使用しています。(より良い)
  • EyeSeeEmが示唆したように、彼がムービークリップの中心点を適切にセンタリングし、各フレームのスプライトをセンタリングして、目に見えない高さのスプライトの境界に含まれるように、目に見えない高さのスプライトの背景を持っていることを正しく理解していれば.

多くの場合、アクション スクリプトの機能が思いどおりに機能しないことに気付くでしょう。重要なのは、ソリューションを容易にするためにコーディングを適応させることです。ハッキングや非効率ではなく、コーディング/メソッドにより、さらに変更/拡張を簡単に行うことができます。

PS:

これは状況によって異なりますが、個人的には、スプライト アニメーションのインスタンスに応じて高さを動的にしたいので、発射物が頭のすぐ上にある敵に命中しても、実際には敵を殺しません。

于 2011-03-16T06:54:32.950 に答える
0

試す

import flash.display.StageAlign;
import flash.display.StageScaleMode;

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
于 2011-03-08T12:27:37.197 に答える