Увеличить и уменьшить, используя AS3
-
25-09-2019 - |
Вопрос
Вы все знаете: «Щелкните правой кнопкой мыши -> Увеличить или выйти» в Flash File, ну, мне нужно сделать это, но, например, используя, например, нажав кнопку.
Это возможно, используя только код AS3?
Спасибо!
Решение
Вы должны поместить всю свою графику в спрайт, например «сцена», а затем изменить масштаб ...
Другие советы
Не так далеко, как я знаю. Любопытно видеть другие ответы, хотя.
Одна хакей, которая приходит к уму, возможно, вы можете использовать JavaScript для управления Div, содержащий SWF, так что Div становится большим (увеличить), но отображается в рамках прямоугольника «Scrollrect». Вы бы назвали функцию JavaScript сделать это, используя ExternalInterface.
Quick'n'direty Test I использовал компонент Slash Scrollpane:
//zoomIn,zoomOut = button
//sp = scrollPane, scrollDrag = true
zoomIn.addEventListener(MouseEvent.CLICK, zoom);
zoomOut.addEventListener(MouseEvent.CLICK, zoom);
function zoom(event:MouseEvent) {
var scale:Number = event.currentTarget == zoomIn ? 1 : -1;
sp.content.scaleX += scale;
sp.content.scaleY += scale;
sp.update();
}
Затем я заметил, что вы используете Flex, поэтому обязательно должен быть контейнер AA, который позволит вам подобное функциональность.
Х-е, Джордж
Я бы использовал Scalex и масштабировать также, но просто с номером вместо решения Джорджа с VAR. Итак, что-то вроде
zoomInButton.addEventListener(MouseEvent.MOUSE_DOWN, zoomIn);
zoomOutButton.addEventListener(MouseEvent.MOUSE_DOWN, zoomOut);
function zoomIn(e:MouseEvent) {
//actions for zoom-in function
myPicture.scaleX += 10;
myPicture.scaleY += 10;
}
function zoomOut(e:MouseEvent) {
//actions for zoom-out function
myPicture.scaleX += 10;
myPicture.scaleY += 10;
}
Вы можете наткнуться на другое препятствие, что это то, что изображение масштабируется из верхнего левого угла. В этом случае попробуйте переместить изображение с масштабированием. Нравиться
function zoomIn(e:MouseEvent) {
//actions for zoom-in function
myPicture.scaleX += 10;
myPicture.scaleY += 10;
myPicture.x -= 5;
myPicture.y -= 5;
}
На самом деле, если вы хотите масштабировать / Zoomin / Zoomout стадию или видеообъектом или что-то еще, умножьте и разделите вместо этого. Как это (это то, что я использовал, когда мне нужно было создать функциональность Zoomin / Zoomeout для веб-камеры - цифровой зум, курс, используя функциональность масштаба):
Предположим, что:
video_width = 640;
video_height = 480;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.stageWidth = video_width;
stage.stageHeight = video_height;
camera = Camera.getCamera();
// some other params
video = new Video( video_width, video_height );
video.attachCamera(camera);
addChild(video);
// to mirror webcam output:
video.scaleX = -1;
video.scaleY = 1;
video.x = video_width;
video.y = 0;
public function zoom(action:String = 'reset')
{
var step = 1.1, // adjust this multiplyer for faster zoom. Eg. 1.2, 1.5, etc.
x_offset = 0,
y_offset = 0;
if (action == 'in')
{
video.scaleX *= step;
video.scaleY *= step;
x_offset = (stage.stageWidth - video.width)/2;
y_offset = (stage.stageHeight - video.height)/2;
// to center video object on stage by X if mirror effect is used
video.x = stage.stageWidth - x_offset;
// to center video object on stage by X - no mirror
// video.x = x_offset;
video.y = y_offset; // to center video object on stage by Y
}
else if (action == 'out')
{
video.scaleX /= step;
video.scaleY /= step;
x_offset = (stage.stageWidth - video.width)/2;
y_offset = (stage.stageHeight - video.height)/2;
video.x = stage.stageWidth - x_offset;
video.y = y_offset;
}
else
{
// need to be mirrored
video.scaleX = -1;
// no mirror
// video.scaleX = 1;
video.scaleY = 1;
// if mirror video output
video.x = stage.stageWidth;
// no mirroring used
// video.x = 0;
video.y = 0;
}
}
Теперь вы используете это, прикрепив эту функцию к кнопкам:
zoom('in');
zoom('out');
zoom('reset'); // reset zoom