PDA

Просмотр полной версии : проверка положения мыши над графическим объектом


Svoy4
07.06.2012, 12:11
есть графические объекты не имеющие события мыши - например shape.
( кто не любит shape прошу не реагировать на тему и не предлагать использовать sprite)
но хочется прикрутить одно событие к объектам не имеющие их:
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;

public class Main extends Sprite
{
public function Main():void
{
stage.addEventListener(MouseEvent.CLICK, proba);
function proba(e:MouseEvent):void {
for (var nn:int = 0 ; nn < 20; nn++) {
if (vv[nn].hitTestPoint(mouseX,mouseY)) {trace(nn)}
}
}
var vv:Array = new Array;
for (var nn:int = 0 ; nn < 20; nn++) {
vv[nn] = new Shape();
vv[nn].graphics.beginFill(0);
vv[nn].graphics.drawCircle(10, 10, 10);
vv[nn].x = math.random() * 200;
vv[nn].y = math.random() * 200;
addChild(vv[nn]);

}
}

}
}
объяснение кода:
проверил кликает ли мышь и пересекаются координаты shape и мыши в этот момент.
( проверку можно провести через for(var i in this) { if(typeof(this[i])=="shape") { if (this[i].hitTestPoint...,
но мне удобнее через массив)
у меня вопрос, что еще надо (можно) проверить
- что бы узнать, что мышь находиться именно над изображением, а не над shape?
Вот когда кликаешь по sprite срабатывает только над графикой, так же хочется и над shape
помогите пожалуйста!

Hauts
07.06.2012, 12:20
Измените math.random() на Math.random().

В вашем случае можно попробовать отрисовать все шэйпы в битмапдату и проверять цвет пикселя. Смотрите пример, если что не понятно — спрашивайте.

import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.BitmapData;


var vv:Array = new Array();
for (var nn:int = 0; nn < 20; nn++) {
vv[nn] = new Shape();
vv[nn].graphics.beginFill(0);
vv[nn].graphics.drawCircle(10, 10, 10);
vv[nn].x = Math.random() * 200;
vv[nn].y = Math.random() * 200;
addChild(vv[nn]);
}
var bitmap:BitmapData = new BitmapData(this.width,this.height,true,0x00000000);
bitmap.draw(this);


stage.addEventListener(MouseEvent.CLICK, proba);
function proba(e:MouseEvent):void {
for (var nn:int = 0; nn < 20; nn++) {
if (vv[nn].hitTestPoint(mouseX,mouseY)) {
//trace(nn);
if (bitmap.getPixel32(mouseX,mouseY) != 0x00000000) {
trace(nn);
}
}
}
}

Svoy4
07.06.2012, 12:30
прошу прощения
не врубился сразу в описание hitTestPoint (и не по тестил, не по эксперементровал)
hitTestPoint(mouseX,mouseY,true) и заработало как надо

Добавлено через 45 секунд
...
спасибо

Hauts
07.06.2012, 12:37
Не за что. Я сам не знал про третий параметр hitTestPoint, так как с этим не работал еще.

"по тестил" и "по эксперементровал" слитно пишутся.