2011-03-08 8 views
2

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

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); 
     } 

    } 

} 

答えて

2

を試してみてください「ハック」次に、溶液を見えないようにそれを設定し、希望の最大サイズを持っている敵に図形を追加するかもしれません。私はオブジェクトのためのヒットボックスを作成し、それは非常にうまくいった。

Flash IDEでオブジェクトを作成するときに、それを追加する方法もあります。形状を描きたいと思うように描画して配置し、 "sizeHolder"のようなインスタンス名を付けてください。あなたは、あなたが実際に編集するとき、それはあなたの邪魔にないように、そのタイムラインを非表示にし、それをロックし、その後、別のタイムライン上に置くことができフラッシュIDEで

enemy.sizeHolder.visible = false; 

を呼ぶような敵を作成した後、オブジェクト。

他の方法はコードで追加することです。オブジェクトを別のDisplayObjectに描画し、それを不可視にして、それを敵に追加します。

+0

はい、これはうまくいくソリューションですが、ActionScript開発者がこのデフォルトの動作を停止できないというのは奇妙なことです。今はADDED_TO_STAGEを聞いて、高さを保存し、実際の高さに代わり、その高さに基づいて計算を行います。 – Veehmot

+0

あなたがASを多用するほど、MovieClipのようなオールインワンのクラスはプログラマを念頭に置いて作成されたのではなく、Flashの純粋なアニメーション時代の遺物であることに気付くでしょう。 –

+1

私はこの「ハッキー」とも呼ばず、サイズを維持するのが通常の習慣です。 – alxx

0

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

stage.align = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE; 
+0

いいえ、それは問題を解決しません。私は窓のサイズなどを変更していません。 – Veehmot

4

これは、SWF全体をインスタンス化し、1つのフレームをMain swfに同期させるために渡す必要があるという事実と関係があります。

[Embed(source='enemy.swf#Symbol1')] 
private var swf:Class; 

は、この場合、高さも最初 ENTER_FRAMEに一貫性がある:私は何だろうと、その後、Flexで「埋め込みシンボル」構文を使用し、.FLAにシンボルをエクスポートしています。それが必要な高さでない場合は、不可視シェイプを使用して境界を設定することができます。

1

配列はheight.Thisて変化する敵スプライトアニメーションが アニメーション処理の一部です。したがって、 フレーム当たりの実際の高さは、スプライトのバウンディングボックスに基づいて に基づいて変化します。あなたは非常によく観察されたように これは デフォルト動作です。

方法:。

  • あなたは現在の高さを格納し、計算に使用して、次のされているワン(良い)私は彼が正しく、適切で目に見えない高さスプライトの背景を持つ理解している場合EyeSeeEmが示唆したよう
  • ムービークリップの中心点のセンタリングと各フレームのスプライトのセンタリングが不可視の高さのスプライト境界に含まれるようにします。

あなたは、あなたがそれを望むように動作しないアクションスクリプトの機能を見つけることがよくあります。重要なのは、ソリューションを容易にするためにコーディングを調整することです。ハッキングや非効率的ではなく、コーディング/方法で簡単にさらに変更/拡張を行うことができます。

PS:

これは、状況に依存するが、発射でわずかほぼその頭の上に敵へのヒットが実際に敵を殺すことはありませんので、個人的に私はむしろ高さはスプライトアニメーションインスタンスに応じてダイナミックになります。

関連する問題