0

我已经搜索过,但根本找不到我需要的东西(如果存在的话)。

  1. 一个窗口将有一张大图片。

  2. 图片将被划分为区域(例如在地图上分隔各州的边界线)。

  3. 当一个人在一个区域内点击时,我会引发相应的事件。

我已经将 AS3 与 MXML 一起使用来创建数据库程序。除了最后一步,一切都很好。当他点击或触摸时,我无法弄清楚用户如何在图片的特定区域内。

我已经阅读并尝试提出一种方法,并且必须(希望如此)比我想出的混乱废话更简单。

谢谢

VL

4

2 回答 2

0

你是用flash Professional CS6画的吗?如果是这样,那么为什么不能只将图片作为符号,然后自行划分线并将这些划分的区域制作为图片符号的子符号。您可以将各个状态符号保留在它们所在的位置,以便它们与整体情况保持一致。

第一个想法是通过代码创建此图片符号的实例,然后循环该图片的所有子元素并为每个子元素添加一个单击事件。

var picture:Picture=new Picture();
for(var i:int=0; i<picture.numChildren-1; i++){
 picture.getChildAt(i).addEventListener(MouseEvent.CLICK, mouseEventHandler);
}

如果我遗漏了什么,请发表评论,或者这不起作用。

编辑

好吧,如果您知道图像的尺寸,您可以将其宽度和高度除以 3(您的行数和列数),这就是您的区域尺寸。然后,您可以将鼠标的单击点相对于图片的左上角,然后将其宽度除以区域,将其高度除以区域高度,然后得到它的整数地板值,您可以得到它是哪个区域。将其编码如下:

    //This is all for a constat region list (like a window, or floor tiles, not things irregular)

import flash.display.Sprite;
var regionsX:int = 3; //Your number of windows across the row
var regionsY:int = 3; // across the column
var regions:Array = new Array(); // an array to hold the values that you will get from where the user clicks
// All of this used a 2D array method
for(var x:int = 0; x < regionX; x++) {
    regions[regionsX] = new Array(); 
    for(var y:int = 0; y < regionY; y++) {
        regions[regionsX][regionsY] = "region(".concat(x).concat(",").concat(y);
        // Here you make this equal to anything you want to get a value of, 
        //once the correct region is found (I just have a string version here for an example)
    }
}
... // other stuff..

var picture:Picture = new Picture(); // your window picture
var regionWidth:Number = picture.width / regionsX; // Gets each region's width
var regionHeight:Number = picture.height / regionsY; // Get each regoin's height
...
picture.addEventListener(MouseEvent.CLICK, mouseEventListener); // add a click listener to the picture

function mouseEventListener(event:MouseEvent):void{
    var mouseX:Number = picture.globalToLocal(event.stageX); // gets where the user clicked, and then converts it
    //to the picture's cordinate space. ( 50,100 acording to the stage, could be (25,200) to the picture)
    var mouseY:Number = picture.globalToLocal(event.stageY); // same for the Y

    var regionIntX:Number = Math.floor(mouseX / regionWidth); // Dives the point by each region's width, and then
    // converts it to a while integer. (For instance, if a region's width is 100 and you click at 288, then if you do the
    // math, you clicked in the 3rd region, but it returns 2... why? (becaue the array counter starts at 0, so 0 is the 1st
    //  region, 1 is the second and so on...
    var regionIntY:Number = Math.floor(mouseY / regionHeight); // Same for Y

    var yourValue:String = regions[regionIntX][regionIntY]; // This returns that you initialy put into your 2d array
    // by using the regionIntX and regionIntY for the array values. You have to decide what is stored in this array...
}
于 2013-10-24T20:01:27.737 回答
0

最简单的解决方案是将 MouseEvent.CLICK 的事件侦听器添加到图片并在处理程序中检查图片的属性 mouseX 和 mouseY。在 XML 或类似文件中定义每个区域的边界,并检查当前 mouseX/Y 以查看单击了哪个区域。

于 2013-10-24T21:25:01.280 回答