0

単一のゲームで動作するstage3dのaway3dGoldとStarlingの両方を正しくサイズ変更しようとすると問題が発生します。

4つのスターリングインスタンスと1つのAway3dインスタンスがstage3dProxysによって処理されています。

これはすべて、初期サイズで完璧に機能します。ブラウザでゲームのサイズを変更すると、問題が発生します。

ゲーム.swfは、最終的に別の親.swfによってロードされますが、ゲームがそれ自体のHTMLテンプレートに直接ロードされると、同じことが起こります。

私が今持っているのは:

   

stage.addEventListener( Event.RESIZE, onResize, false, 0, true );

    private function onResize(event:Event):void {
            _stage3DProxy.width = stage.stageWidth;
            _stage3DProxy.height = stage.stageHeight;
    
    
        }

スターリングインスタンスでは機能しますが、離れた3dインスタンスでは機能しません。また、ステージの外にあるはずのカットされた画像は表示されません。

私も失敗しました:

   

starling.stage.stageWidth = this.stage.stageWidth;
             starling.stage.stageHeight = this.stage.stageHeight;

             var viewPort:Rectangle = RectangleUtil.fit(
                new Rectangle(0, 0, stage.stageWidth, stage.stageHeight),
                new Rectangle(0, 0, stage.fullScreenWidth, stage.fullScreenHeight),
            ScaleMode.NO_BORDER);

         Starling.current.viewPort = viewPort;

私が達成したいのは、サイズを「パーセンテージ」に設定し、スケールを次のように設定し、最小の高さと幅で"NO_BORDER"位置合わせするときに、従来のフラッシュで達成することです。"Top Center"

これを達成する方法は?

ありがとうございました

マテイ

4

2 に答える 2

3

Away3D

サイズを変更する方法は、ビューを更新することであることがわかりました。flash.display.Spriteまた、アウェイシーンが追加されたコンテナを配置するか、それ自体を表示するかのいずれかで、中央に配置したり、位置を変更したりできます。

scaleX&のビューのメソッドscaleYが「DEADEND」であることを確認する必要があるので、注意が必要です。つまり、これらは空のメソッドであり、これまで何も変更されません。したがって、実際には&プ​​ロパティのみを変更する必要があります。widthheight

ここに、ソースコードに表示されているとおりのすべてのDEADENDメソッドのリストがあります。View3D

// dead ends:
    override public function set z(value : Number) : void {}
    override public function set scaleZ(value : Number) : void {}
    override public function set rotation(value : Number) : void {}
    override public function set rotationX(value : Number) : void {}
    override public function set rotationY(value : Number) : void {}
    override public function set rotationZ(value : Number) : void {}
    override public function set transform(value : Transform) : void {}
    override public function set scaleX(value : Number) : void {}
    override public function set scaleY(value : Number) : void {}

ムクドリ

チームの実験後に私たちのプロジェクトで機能したのは次のとおりです。

目標percentage:[サイズ]を [スケール]に設定しNO_BORDER、[位置合わせ]を:に設定した場合と同じように、背景のサイズを変更しますTop Center

//Necessary variables
public var backgroundContainerStage:Starling;
public var anyOtherContainerStage:Starling;
public var stage3dProxy:Stage3DProxy;
public var scaleRatio:Number;
public var originalHeight:Number = 900;

// ... {HACK} ... {HACK}
// Add your Listeners in the constructor for Event.AddedToStage 
// and set the handler to init... Or any other method you prefer to add the 
// listener on the `Event.RESIZE`. 
//
// Also populate the stage3DProxy how ever you wish. 
// We did it this way: 
//_stage3DProxy = Stage3DManager.getInstance(stage).getFreeStage3DProxy();
//
// ... {HACK} ... {HACK}

public function init(event:Event=null):void{
  stage.addEventListener( Event.RESIZE, onResize, false, 0, true );
}

// The IMPORTANT PART !!!!!!!!
public function onResize():void  {
  scaleRatio = stage.stageHeight/originalHeight;
  backgroundContainerStage.stage.stageWidth =
      anyOtherContainerStage.stage.stageWidth =
          stage3dProxy.width = stage.stageWidth;

  // Need to get the Starling Sprite cause the the Starling instances don't allow to
  // set values for their `x` and `y` properties.
  var background: Sprite = backgroundContainerStage.getChildByName('background') as Sprite;
  var uiContainer: Sprite = anyOtherContainerStage.getChildByName('uiContainer') as Sprite;
  //First, RE-SIZE
  background.scaleX = background.scaleY =
     uiContainer.scaleX = uiContainer.scaleY = scaleRatio;

  //Then, RE-POSITION top-Center
  background.x =
     uiContainer.x = stage.stageWidth - background.width >>1;

}
于 2013-03-06T08:01:34.850 に答える
1

stage3DProxyでwidth/heightプロパティを設定するだけでは、away3dインスタンスのサイズを変更できるとは思いません。view3Dで幅/高さを設定することでこれを実装しました。

    view = new View3D();

    //...later

    private function stageResizeHandler(evt:Event):void
    {
        view.width = stage.stageWidth;
        view.height = stage.stageHeight;
    }
于 2013-03-02T08:58:01.730 に答える