Я делаю игру-головоломку во Flash CS5 / AS3, которая может иметь пользовательские формы головоломки.По сути, пользователь может нарисовать основные выступы головоломки.Затем я создаю черно-белый фрагмент головоломки с пользовательской функцией, такой как
var piece:PuzzlePiece= new PuzzlePiece(true,true,false,false);
. PuzzlePiece - это класс, расширяющий Sprite.Четыре аргумента соответствуют четырем сторонам части головоломки (вверх, вниз, влево, вправо).Если аргумент верен, это означает, что выступ должен торчать с той стороны кусочка головоломки.Если это неверно, у него должно быть отверстие на той стороне, чтобы оно соответствовало выступу.
Сначала я прикрепляю выступы, которые торчат, затем я переворачиваю выступы, которые втыкаются, прикрепляю их к новому спрайту (in_part) иинвертируйте их с помощью следующей функции:
in_part=invertSprite(in_part,in_part.widht,in_part.height);
function invertSprite(source:Sprite, width: int, height: int) {
var child:Shape = new Shape();
child.graphics.beginFill(0xFFFFFF);
child.graphics.lineStyle();
child.graphics.drawRect(0, 0, width,height);
child.graphics.endFill();
var cont:Sprite = new Sprite();
cont.addChild(child);
cont.addChild(source);
source.blendMode = BlendMode.ERASE;
cont.blendMode = BlendMode.LAYER;
return cont;
}
Я объединяю две части, и в результате получается черно-белый кусочек головоломки.
Затем я хочу применить этот кусок как маску к частизагруженного изображения.
puzzleImg = Bitmap(loader.content).bitmapData; // this is the .jpg image
var width = piece.width; // piece is black and white Sprite in the shape of the puzzle
var height = piece.height;
var puzzlePc:BitmapData = new BitmapData(width,height,true,0);
puzzlePc.draw(puzzleImg);
disp = new Bitmap(puzzlePc);
tmp.addChild(disp); //tmp is the main, holding Sprite
addChild(piece);
disp.mask = piece;
disp.cacheAsBitmap = true;
piece.cacheAsBitmap = true;
tmp.mouseChildren = false;
Это все работает нормально, за исключением того, что отверстия в частях головоломки (прозрачные части, в которые должны помещаться другие части головоломки) реагируют на щелчки мыши, и это, очевидно, не хорошо длямое намерение.
Я пытаюсь решить эту проблему уже пару дней, но я не совсем понимаю, почему это происходит.
Есть идеи?