【问题标题】:AS3: Resizing a sprite without resizing its BitmapFill (or its contents for that matter)?AS3:调整精灵的大小而不调整其 BitmapFill(或其内容)的大小?
【发布时间】:2011-05-03 16:58:15
【问题描述】:

Edit #2 我找到了解决方案,它比我希望的要简单。谢谢你的时间。 =)(用完整的解决方案回答了我自己的问题)

编辑:抱歉,我的帖子不够透明。我将尝试迭代以更清晰。我不是简单地试图包含东西并在不调整内容大小的情况下调整容器大小。我只想使用一个简单的 MovieClip。我主要关注的是 BitmapFill 的使用。我正在尝试为容器制作重复的背景图像;到目前为止,我能够将我的 BitmapFill 精灵绘制到我想要的大小。 (这是舞台的高度)但是在调整舞台大小时,我想重新调整容器的大小,但让容器 BitmapFill 裁剪或添加更多,因为窗口的大小被调整得更大或更小。请允许我说明我的意思:

我希望这能消除任何困惑,并有助于获得更直接的答案。

------- 原帖:

我有一个简单的矩形精灵,它用库中的位图填充,还有一个简单的调整大小处理函数,用于检测窗口何时被调整大小。

我想做的是让我的矩形调整到 stage.stageHeight 的高度,保持其位图填充,但不调整位图填充或精灵中的任何子项。

从我读到的内容来看,这有点棘手,因为精灵会根据它包含的内容调整大小..或者..类似的东西..我真的不知道了..我看到了一个例子一个人扩展了 sprite 类,但我不知道为什么或如何..

在我的库中有一个名为“模式”的图像,我的代码如下所示:

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

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

var bgData:pattern = new pattern(0,0);
var bg:Sprite = new Sprite();

bg.graphics.beginBitmapFill(bgData, null, true, false);
bg.graphics.drawRect( 0, 0, 80, stage.stageHeight);
bg.graphics.endFill();
addChild(bg);

function resizeHandler(e:Event=null):void 
{
 trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight);
 bg.height = stage.stageHeight;  //simply makes the fill resize also
}

【问题讨论】:

    标签: actionscript-3 actionscript resize bitmap sprite


    【解决方案1】:

    哦,我很无聊。答案很简单。

    我需要做的就是清除图形然后重绘它们..

    我不知道 clear();函数..

    修改后的完整代码如下:

    stage.align = StageAlign.TOP_LEFT;
    stage.scaleMode = StageScaleMode.NO_SCALE;
    
    stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true);
    
    var bgData:pattern = new pattern(0,0);
    var bg:Sprite = new Sprite();
    
    bg.graphics.beginBitmapFill(bgData, null, true, false);
    bg.graphics.drawRect( 0, 0, 80, stage.stageHeight);
    bg.graphics.endFill();
    addChild(bg);
    
    function resizeHandler(e:Event=null):void 
    {
     trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight);
     bg.graphics.clear();
    
     bg.graphics.beginBitmapFill(bgData, null, true, false);
     bg.graphics.drawRect( 0, 0, 80, stage.stageHeight);
    
     bg.graphics.endFill();
    }
    

    谢谢大家,很抱歉可能会浪费空间。

    【讨论】:

      【解决方案2】:

      由于 Sprite 会根据其内容调整大小,因此您可以使用 Shape 来调整 Sprite 的大小。更改 Shape 大小将有效地调整 Sprite 的大小,而不会调整 Sprite 的其他子项的大小。

      var bg:Sprite = new Sprite(); addChild(bg); 变量填充:形状=新形状(); //你可以使填充透明 与(填充) { graphics.beginFill( 0 , 0 ); graphics.drawRect( 0 , 0 , anyWidth , anhyHeight ); 图形.endFill(); } bg.addChild(填充); //然后添加你想要可见的填充 var bgFill:Sprite = new Sprite(); //在这里添加图形 bg.addChild(bgFill); 函数调整大小精灵(事件:事件):无效 { // bgFill 不会被调整大小 填充宽度 = 舞台宽度; fill.height = stage.stageHeight; }

      【讨论】:

      • 感谢您的快速回复,感谢您为写出此回复所付出的努力,但是在检查并使用您的代码之后,您似乎只是在使用精灵作为容器对于另一个精灵..这有点违背我的问题的目的,因为我完全了解这种遏制方法。我已经更新了我的帖子,使其尽可能清晰,我希望你能帮助我解决这个修改后的问题=)~PtK
      • 没问题,我确实错过了 BitmapFill 位 :( 我有阅读过快的倾向!无论如何,恭喜您的回答,不管有多少人可以提供帮助,我认为它总是更令人满意自己找到答案:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2020-10-21
      相关资源
      最近更新 更多