2016-12-10 1 views
0

레이저 무기 발사체 (레이저 빔 자체의 인스턴스)에 대한 코드를 적용하여 레이저가 실제 레이저와 비슷한 기능을 수행 할 때, 나는 모든 것을 훌륭하게 작동 시켰습니다 ... 발사체 x 축뿐만 아니라 y 축과 x 축에서 계속 늘어납니다. 이제 scaleMode와 같은 것을 사용할 수 없도록해야한다는 것을 알았지 만, 내가 찾은 최선의 방법은 "stage.scaleMode = StageScaleMode.NO_SCALE;"과 같은 코드 라인을 사용하는 것입니다. 인스턴스 자체 및 레이저 빔의 클래스 코드 내에서 ADDED 이벤트에 이와 같은 것을 적용하려고하면 오류 1120이 발생합니다.축 중 하나를 늘일 때 인스턴스에 대해 다른 축의 자동 늘이기를 중지하려면 어떻게합니까?

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

scalemode를 비활성화 할 필요가 없습니다. 인스턴스의 scaleX 값을 조정하면됩니다. 레이저는 항상 왼쪽과 오른쪽으로 수평으로 가고 있습니까? 아니면 다른 방향으로 회전 할 수 있습니까? 그렇다면 레이저를 확장해야하지만 레이저는 회전하는 컨테이너에 보관해야합니다. 레이저를 돌리면 x 축이 변경됩니다. 그러나 레이저를 회전시키지 않고 대신 부모를 회전 시키면 작동 할 것입니다. –

+0

스트레치 코드에서 너비를 조정하면 레이저가 수평 인 한 정상적으로 작동합니다. 레이저의 각도가 위 또는 아래 인 경우 너비를 높이면 scaleY 값이 조정되지 않지만 레이저의 상대 높이 중 일부는 x 축 자체에 노출됩니다. –

+0

this.scaleX뿐만 아니라 this.width도 시도했기 때문에 이상합니다. 두 시나리오 모두에서 Y 축 또는 수평 확장이 x 축/너비와 함께 증가하고있었습니다. 그리고 아니요,이 둘 중 어느 것도 회전하고 있지 않습니다. 그러나 레이저 빔의 스케일 모드를 구체적으로 비활성화해야한다고 말하면 어떻게 할 수 있습니까? – XirmiX

답변

1

특별히 scaleX 대신 width 변경한다 : 여기 빔의 클래스에서 여기에 제시하는 것이 필요하다 생각하는 코드입니다. 레이저를 100 픽셀 길이로 말하고 너비가 10 픽셀이라면 레이저의 원하는 거리를 결정한 후에 scaleXdesiredWidth/100으로 설정하면 레이저 스케일링이 Y로 줄어 듭니다.

+0

아니요, 여전히 레이저의 Y 축을 증가시킵니다. 아마도 플래시 도구로 그려진 오렌지색 윤곽선을 가진 작은 빨간 구형으로 스케일링되기도합니다. 그럼에도 불구하고 scalingX는 scaleY를 축소하는 것처럼 보이지 않지만 scalingX는 scaleY를 유지하지 않으므로이 특정 인스턴스를 제거하기 위해 실제로 scale 모드가 필요하다고 생각합니다. – XirmiX

+0

레이저 MC를 변경하는 전체 코드로 질문을 편집하십시오. 어딘가에 여전히 너비 또는 높이에 대한 할당이 남아있을 수 있습니다. – Vesper

+1

@XirmiX는 1 인칭 슈팅 게임과 같습니다 (원은 목표물을 겨냥한 것입니다)? 대신 직선처럼 쏘는 빔을 의미한다면 확장 된 ** 원 **이 아닌 커지는 ** 직사각형 ** 모양을 사용하십시오. –