制作闪国家地图(Making a flash country map)

2019-10-18 07:28发布

你好,我想使欧洲的闪光地图,当你鼠标或出每个国家的事情会发生,如改变这个国家的颜色。

看到该图片

如果我翻身挪威和瑞典随后,瑞典不会因为挪威的边框是瑞典的顶部设置为蓝色,所以我必须去低一点翻身瑞典,它不会与挪威instersect。

有没有更好的方式来实现相同的功能? 喜欢使用位图像素。

我在PNG格式的所有cointries的精灵表。 我嵌入此sprite片和比创建使用copyPixels的Sprite AS3类()以从子画面片INNET可变的BitmapData复制。

这里是我的课

  public class Country extends Sprite 
  {
    private var newBitmap:Bitmap;
    private var tintColor:Color = new Color();

    public function Country(bitmapData:BitmapData) 
    {
        newBitmap = new Bitmap(bitmapData);

        tintColor.setTint (0x0000ff, 0.6);

        this.useHandCursor = true;
        this.buttonMode = true;

        addEventListener(Event.ADDED_TO_STAGE, init);
    }
    private function init(e:Event):void
    {
        addChild(newBitmap);
        addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
        addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
    }

    private function onMouseOver(e:MouseEvent = null):void
    {
        newBitmap.transform.colorTransform = tintColor;
    }

    private function onMouseOut(e:MouseEvent = null):void
    {
        newBitmap.transform.colorTransform = new ColorTransform();
    }
   }

位图数据是在使用运行时copyPixels()这样创建的

 var countiresArray:Array = Resources.allCointriesJSON["frames"];
 var newX:Number = countiresArray[i]["frame"]["x"];
 var newY:Number = countiresArray[i]["frame"]["y"];
 var newW:Number = countiresArray[i]["frame"]["w"];
 var newH:Number = countiresArray[i]["frame"]["h"];
 bitmapData .copyPixels(Resources.allCountries.bitmapData, new Rectangle(newX, newY, newW, newH), new Point(0, 0));

其中下一页末,NewY,东西方妇女网络和newH从导出JSON文件中取出正在使用TexturePacker时创建

Answer 1:

如果没有转换您的国家形象的载体,你将需要检查下鼠标像素的α值以获得准确的交互。 幸运的是,其他人已经书面和开源了一个实用程序,应该做的工作: InteractivePNG 。

你只需要把你的位图内InteractivePNG实例,而不是一个Sprite



Answer 2:

我有一个类似的问题,但有一个互动的对象。 解决的办法是有一个充当地图的点击一个图像。 这是在OpenGL用于检测三维物体和场景的点击次数的技术。

例如,在你的情况,你必须与所有国家的形象。 该图像不会在显示列表中加载。 每个国家将有一个确切的不同的颜色。 例如瑞典会0xff0000 ,挪威0x00ff00等让我们把这种形象colored-map.jpg

然后,点击后Europe-map.jpg ,用户看到的人,你会检查鼠标坐标,然后去看看在colored-map.jpg知道被点击的像素的颜色。 然后,你会知道用户点击了哪个国家,并可能覆盖的Norway.png

该技术在性能方面具有很多显示列表PNG图像的方式更好。 在任何时候,你只会有Europe-map.jpg ,所选择的国家,也许1 PNG,然后colored-map.jpg加载到一个Bitmap对象。 如果你的目标的移动性能优化是必须的。

勾选此功能。 它只是作为一个例子让你去...这不是一个完整的实现。

var countriesArray = [{color:0xff0000, image:"Norway.png"},{color:0x00ff00, image:"Sweden.png"}];

public function checkPoint(mouseX,mouseY):String {
    var testPixel:uint = coloredMap.bitmapData.getPixel(mouseX,mouseY);

    for (var country in countriesArray) {
        if( country.color == testPixel ) {
            return country.image;
        }
    }

    return null;
}


文章来源: Making a flash country map