ActionScript - cómo llamar a dos .as desde un archivo .fla

 
Vista:

cómo llamar a dos .as desde un archivo .fla

Publicado por Patricia (1 intervención) el 25/02/2013 16:28:43
Buenos días, os quería pedir ayuda con una cosa para un trabajo para la universidad, lo primero pedir perdón porque estoy muy verde en el tema y a lo mejor no uso bien todos los términos. He intentado primero encontrar lo que necesito en google pero nada.

He descargado de unos tutoriales para hacer realidad aumentada los códigos, y se trata de un archivo flash Eart.fla unido a uno de actionscript Earth.as, que compilo en el swf y todo funciona bien. Por otro lado tengo otro para poder hacer fotos con flash y que se suban al servidor, tambien con su archivo Webcam.fla y su Webcam.as. Cada uno por separado funciona.

La cosa es que quiero combinar ambos códigos para que funcione a la vez la realiadad aumentada y el hacer la foto, pero nose como combinarlos. No entiendo casi de programación en .as pero he leido que tiene que ir cada uno en .as porque son clases diferentes, pero ¿cómo hago para que desde un solo fla (luego swf) llame a los dos archivos .as?

Os pongo los códigos por si ayuda:

Earth.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package {
 
	import flash.events.Event;
	import Earth;
	import org.papervision3d.objects.parsers.DAE;
 
	public class Earth extends PV3DARApp {
 
		private var _earth:DAE;
 
		public function Earth() {
			this.init('Data/camera_para.dat', 'Data/flarlogo.pat');
		}
 
		protected override function onInit():void {
			super.onInit();
 
			this._earth = new DAE();
			this._earth.load('model/Nevermore.dae');
			this._earth.scale = 5;
			this._earth.rotationX = -90;
			this._baseNode.addChild(this._earth);
 
			this.addEventListener(Event.ENTER_FRAME, this._update);
		}
 
		private function _update(e:Event):void {
			this._earth.rotationZ += 0.5
		}
	}
}



Webcam.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
package {
 
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
    import flash.events.*;
	import flash.utils.*;
    import flash.media.Camera;
    import flash.media.Video;
	import flash.external.ExternalInterface;
	import flash.net.*;
	import flash.system.Security;
    import flash.system.SecurityPanel;
	import flash.media.Sound;
    import flash.media.SoundChannel;
	import flash.geom.Matrix;
	import com.adobe.images.JPGEncoder;
 
 
    public class Webcam extends Sprite {
        private var video:Video;
		private var encoder:JPGEncoder;
		private var snd:Sound;
		private var channel:SoundChannel = new SoundChannel();
		private var jpeg_quality:int;
		private var video_width:int;
		private var video_height:int;
		private var server_width:int;
		private var server_height:int;
		private var camera:Camera;
		private var bmp:Bitmap;
		private var bmpdata:BitmapData;
		private var url:String;
		private var stealth:int;
 
        public function Webcam() {
			// class constructor
			flash.system.Security.allowDomain("*");
			var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
			video_width = Math.floor( flashvars.width );
			video_height = Math.floor( flashvars.height );
			server_width = Math.floor( flashvars.server_width );
			server_height = Math.floor( flashvars.server_height );
 
            stage.scaleMode = StageScaleMode.NO_SCALE;
			// stage.scaleMode = StageScaleMode.EXACT_FIT;
            stage.align = StageAlign.TOP_LEFT;
			stage.stageWidth = Math.max(video_width, server_width);
			stage.stageHeight = Math.max(video_height, server_height);
 
			// Hack to auto-select iSight camera on Mac (JPEGCam Issue #5, submitted by manuel.gonzalez.noriega)
			// From: http://www.squidder.com/2009/03/09/trick-auto-select-mac-isight-in-flash/
			var cameraIdx:int = -1;
			for (var idx = 0, len = Camera.names.length; idx < len; idx++) {
				if (Camera.names[idx] == "USB Video Class Video") {
					cameraIdx = idx;
					idx = len;
				}
			}
            if (cameraIdx > -1) camera = Camera.getCamera( String(cameraIdx) );
            else camera = Camera.getCamera();
 
            if (camera != null) {
                camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
                video = new Video( Math.max(video_width, server_width), Math.max(video_height, server_height) );
                video.attachCamera(camera);
                addChild(video);
 
				if ((video_width < server_width) && (video_height < server_height)) {
					video.scaleX = video_width / server_width;
					video.scaleY = video_height / server_height;
				}
 
				camera.setQuality(0, 100);
				camera.setKeyFrameInterval(10);
				camera.setMode( Math.max(video_width, server_width), Math.max(video_height, server_height), 30);
 
				// do not detect motion (may help reduce CPU usage)
				camera.setMotionLevel( 100 );
 
				ExternalInterface.addCallback('_snap', snap);
				ExternalInterface.addCallback('_configure', configure);
				ExternalInterface.addCallback('_upload', upload);
				ExternalInterface.addCallback('_reset', reset);
 
				if (flashvars.shutter_enabled == 1) {
					snd = new Sound();
					snd.load( new URLRequest( flashvars.shutter_url ) );
				}
 
				jpeg_quality = 90;
 
				ExternalInterface.call('webcam.flash_notify', 'flashLoadComplete', true);
            }
			else {
                trace("You need a camera.");
				ExternalInterface.call('webcam.flash_notify', "error", "No camera was detected.");
            }
        }
 
		public function set_quality(new_quality:int) {
			// set JPEG image quality
			if (new_quality < 0) new_quality = 0;
			if (new_quality > 100) new_quality = 100;
			jpeg_quality = new_quality;
		}
 
		public function configure(panel:String = SecurityPanel.CAMERA) {
			// show configure dialog inside flash movie
			Security.showSettings(panel);
		}
 
        private function activityHandler(event:ActivityEvent):void {
            trace("activityHandler: " + event);
        }
 
		public function snap(url, new_quality, shutter, new_stealth = 0) {
			// take snapshot from camera, and upload if URL was provided
			if (new_quality) set_quality(new_quality);
			stealth = new_stealth;
			trace("in snap(), drawing to bitmap");
 
			if (shutter) {
				channel = snd.play();
				setTimeout( snap2, 10, url );
			}
			else snap2(url);
		}
 
		public function snap2(url) {
			// take snapshot, convert to jpeg, submit to server
			bmpdata = new BitmapData( Math.max(video_width, server_width), Math.max(video_height, server_height) );
			bmpdata.draw( video );
 
			if (!stealth) {
				// draw snapshot on stage
				bmp = new Bitmap( bmpdata );
				addChild( bmp );
 
				// stop capturing video
				video.attachCamera( null );
				removeChild( video );
			}
 
			// if URL was provided, upload now
			if (url) upload( url );
		}
 
		public function upload(url) {
			if (bmpdata) {
				if ((video_width > server_width) && (video_height > server_height)) {
					// resize image downward before submitting
					var tmpdata = new BitmapData(server_width, server_height);
 
					var matrix = new Matrix();
					matrix.scale( server_width / video_width, server_height / video_height );
 
					tmpdata.draw( bmpdata, matrix, null, null, null, true ); // smoothing
					bmpdata = tmpdata;
				} // need resize
 
				trace("converting to jpeg");
 
				var ba:ByteArray;
 
				encoder = new JPGEncoder( jpeg_quality );
				ba = encoder.encode( bmpdata );
 
				trace("jpeg length: " + ba.length);
 
				var head:URLRequestHeader = new URLRequestHeader("Accept","text/*");
				var req:URLRequest = new URLRequest( url );
				req.requestHeaders.push(head);
			
				req.data = ba;
				req.method = URLRequestMethod.POST;
				req.contentType = "image/jpeg";
			
				var loader:URLLoader = new URLLoader();
				loader.addEventListener(Event.COMPLETE, onLoaded);
			
				trace("sending post to: " + url);
			
				try {
					loader.load(req);
				} 
				catch (error:Error) {
					trace("Unable to load requested document.");
					ExternalInterface.call('webcam.flash_notify', "error", "Unable to post data: " + error);
				}
			}
			else {
				ExternalInterface.call('webcam.flash_notify', "error", "Nothing to upload, must capture an image first.");
			}
		}
		
		public function onLoaded(evt:Event):void {
			// image upload complete
			var msg = "unknown";
			if (evt && evt.target && evt.target.data) msg = evt.target.data;
			ExternalInterface.call('webcam.flash_notify', "success", msg);
		}
		
		public function reset() {
			// reset video after taking snapshot
			if (bmp) {
				removeChild( bmp );
				bmp = null;
				bmpdata = null;
			
				video.attachCamera(camera);
            	addChild(video);
			}
		}
    }
}


