使用动作脚本 3 检测颜色
Posted
技术标签:
【中文标题】使用动作脚本 3 检测颜色【英文标题】:Detect Colour Using Action Script 3 【发布时间】:2020-11-26 15:34:37 【问题描述】:所以我从头开始制作了一个使用以下代码块的游戏:
我正在尝试在 Adobe Animate 中使用 Action Script 3 重新制作这个游戏(用于课堂项目),在 animate 中是否有类似的方法可以做到这一点?
【问题讨论】:
Adobe 将在今年年底 drop support for Flash Player。我已经很久没有使用过 Adobe Animate,但我确实记得 JS 支持(来自 EaselJS)。我建议使用 JS 重新制作游戏并输出到 Canvas/WebGL。关于触摸颜色,原则上,实现此目的的一种方法是将 RGB/十六进制颜色转换为 HSB 并检查给定颜色是否足够接近目标颜色。足够接近是指使用具有公差的 H、S、B 通道的范围。 我必须在学校使用 Animate,现在它也可以导出到 html5 【参考方案1】:这是可能的。这样做的技巧是创建一个很小的 BitmapData 对象,并在鼠标指针下将 stage 的一小部分绘制到该对象中,以便您可以获得像素颜色值。
// BitmapData object and some service objects.
var BD:BitmapData = new BitmapData(3, 3, true);
var R:Rectangle = new Rectangle(0, 0, 3, 3);
var M:Matrix = new Matrix;
// Let's create a TextField so we can output the pixel color value.
var T:TextField = new TextField;
var TF:TextFormat = new TextFormat("_typewriter", 12, 0x000000, true, false, false, null, null, TextFormatAlign.CENTER);
T.x = 10;
T.y = 10;
T.width = 100;
T.height = 18;
T.border = true;
T.background = true;
T.selectable = false;
T.mouseEnabled = false;
T.defaultTextFormat = TF;
addChild(T);
// Lets add some semi-transparent color circles
// so we have colored things to point the mouse at.
for (var i:int = 0; i < 10; i++)
var aColor:uint = 0;
aColor |= int(128 + 128 * Math.random()) << 16; // RED
aColor |= int(128 + 128 * Math.random()) << 8; // GREEN
aColor |= int(128 + 128 * Math.random()); // BLUE
var anX:int = stage.stageWidth / 8 + Math.random() * stage.stageWidth * 3 / 4;
var anY:int = stage.stageHeight / 8 + Math.random() * stage.stageHeight * 3 / 4;
var aRadius:int = 50 + 100 * Math.random();
var anAlpha:Number = 0.5 + 0.5 * Math.random();
graphics.beginFill(aColor, anAlpha);
graphics.drawCircle(anX, anY, aRadius);
graphics.endFill();
// Now let's watch the mouse every frame.
addEventListener(Event.ENTER_FRAME, onFrame);
function onFrame(e:Event):void
// Get pixel color as an RRGGBB String and print it.
T.text = "#" + addZeroes(getColorUnderMouse());
function getColorUnderMouse():uint
// Adjust Matrix so that we draw the correct piece of screen.
M.tx = -root.mouseX + 1;
M.ty = -root.mouseY + 1;
// Clear the BitmapData and capture the 3x3 piece under the mouse pointer.
BD.fillRect(R, 0xFFFFFFFF);
BD.draw(root, M, null, null, R);
// Read the pixel color value at the center of 3x3 and return it.
return BD.getPixel(1, 1);
// This function fixes the hexabinary value with leading
// zeroes if the color value is too small (like 0 = black).
function addZeroes(value:uint, count:uint = 6):String
var result:String = value.toString(16).toUpperCase();
while (result.length < count)
result = "0" + result;
return result;
【讨论】:
以上是关于使用动作脚本 3 检测颜色的主要内容,如果未能解决你的问题,请参考以下文章