Моя задача - закодировать флэш-приложение, которое позволяет пользователю сделать снимок с помощью веб-камеры, прикрепить его к мувиклипу и изменить собственный портрет, добавив волосы, шляпы, очки и т. Д. доступны в меню.AS3 - Присоединение видео для веб-камеры к мувиклипу
Я просто пытаюсь изменить две большие скрипты: Для веб http://www.riacodes.com/flash/captures-images-from-the-webcam-and-save-them-to-the-desktop/ и функция перетаскивания & будет использовать Free Transform Tool http://blog.ryantan.net/2010/08/free-transform-manager/.
Мне удалось получить веб-камеру, когда я использовал ее как класс документа. Когда я изменил свой код, чтобы код Free Transform Tool находился в классе документа, а скрипт веб-камеры находится в файле Webcamactions.as, я больше не могу управлять мувиклипами ... мувиклипы (например, «imagecanvas», где я прикрепляю видео). Индикатор веб-камеры в Mac указывает, что функция работает, но видео не отображается в мувиклипе.
ДОКУМЕНТ КЛАСС ---------- TestFTM.as
package {
import Webcamactions;
import com.ryan.geom.FreeTransformEvent;
import com.ryan.geom.FreeTransformManager;
import fl.controls.CheckBox;
import fl.motion.easing.Circular;
import fl.motion.MatrixTransformer;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.text.TextField;
import flash.ui.Mouse;
public class TestFTM extends MovieClip {
public var myVar:Webcamactions = new Webcamactions();
private static var _instance:TestFTM;
public static function get instance():TestFTM {
return _instance;
}
public var fts:FreeTransformManager;
public function TestFTM():void {
_instance = this;
// Set up FreeTransformManager
fts = new FreeTransformManager(false);
// Register objects
fts.registerSprite(box, { minW:50, maxW:500 });
}
}
}
КАМЕРА КЛАСС ------- Webcamactions.as
package {
import flash.display.Sprite;
import flash.media.Camera;
import flash.media.Video;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.net.FileReference;
import flash.utils.ByteArray;
import com.adobe.images.JPGEncoder;
import flash.display.MovieClip;
public class Webcamactions extends MovieClip
{
public var camera:Camera = Camera.getCamera();
public var video:Video = new Video();
public var bmd:BitmapData = new BitmapData(400,480);
public var bmp:Bitmap;
public var fileReference:FileReference = new FileReference();
public var byteArray:ByteArray;
public var jpg:JPGEncoder = new JPGEncoder();
public var nowebcam:MovieClip = new MovieClip();
public var capture:MovieClip = new MovieClip();
public var imagecanvas:MovieClip = new MovieClip();
public var mask_object:MovieClip = new MovieClip();
public function Webcamactions():void {
nowebcam.visible = false;
capture.addEventListener(MouseEvent.MOUSE_UP, captureImage);
if (camera != null)
{
camera.setMode(640,480,30,false); // setMode(videoWidth, videoHeight, video fps, favor area)
video.smoothing = true;
video.attachCamera(camera);
video.width = 640;
video.height = 480;
video.x = -120;
video.y = 0;
imagecanvas.addChild(video);
}
else
{
nowebcam.visible = true;
trace("No Camera Detected");
}
}
public function captureImage(e:MouseEvent):void
{
bmd.draw(video);
while (imagecanvas.numChildren) {
imagecanvas.removeChildAt (0);
}
bmp = new Bitmap(bmd);
trace(bmp.width);
trace(bmp.height);
bmp.width=800;
bmp.height=960;
bmp.x = -120;
imagecanvas.addChild(bmp);
capture.visible = true;
}
}
Я стараюсь быть я понимаю, насколько я могу оценить, если кто-нибудь может дать мне несколько советов, как продолжить. Заранее спасибо.
Я не знаю, решит ли это вашу проблему, но я рекомендую вам инициировать переменные, такие как camera = Camera.getCamera() и т. Д., В функции конструктора Webcamactions, а не непосредственно там, где они объявлены , Кроме того, функции-конструкторы обычно не объявляются возвращающими void, но остаются без возвращаемого типа (их можно рассматривать как возвращающие экземпляр класса, хотя он не объявлен). –