ActionScript - Obtener las coordenadas de origen del stage principal desde una clase

 
Vista:

Obtener las coordenadas de origen del stage principal desde una clase

Publicado por Manuel (1 intervención) el 12/12/2015 02:14:14
Hola a todos:

Tengo la siguiente estructura en un archivo .fla:

Stage->MovieClip1->Movieclip2

Lo que requiero es hacer es limitar el movimiento del MovieClip2, teniendo como límite el tamaño del Stage (sin que se salga del Stage). He intentado hacer lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var mag_bounds:Rectangle = getBounds(stage);
 
			var stage_bounds:Rectangle =  new Rectangle(0, 0, stage.stageWidth, stage.stageHeigh);//área de movimiento respecto al stage, aqui requiero que 0, 0 sea la coordenada del stage no del MovieClip2
 
			var orig_element_bounds:Rectangle;
			var element_bounds:Rectangle;
 
			switch (_getmagnifyingMoveLimitType) {
				case "NONE":
					_bounds = null;
				break;
 
				case "STAGE":
					if (_originalElement != null) {
						orig_element_bounds = _originalElement.getBounds(stage);
						element_bounds = new Rectangle(orig_element_bounds.x - mag_bounds.width / 2, orig_element_bounds.y - mag_bounds.height / 2, orig_element_bounds.width, orig_element_bounds.height);
 
				       }
					_bounds = _originalElement != null ? stage_bounds.intersection(element_bounds) : stage_bounds; //intersección del MovieClip2 (original Element) con los límites del stage
				break;

El problema es que se limita solo al Movieclip2 a partir de su coordenada 0,0 y no desde el stage. Lo que requiero es obtener las coordenadas.

Espero puedan ayudarme.

Saludos
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

Limitar el movimiento del MovieClip2 dentro del Stage

Publicado por Alejandro (369 intervenciones) el 28/06/2023 22:10:29
Para limitar el movimiento del MovieClip2 dentro del Stage, puedes utilizar las coordenadas del Stage en lugar de las coordenadas locales del MovieClip2. Aquí hay una posible solución:

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
var mag_bounds:Rectangle = getBounds(stage);
 
var stage_bounds:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
 
var orig_element_bounds:Rectangle;
var element_bounds:Rectangle;
 
switch (_getmagnifyingMoveLimitType) {
    case "NONE":
        _bounds = null;
        break;
 
    case "STAGE":
        if (_originalElement != null) {
            orig_element_bounds = _originalElement.getBounds(stage);
            element_bounds = new Rectangle(orig_element_bounds.x - mag_bounds.width / 2, orig_element_bounds.y - mag_bounds.height / 2, orig_element_bounds.width, orig_element_bounds.height);
 
            // Obtener las coordenadas del Stage en lugar de las del MovieClip2
            var stageToLocal:Point = _originalElement.globalToLocal(new Point(stage.stageWidth / 2, stage.stageHeight / 2));
            stage_bounds.x = stageToLocal.x - mag_bounds.width / 2;
            stage_bounds.y = stageToLocal.y - mag_bounds.height / 2;
        }
        _bounds = _originalElement != null ? stage_bounds.intersection(element_bounds) : stage_bounds;
        break;
}

En este código, utilizamos la función `globalToLocal()` para convertir las coordenadas globales del Stage al sistema de coordenadas local del MovieClip2. Luego, actualizamos las coordenadas `x` e `y` de `stage_bounds` con las coordenadas convertidas.

De esta manera, los límites de movimiento se ajustarán correctamente en relación con el Stage en lugar de basarse únicamente en las coordenadas locales del MovieClip2.

Espero que esta solución te sea útil. ¡Buena suerte con 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