2016-12-10 3 views
0

レーザー兵器発射体(レーザービーム自体のインスタンス)のコードを適用すると、レーザーを実際のものと同様に動作させることができました。 x軸だけでなく、y軸とx軸の伸びを保ちました。今、scaleModeのようなものを無効にする必要があることがわかりましたが、私が見つけた最高のものは "stage.scaleMode = StageScaleMode.NO_SCALE;"のようなコード行ですインスタンスそのものと、レーザービームのクラスコード内のADDEDイベントにこのようなものを適用しようとするとエラー1120が発生します。軸の1つを伸ばすときに、インスタンスに対して他の軸の自動ストレッチを停止するにはどうすればよいですか?

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.*; 
    public class weapon3projectileCode extends MovieClip 
    { 
     private var _root:Object; 
     public function weapon3projectileCode() 
     { 
      addEventListener(Event.ADDED, beginClass); 
     } 
     private function beginClass(event:Event):void 
     { 
      _root = MovieClip(root); 
      this.scaleMode = StageScaleMode.NO_SCALE; 
      this.scaleX = .25; 
      this.scaleY = .2; 
     } 
     private function entFrame(event:Event):void 
     { 
      if (_root.gamePaused == false) 
      { 
       x += speed; 
       if (stretchWhile < stretchTill) 
       { 
        this.width += 25; 
        this.x = _root.playerShip.x; 
        this.y = _root.playerShip.y; 
       } 
       else if (stretchWhile < shrinkTill) 
       { 
        this.width -= 25; 
       } 
       else if (stretchWhile >= shrinkTill) 
       { 
        this.width = .25; 
        removeEventListener(Event.ENTER_FRAME, entFrame); 
        _root.projectilePlayerContainer.removeChild(this); 
       } 
       stretchWhile ++; 
       if(this.x > (stage.width+ this.width)) 
       { 
        removeEventListener(Event.ENTER_FRAME, entFrame); 
        _root.projectilePlayerContainer.removeChild(this); 
       } 
      } 
      if (_root.removeProjectiles == true) 
      { 
       removeEventListener(Event.ENTER_FRAME, entFrame); 
       _root.projectilePlayerContainer.removeChild(this); 
      } 
     } 
    } 
} 
+0

スケーラーモードを無効にする必要はありません。インスタンスのscaleX値を調整するだけです。レーザーは常に左右に横たわっているのですか、それとも他の方向に回転することができますか?もしそうなら、あなたはレーザーをスケールするだけで、レーザーは回転する容器に入れる必要があります。レーザーを回転させると、x軸が変わります。しかし、レーザーを回転させず、代わりに親を回転させれば、それは動作します。 –

+0

ストレッチコードの幅を調整すると、レーザーが水平である限り、これは正常に機能します。レーザーの角度がそれよりも上または下にある場合、幅を拡大/縮小すると、scaleYの値は調整されませんが、レーザーの相対的な高さの一部がx軸自体に表示されます。 –

+0

これは奇妙です。this.scaleXと同様にthis.widthも試みましたが、両方のシナリオではY軸または水平方向のストレッチがx軸/幅と共に増加していました。そして、これらの2つのうちどれも回転していません。しかし、レーザービームのスケールモードを特に無効にする必要があると言うと、どうすればいいでしょうか? – XirmiX

答えて

1

あなたは、具体的scaleX代わりのwidth変更する必要があります。ここで私は、ビームのクラスから、ここで提示する必要があると思いコードがあります。あなたはあなたのレーザーを100ピクセル長で描き、幅10ピクセル(味わい)とする必要があります。そして、あなたのレーザーの望ましい距離を決めると、scaleXdesiredWidth/100に設定します。これはレーザースケーリングをYで除外します。

+0

いいえ、それはまだレーザーのY軸を増加させます。おそらく、それはスケールされる前に、フラッシュツールで描かれたオレンジの輪郭を持つ小さな赤い球であるという事実と関係がありますか?それにもかかわらず、scaleYXのスケールダウンのようには見えませんが、scalingXはscaleYのスケールアップを維持するので、この特定のインスタンスを取り除くにはスケールモードが本当に必要です。 – XirmiX

+0

あなたの質問をレーザーMCを変更しているコード全体で編集してください。たぶんあなたはどこかで幅や高さに割り当てられているのでしょうか? – Vesper

+1

@XirmiXは一人称シューティングゲームのようなものです(サークルはターゲットを目指しています)?代わりに、直線のように捉える梁を意味する場合は、伸びた**円**ではなく、矩形の矩形**を使用してください。 –

関連する問題