【发布时间】:2011-12-16 10:57:18
【问题描述】:
我想检查颜色是否=某种颜色然后适当地做出反应。这是在 Flash AS3 中完成的。
我得到的代码是
if(cal_mc.color == 0x0000FF) {
p1score = p1score + 25;
(cal_mc 为对象)
它执行没有任何错误,但不起作用。 谁能告诉我我在 if 语句中做错了什么? 最好让代码尽可能简单。
【问题讨论】:
标签: flash actionscript-3
我想检查颜色是否=某种颜色然后适当地做出反应。这是在 Flash AS3 中完成的。
我得到的代码是
if(cal_mc.color == 0x0000FF) {
p1score = p1score + 25;
(cal_mc 为对象)
它执行没有任何错误,但不起作用。 谁能告诉我我在 if 语句中做错了什么? 最好让代码尽可能简单。
【问题讨论】:
标签: flash actionscript-3
据我了解,您在代码中使用了一个简单的 MovieClip 对象(cal_mc 的类型为 MovieClip)。
简答:MovieClip 上没有属性“color”,所以你的第一个条件不成立。
长答案:
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 不会抛出任何错误,因为MovieClips 可以在运行时分配属性,所以 flash不知道,如果你没有在某处定义“颜色”。
有几个解决方案:
MovieClip 的自定义类,该类将包含color 属性和一些绘制所需图形的方法,以及在绘制完成时为color 属性分配正确值的逻辑。
MovieClip 是一个简单的形状,我假设它是 - 将MovieClip 渲染到Bitmap 对象,然后对第一个像素进行采样(因为简单形状的所有像素都是相同的颜色) 来自Bitmaps bitmapData。这是后者的代码:(此代码可能需要调整,它是一个大纲)
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 中的任何颜色转换。