0

4つの図形を描画してグラデーション塗りつぶしで塗りつぶそうとしていますが、期待どおりに表示されるのは2つだけで、他の2つは機能しません。問題は、4つのグラデーション塗りつぶしにまったく同じコードを使用することです。

import flash.display.Sprite;
import flash.geom.Matrix;
import flash.display.GradientType;  

drawBackground();

function drawBackground():void{
var ground:Sprite = new Sprite();
addChild(ground);
ground.graphics.lineStyle(2,0x999999);
ground.graphics.beginFill(0xE6E6E6, 0.5);
ground.graphics.drawRect(0,0,640,610);
ground.graphics.endFill();
ground.x = 30;
ground.y = 60;

var mat:Matrix;  
var color:Array;
var alphas:Array;
var ratio:Array;

mat=new Matrix(); 
color=[0xD5D5D5,0x999999];
alphas=[0.5, 0.8];
ratio=[0,255];

var topwall:Sprite=new Sprite();
mat.createGradientBox(700,60,Math.PI/2);
topwall.graphics.lineStyle(2,0x999999);
topwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
topwall.graphics.moveTo(0, 0);
topwall.graphics.lineTo(700, 0);
topwall.graphics.lineTo(670, 60);
topwall.graphics.lineTo(30,60);
this.addChild(topwall);

var leftwall:Sprite=new Sprite();
mat.createGradientBox(30,700,0);
leftwall.graphics.lineStyle(2,0x999999);
leftwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
leftwall.graphics.moveTo(0, 0);
leftwall.graphics.lineTo(0,700);
leftwall.graphics.lineTo(30, 670);
leftwall.graphics.lineTo(30,60);
this.addChild(leftwall);

var bottomwall:Sprite=new Sprite();
mat.createGradientBox(700,700,-Math.PI/2);
bottomwall.graphics.lineStyle(2,0x999999);
bottomwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
bottomwall.graphics.moveTo(30, 670);
bottomwall.graphics.lineTo(670,670);
bottomwall.graphics.lineTo(700, 700);
bottomwall.graphics.lineTo(0,700);
this.addChild(bottomwall);

var rightwall:Sprite=new Sprite();
mat.createGradientBox(30,700,0);
rightwall.graphics.lineStyle(2,0x999999);
rightwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
rightwall.graphics.moveTo(670, 60);
rightwall.graphics.lineTo(670,670);
rightwall.graphics.lineTo(700, 700);
rightwall.graphics.lineTo(700,0);
this.addChild(rightwall);
}

現在、上壁と左壁は適切に動作しますが、残りの2つは単色で塗りつぶされています。誰もが理由を知っているかもしれませんか?

4

1 に答える 1

2

createGradientBoxを作成するには、いくつかの調整が必要です。

var bottomwall:Sprite=new Sprite();
mat.createGradientBox(700,30,-Math.PI/2, 0, 670);
bottomwall.graphics.lineStyle(2,0x999999);
bottomwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
bottomwall.graphics.moveTo(30, 670);
bottomwall.graphics.lineTo(670,670);
bottomwall.graphics.lineTo(700, 700);
bottomwall.graphics.lineTo(0,700);
this.addChild(bottomwall);

var rightwall:Sprite=new Sprite();
mat.createGradientBox(30,700,Math.PI, 670, 0);
rightwall.graphics.lineStyle(2,0x999999);
rightwall.graphics.beginGradientFill(GradientType.LINEAR, color, alphas, ratio, mat);
rightwall.graphics.moveTo(670, 60);
rightwall.graphics.lineTo(670,670);
rightwall.graphics.lineTo(700, 700);
rightwall.graphics.lineTo(700,0);
this.addChild(rightwall);
于 2013-01-25T17:40:28.187 に答える