Nose si me he explicado bien... lo que necesito es que desde un solo .swf me funcionen los dos códigos. Cualquier duda preguntadme, y mil gracias por vuestra ayuda =)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Combinando realidad aumentada y captura de fotos

Publicado por Alejandro (369 intervenciones) el 28/06/2023 17:21:12
Para combinar los códigos de realidad aumentada y captura de fotos en un solo archivo .swf, debes realizar los siguientes pasos:

1. Crea un nuevo archivo ActionScript en el que combinarás ambos códigos. Puedes llamarlo "CombinedApp.as".

2. Copia el código completo de "Earth.as" y pégalo en "CombinedApp.as" antes de la declaración de la clase.

3. Asegúrate de que los paquetes y las importaciones sean correctos. Elimina la línea "import Earth;" al comienzo de "CombinedApp.as", ya que el código de "Earth.as" ya está dentro de la clase "Earth".

4. Copia todo el código de "Webcam.as" y pégalo después de la declaración de la clase en "CombinedApp.as".

5. Asegúrate de que las importaciones y los paquetes sean correctos. Elimina la línea "import Webcam;" al comienzo de "CombinedApp.as", ya que el código de "Webcam.as" ya está dentro de la clase "Webcam".

6. Asegúrate de que no haya conflictos de nombres entre las clases. Cambia el nombre de clase "Earth" en "CombinedApp.as" a "CombinedApp" para evitar conflictos con la clase del mismo nombre.

7. Asegúrate de que el método constructor de "CombinedApp" tenga el mismo nombre que la clase, es decir, "public function CombinedApp()".

8. Dentro del método constructor "CombinedApp", reemplaza la línea "this.init('Data/camera_para.dat', 'Data/flarlogo.pat');" con la línea "super.init('Data/camera_para.dat', 'Data/flarlogo.pat');". Esto asegurará que se llame al método "onInit" correcto.

9. Asegúrate de que los nombres de los métodos de inicialización sean consistentes en ambos códigos. Por ejemplo, "onInit" en "CombinedApp.as" y "_update" en "CombinedApp.as".

Una vez que hayas realizado estos pasos, deberías tener un archivo "CombinedApp.as" que contenga ambos códigos de realidad aumentada y captura de fotos. Compila este archivo en un archivo .swf utilizando tu entorno de desarrollo de ActionScript.

Recuerda que este proceso puede requerir ajustes adicionales dependiendo de cualquier dependencia adicional o configuraciones específicas de tu proyecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar