У меня есть сетка из множества квадратов 10х10 пикселей, разделенных только линией пикселей. Когда пользователь переворачивает спрайт, он увеличивается, анимируясь примерно в 4 раза больше - примерно до 40x40 пикселей. Спрайт остается большим, пока мышь находится над спрайтом, но если пользователь хочет переворачивать соседний спрайт, он скрывается этим спрайтом и его большим размером.
Можно ли уменьшить размер области попадания, чтобы, хотя спрайт увеличивался в размере, мышь все еще могла получить доступ или вызвать соседние спрайты внизу - справа, слева, сверху, снизу? Я думал об использовании Mouse_move, но не был уверен, что это вызовет слишком много событий.
Я прочитал следующие посты. Тем не менее, мой hitArea должен быть того же размера или чуть больше, чем оригинальный спрайт 10x10 пикселей. У меня был небольшой успех.
Не уверен, имеет ли это значение: я работаю с классом ActionsScript внутри проекта Flex. Основной файл класса - mxml.
Маршрутизация событий мыши через спрайт в ActionScript 3
AS3: определение области попадания
public function onRollOver(event:MouseEvent):void
{
//do a bunch of stuff
timerUp.start();
timerUp.addEventListener(TimerEvent.TIMER, growSquare);
}
private function growSquare(e:TimerEvent):void
{
var maxSize:Number = 40;
if (currSprite.width < maxSize) {
currSprite.width++;
currSprite.height++;
if (currSprite.width > maxSize) {
currSprite.width = maxSize;
currSprite.height = maxSize;
}
e.updateAfterEvent();
} else {
timerUp.stop();
}
}
/////////Hit Area Code - From Square Object //////////////////
var vHeight:Number = 10;
var vWidth:Number = 10;
var square:Sprite = new Sprite();
square.graphics.beginFill(0x000000);
square.graphics.drawRect(0, 0, vWidth, vHeight);
square.graphics.drawRect(-vWidth/2, -vHeight/2, vWidth, vHeight);
square.graphics.endFill();
// try to decrease the hit area, or keep it at the original size
const hitArea:Sprite = new Sprite()
hitArea.graphics.beginFill( 0xFFFFFF );
hitArea.graphics.drawRect(-vWidth/2, -vHeight/2, vWidth, vHeight);
hitArea.mouseEnabled = false;
hitArea.visible = false;
hitArea.x = square.x
hitArea.y = square.y
square.hitArea = hitArea;
addChild( square );
addChild( hitArea );