gpt4 book ai didi

actionscript-3 - 如何检测该区域是否在 as3 中 100% 绘制

转载 作者:行者123 更新时间:2023-12-01 09:30:55 26 4
gpt4 key购买 nike

我正在制作一款模拟泛行业的游戏,其中一个过程是绘画。

我想做的是让玩家画平底锅,但我不希望使用 FILL 很容易,我希望玩家用刷子画平底锅,然后游戏检测是否所有区域被画了,让玩家前进。

对于这幅画,我打算使用该库:http://www.nocircleno.com/graffiti/

但我不知道如何检测是否所有区域都已绘制(paint)。有人可以告诉我一些方法吗?

最佳答案

其中一种方法是 - 您制作一个具有透明度且不透明的屏蔽 BitmapData,您需要您的播放器来绘制它。 (根据需要着色,但确保颜色完全不透明)。然后收集 histogram() 然后查询 alpha 向量的第 255 个值,这将是填充百分比为零的初始值。这些范围从 0 到 255,因此您不能使用 100 或任何其他固定值。然后,当玩家在绘画时,您在该 BitmapData 上绘制画笔,并将 blendMode 参数设置为 BlendMode.ERASE,这将使您的 BitmapData 获得画笔所在位置的透明度画。在您的播放器以任何方式完成绘制后(例如,油漆用完),您在 BitmapData 上运行另一个 histogram(),并查询 alpha channel 向量的第 255 个值。 0 表示位图是完全透明的(或者至少,只有少量像素是不透明的),因此您可以将零算作 100% 填充,如果更大,请使用该比例。

var bd:BitmapData=new BitmapData(w,h,true,0x0); // fully transparent initial bitmap
bd.draw(yourPaintBase); // a shape that designates area to be painted. Must be fully opaque
var bm:Bitmap=new Bitmap(bd);
// position it as needed, so the area which should be painted is aligned to wherever you need
addChild(bm);
addEventListener(Event.ENTER_FRAME,doPaint);
var baseValue:int=bd.histogram()[3][255]; // Vector #3 contains alpha, #255 contains
// percentage of those pixels that have alpha of 255 = fully opaque
function doPaint(e:Event):void {
if (!areWePainting) return;
var sh:Shape=getBrush(); // shuold return an existing Shape object reference for performance
sh.x=e.localX;
sh.y=e.localY; // we are drawing where the mouse is
bd.draw(sh,null,null,BlendMode.ERASE);
decreasePaint(); // we have used some paint
if (noMorePaint()) {
e.target.removeEventListener(Event.ENTER_FRAME,doPaint);
var endValue:int=Math.floor(100*(1-bd.histogram()[3][255]/baseValue));
// aligning to percentage. This is the value you seek
reportFilledPercentage(endValue);
}
}

关于actionscript-3 - 如何检测该区域是否在 as3 中 100% 绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com