移动视频对象
Posted
技术标签:
【中文标题】移动视频对象【英文标题】:Moving the video object 【发布时间】:2014-07-30 11:14:36 【问题描述】:我正在使用 Actionscript。我使用下面的代码在舞台上有一个视频对象。我想做的是当用户将鼠标光标悬停在视频对象的边框上时,用户可以将视频对象拖出以增加其大小并放大或反之亦然。
我找不到任何示例如何做到这一点。如果有人知道 Actionscript 3,如果您能帮助我,我将不胜感激。
var cam:Camera = Camera.getCamera();
cam.setMode(350,250,15);
cam.setQuality(0, 85);
cam.addEventListener(StatusEvent.STATUS, statusHandler);
var mic:Microphone = Microphone.getMicrophone();
mic.gain = 50;
mic.rate = 11;
mic.setSilenceLevel(0, 2000);
mic.addEventListener(StatusEvent.STATUS, micStatus);
var vid:Video = new Video();
vid.width = cam.width;
vid.height = cam.height;
vid.x = 15;
vid.y =30;
vid.attachCamera(cam);
addChild(vid);
【问题讨论】:
code.tutsplus.com/tutorials/… 【参考方案1】:伪代码:
vid.addEventListener(MOUSECLICK, function1)
function1
removeEventListener(MOUSECLICK, function1)
stage.addEventListener(MOUSE_MOVE, function2)
function2
vid.addEventListener(MOUSECLICK, function3)
vid.change_scale
function3
vid.removeEventListener(MOUSECLICK, function3)
stage.removeEventListener(MOUSE_MOVE, function2)
剩下的很简单——只需要使用好的代码。
【讨论】:
抱歉,克雷格,但您的回答并未提供问题的实际答案,它只是说“在此处进行缩放”,而这正是他所要求的...... 我们对此有不同的看法。为了帮助某人学习,我认为最好给出一个战略方向,而不是一个不需要进一步思考的完整答案。这就像教某人钓鱼而不是给他一条鱼。如果你不工作,你就不会学习编程。我试图提供的帮助是添加 OP 代码中缺少的 IDEA——您需要首先单击对象以告诉它它现在可以响应 MOUSE_MOVE。看起来他需要一种策略,而不是需要有人为他编写代码。 我真的理解你,但我认为最好提供有关问题的详细信息,因为它明确表示他需要缩放部分。你没有提供任何战略方向,所以他的问题绝对没有答案。而且我还认为,通过许多关于正在发生的事情的详细信息提供完整而有意义的答案比仅仅给出指示更好。最好是举例说明而不是解释,不是吗?【参考方案2】:最好使用您所说的某种“边框”元素 - 一个悬停在视频上的简单 Sprite。你可以用一些颜色来制作它,或者如果你愿意,可以使用透明的——没有区别。您甚至可以制作“可拖动”符号。然后使用此代码:
var draggable:Sprite = new Sprite();
draggable.graphics.beginFill(0xFFFFFF, 0); // transparent
draggable.drawRect(vid.x, vid.y, vid.width, vid.height); // adjust it to fit your video
draggable.endFill();
draggable.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
draggable.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
draggable.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
private var _dragging:Boolean;
private var _initialSize:Rectangle;
private var _initialMouse:Point;
private function onMouseDown(e:MouseEvent):void // begin dragging
// get initial coordinates and dimension
_initialSize = new Rectangle(vid.x, vid.x, vid.width, vid.height);
// get the initial point where the mouse is
// to calculate the difference and so adjust the width/height of the vid
_initialMouse = new Point(e.mouseX, e.mouseY);
_dragging = true;
private function onMouseUp(e:MouseEvent):void // dragging stopped
_dragging = false;
private function onMouseMove(e:MouseEvent):void
if (!_dragging) // no drag, no scale
return;
// calculate the difference between the starting X position of the mouse
// and the current X position of the mouse. then add this difference
// to the initial width
// example: if initial width was 100, and initial mouse was clicked at 50
// after a few frames the current mouse x (e.mouseX) would be 70
// and the calc would be: 100 + (70 - 50) = 120;
vid.width = _initialSize.width + (e.mouseX - _initialMouse.x);
// adjust the size of the draggable element also,
// so you can have it the same size and click it next time properly
// if you use a "draggable" type of button at the bottom of the video
// then adjust the position, not the size
draggable.width = vid.width;
// do the same on y axis :)
// or if you want to preserve the aspect ration, you need to calculate it
// using the _initialSize variable. I'll leave this to you so you can
// put some effort and feel great when you achieve your goal :)
// just calculate the percentage difference from the width (divide)
// and then multiply the height with the same factor.. Good luck!
重要的是要知道,只要这段代码可以工作,可能会有一些错误,因为我在这里写它并且从未编译过,抱歉:)
【讨论】:
以上是关于移动视频对象的主要内容,如果未能解决你的问题,请参考以下文章