在动作3中改变目标十字准线颜色

时间:2014-06-12 17:38:31

标签: actionscript-3 flash

我陷入了一个非常基本的问题,我无法弄明白。我有4个外星人和一个用鼠标移动的十字准线。我想把我的十字准线的颜色变成红色,当它靠近其中一个人的时候。我的alienships和crosshair都是扩展movieclip的类。我在主游戏循环中的主文档类中使用它们,这是由Enter_Frame事件侦听器触发的。

这是我检查相同

的逻辑
private var objColor:ColorTransform = new ColorTransform();

private function overlayCursorMove() : void {

     var initialColor:ColorTransform = new ColorTransform();
     initialColor.color = 0xD3D3D3;

            for(var i = 0; i < alienShipArray.length; i++){
                var currentShip:AlienShip = alienShipArray[i];
                if(currentShip.getDistance(overlayCursor.x - currentShip.x, overlayCursor.y - currentShip.y) <= 30 ){
                    overlayCursor.transform.colorTransform = objColor;
                }
                else if(currentShip.getDistance(overlayCursor.x - currentShip.x, overlayCursor.y - currentShip.y) > 30 ){
                    overlayCursor.transform.colorTransform = initialColor;
                }
            }
        }

以下是AlienShip类

中的自定义getDistance函数
public function getDistance(delta_x:Number, delta_y:Number):Number
        {
            return Math.sqrt((delta_x*delta_x)+(delta_y*delta_y));
        }

overlayCursor是我的十字准线,它以我的mouseX和mouseY位置移动。我的舞台上有4个人,所有人都存放在alienShipArray中。

我只计算我的十字准线与目前的位置之间的距离,以检查它是否小于一定量来改变十字准线颜色,否则如果距离更大则将其改回以前的颜色。

令人惊讶的是,逻辑仅适用于数组中的最后一个船,当循环达到i = 3(alienShipArray [3])时。对于船的其余部分,十字准线的颜色保持不变!

1 个答案:

答案 0 :(得分:1)

当遇到交叉点时,你需要break离开你的循环,否则你的循环将继续运行而其他非交叉的外星人将导致你的条件的else if部分测试为真,你的十字准线将改回原来的颜色。

这可以解释为什么你的代码只适用于循环中的最后一个外星人,因为在那个实例中没有进一步的迭代来重置颜色。

以下内容应该这样做(未经测试):

private var objColor:ColorTransform = new ColorTransform();

private function overlayCursorMove() : void {

    var initialColor:ColorTransform = new ColorTransform();
    initialColor.color = 0xD3D3D3;

    for(var i:uint = 0; i < alienShipArray.length; i++) {

        var currentShip:AlienShip = alienShipArray[i];

        // Reset cursor back to initial color
        overlayCursor.transform.colorTransform = initialColor;

        if(currentShip.getDistance(overlayCursor.x - currentShip.x, overlayCursor.y - currentShip.y) <= 30 ) {

            // Intersection found, change the cursor color
            overlayCursor.transform.colorTransform = objColor;

            // And break out of the loop so further iterations don't reset it
            break;
        }
    }
    // No intersections found, cursor remains in its initial state
}