我想检查颜色=某种颜色,然后适当地反应。这在闪存AS3中完成。检查对象的颜色if语句中的Actionscript 3
我已经得到了代码 if(cal_mc.color == 0x0000FF) { p1score = p1score + 25;
(cal_mc为对象)
它执行没有任何错误,但不起作用。 任何人都可以告诉我我做错了if语句吗?最好保持代码尽可能简单。
我想检查颜色=某种颜色,然后适当地反应。这在闪存AS3中完成。检查对象的颜色if语句中的Actionscript 3
我已经得到了代码 if(cal_mc.color == 0x0000FF) { p1score = p1score + 25;
(cal_mc为对象)
它执行没有任何错误,但不起作用。 任何人都可以告诉我我做错了if语句吗?最好保持代码尽可能简单。
据我所知,您在代码中使用简单的MovieClip
对象(cal_mc的类型为MovieClip
)。
简答题:MovieClip
没有财产“颜色”,所以你的第一个条件失败。
龙答:
影片剪辑的定义是动态的对象,因此,这意味着当你的代码运行,他们可以有属性定义的:
var custom:MovieClip = new MovieClip();
custom.potato = "I am a potato!"; // creates a new property "potato" and assigns it the value of "I am a potato".
trace(custom.potato); // outputs "I am a potato";
没有财产“色”上MovieClip
,所以你的条件语句在理论状态下是错误的,但实际上flash不会抛出任何错误,因为MovieClip
s可以在运行时分配属性,所以flash无法知道,如果你没有在某处定义“color”。
的是几种解决方案:
MovieClip
其中将包括color
财产和一些方法来吸引你想要的图形和逻辑,以正确的值分配给color
属性时绘图完成。MovieClip
是一个简单的形状,这是我假定它是 - 从Bitmap
小号bitmapData
渲染MovieClip
到Bitmap
对象,然后采样第一像素(因为所有简单的形状的像素的颜色相同的) 。下面是后者的代码:(此代码可能需要调整,这是一个轮廓)
function sampleColorFromDisplayObject(display:DisplayObject):uint
{
var bd:BitmapData = new BitmapData(display.width, display.height, false, 0xFF0000);
bd.draw(display, new Matrix());
var color:uint = bd.getPixel(0, 0);
bd.dispose();
return color;
}
请记住,由于各种可能的形状和大小,该代码可能需要调整和可能无法按照预期的形状工作。我已经通过使bitmapData具有较大的尺寸并对第一个像素进行采样来解释flash IDE中定义的某些类型的圆形和形状,从而使代码尽可能以大量形状工作。
我会扩展这个答案来提及`movieclip.transform.colorTransform.color`属性,以防万一任何使用代码进行颜色转换或在IDE中设置。 – package 2011-12-16 12:23:36