2011-07-28 26 views
3

私が作っているパズルゲームの一部のために、ダイナミックマスキングで遊んでいます。AS3マスク奇妙な結果

私は6個のテストパズルを持っています。これはあなたがあなたの作品を置く場所

  • 完成作品は=これが見つから枚
  • 緩い部分を合わせた結果を示す層である=移動することができている=

    • 黒形状:パズルは、3層の外に存在します代わりに

    黒い形状は問題ありません。これは、結果のスプライト上の単なる色変換です。

    完成したピースを1つのスプライトで結合すると、ピース間のヘアラインのギャップよりも小さいことがわかります。

    私が考えていた方法の1つは、完全な結果スプライトにマスクを置くことで、見つかった部分だけが見えるようにすることでした。私はヘアラインのギャップを避けるために作品の周りに1pxの境界を追加します。

    だから、私はマスクで遊んで開始しました:

    // test 
    var test: Sprite = new TestSprite() as Sprite; 
    test.x = test.y = 100; 
    addChild(test); 
    
    // puzzle pieces    
    var pieces: Vector.<Sprite> = new Vector.<Sprite>; 
    pieces.push(new TurtlePiece1()); 
    pieces.push(new TurtlePiece2()); 
    //pieces.push(new TurtlePiece3()); 
    //pieces.push(new TurtlePiece4()); 
    pieces.push(new TurtlePiece5()); 
    pieces.push(new TurtlePiece6()); 
    
    // finished locations for each piece 
    var points: Vector.<Point> = new Vector.<Point>; 
    points.push(new Point(0.3, 7.25)); 
    points.push(new Point(110.35, 0)); 
    //points.push(new Point(98.25, 52.6)); 
    //points.push(new Point(23.95, 69.30)); 
    points.push(new Point(157.25, 61.95)); 
    points.push(new Point(146.7, 100.70)); 
    
    var mask: Sprite = new Sprite(); 
    for (var i: int = 0; i < pieces.length; i++) { 
        pieces[i].x = points[i].x; 
        pieces[i].y = points[i].y; 
        mask.addChild(pieces[i]); 
    } 
    test.mask = mask; 
    

    完全な形状とマスク形状は次のようになります。それはこのようになりますマスクを適用した後

    full image and mask shape

    masked image

    私は結果なしでビットマップとしてキャッシュしようとしました。誰でも問題が何であるか考えていますか?事前に

    TNXを、種類に関しては

    、 イェルーンは

  • +0

    はにcacheAsBitmapMatrix Pのようになります。あなたは、単一のグラフィック内の2つの以上の形状を呼び出す重なったときに起こります汚れ。あなたはそれを呼んでいますか? – TheDarkIn1978

    +0

    私はそれを呼んでいません。私は、マスクとテストスプライトのためにcacheabitmap = trueを設定してみました。私はcacheAsBitmapMatrixを試していません。 – Jeroen

    +0

    さて、私は今、マスクとテストスプライトにcacheAsBitmapMatrixを設定しようとしました。同じ結果。 – Jeroen

    答えて

    1

    私はあなたがしようとしているが、私はそれはあなたのために働いていない理由はわからないものを参照してください。私は、同様のプログラムを作成しましたAN期待どおりに動作します:

    //Imports 
    import flash.display.Shape; 
    import flash.display.Sprite; 
    
    //Draw Background Rect 
    var backgroundRect:Shape = new Shape(); 
    backgroundRect.graphics.beginFill(0x000000, 1.0); 
    backgroundRect.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
    backgroundRect.graphics.endFill(); 
    
    addChild(backgroundRect); 
    
    //Build Mask From Circles 
    var backgroundMask:Sprite = new Sprite(); 
    
    var circleA:Shape = circle(50, 0xFF0000); 
    circleA.x = 50; 
    circleA.y = 50; 
    
    var circleB:Shape = circle(50, 0x00FF00); 
    circleB.x = 100; 
    circleB.y = 50; 
    
    var circleC:Shape = circle(50, 0x0000FF); 
    circleC.x = 150; 
    circleC.y = 75; 
    
    backgroundMask.addChild(circleA); 
    backgroundMask.addChild(circleB); 
    backgroundMask.addChild(circleC); 
    
    addChild(backgroundMask); 
    
    //Assign Mask 
    backgroundRect.mask = backgroundMask; 
    
    //Create Circle 
    function circle(radius:uint, color:uint):Shape 
    { 
        var result:Shape = new Shape(); 
        result.graphics.beginFill(color, 1.0); 
        result.graphics.drawCircle(0, 0, radius); 
        result.graphics.endFill(); 
    
        return result; 
    } 
    

    enter image description here

    私はあなたがマスクスプライトに追加されている作品は、同様にものに、互いにoverritingしていることを考えることができる唯一のこと

    //Imports 
    import flash.display.Shape; 
    import flash.display.Sprite; 
    
    //Draw Circle 
    var circleA:Shape = circle(50, 0xFF0000); 
    circleA.x = 50; 
    circleA.y = 50; 
    
    addChild(circleA); 
    
    //Create Circle 
    function circle(radius:uint, color:uint):Shape 
    { 
        var result:Shape = new Shape(); 
        result.graphics.beginFill(color, 1.0); 
        result.graphics.drawCircle(0, 0, radius); 
        result.graphics.drawCircle(50, 50, radius); 
        result.graphics.endFill(); 
    
        return result; 
    } 
    

    enter image description here

    +0

    Tnx。私はもう少しを試して、それが適切に動作するようにすることができませんでした。私は代わりに別の道路に行くことを選んだ、それは私がそれをやりたいことをします:マスクを形成するために一緒に作品を接着するのではなく、私は一緒に作品を貼り付けている写真を形成する接着している。私はこれを前に試しましたが、縫い目(非常に小さな開口部)に問題がありました。私は、縫い目で1ピースを大きくすることで修正しました(有効な重なりがあり、穴を避けることができます)。 – Jeroen