繁体   English   中英

away3d和starling大小调整问题

[英]away3d and starling resizing issue

我在尝试在stage3d中正确调整away3d Gold和Starling的大小时都遇到问题,它们都在单个游戏中工作。

我有4个starling实例和1个由stage3dProxys处理的Away3d实例。

所有这些都可以完美地完成初始大小。 在浏览器中调整游戏大小时,问题开始。

游戏.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;
    
    
        }

它适用于Starling实例,但不适用于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;

我要实现的是在将Size设置为“百分比”时将缩放比例设置为"NO_BORDER" ,将align设置为"Top Center"并具有最小的高度和宽度时在传统Flash中所实现的效果。

如何实现呢?

谢谢

马捷

Away3D中

好吧,我发现调整大小的方法是更新视图。 您可以将居中或重新放置,或者将flash.display.Sprite容器定位在添加了Away场景的位置,也可以自行查看。

想法很棘手,因为您必须找出该视图的scaleXscaleY的方法是“ DEAD END ”,这意味着它们是空的方法,永远不会发生任何变化。 因此,您确实必须 &只能更改widthheight属性。

这里列出了View3D的所有DEAD END方法,就像它们在源代码中一样:

// 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;

}

我认为您不能通过简单地在stage3DProxy上设置width / height属性来调整away3d实例的大小。 我通过在view3D上设置宽度/高度来实现这一点:

    view = new View3D();

    //...later

    private function stageResizeHandler(evt:Event):void
    {
        view.width = stage.stageWidth;
        view.height = stage.stageHeight;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM