2011-12-16 31 views
1

我想检查颜色=某种颜色,然后适当地反应。这在闪存AS3中完成。检查对象的颜色if语句中的Actionscript 3

我已经得到了代码 if(cal_mc.color == 0x0000FF) { p1score = p1score + 25;

(cal_mc为对象)

它执行没有任何错误,但不起作用。 任何人都可以告诉我我做错了if语句吗?最好保持代码尽可能简单。

回答

4

据我所知,您在代码中使用简单的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渲染MovieClipBitmap对象,然后采样第一像素(因为所有简单的形状的像素的颜色相同的) 。

下面是后者的代码:(此代码可能需要调整,这是一个轮廓)

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中定义的某些类型的圆形和形状,从而使代码尽可能以大量形状工作。

+0

我会扩展这个答案来提及`movieclip.transform.colorTransform.color`属性,以防万一任何使用代码进行颜色转换或在IDE中设置。 – package 2011-12-16 12:23:36