ActionScript - Ayuda con script para repetir una condición

 
Vista:
Imágen de perfil de Jorge Adrián

Ayuda con script para repetir una condición

Publicado por Jorge Adrián (1 intervención) el 23/10/2017 22:57:58
Que tal a todos, soy nuevo en la programación con ActionScript 3.0. Estoy trabajando con un pequeño proyecto y hasta la primera prueba con un elemento funciona como debe, el problema es que al hacerlo con el segundo y no se diga ya con los que faltan ya no supe como hacerlo.

Aquí el ejemplo:

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
import flash.events.*
//Posición para un rectangulo con texto
in1.x = 121;
in1.y = 705;
 
//al presionar clic se arrastra el rectángulo de texto
in1.addEventListener(MouseEvent.MOUSE_DOWN, arrastrar);
function arrastrar(e: MouseEvent) {
	in1.startDrag();
}
//al soltar clic suelta el rectángulo
in1.addEventListener(MouseEvent.MOUSE_UP, soltar);
 
//Función para que al soltarlo verifique si hay colisión 
//con un rectángulo y sila hay de valor 1 a una caja de
//texto dinámico, si no la deja en blanco.
function soltar(e: MouseEvent) {
	in1.stopDrag();
	if (in1.hitTestObject(inivel1)) {
		icont1.text = "1";
	}
	else
	{
		icont1.text = "";
	}
 
}


Mi problema es que quiero repetir la condición para detectar la colisión con otros 7 rectángulos y que en cada uno me de un valor diferente en la casilla de texto dinámico. Tal vez sea bastante sencillo pero no se como hacerlo. Agradecería bastante su 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

Detectar colisión con múltiples rectángulos

Publicado por Alejandro (369 intervenciones) el 29/06/2023 16:48:00
Para repetir la condición de detección de colisión con varios rectángulos y asignar valores diferentes a las cajas de texto dinámicas, puedes utilizar un enfoque de lista/array para almacenar los rectángulos y las cajas de texto correspondientes. Aquí tienes un ejemplo de cómo puedes hacerlo:

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
import flash.events.*;
 
// Crear una lista de rectángulos y cajas de texto
var rectangulos:Array = [inivel1, inivel2, inivel3, inivel4, inivel5, inivel6, inivel7];
var cajasTexto:Array = [icont1, icont2, icont3, icont4, icont5, icont6, icont7];
 
// Asignar las posiciones iniciales de los rectángulos
var posicionesIniciales:Array = [
    {x: 121, y: 705}, // Posición del primer rectángulo
    // Agrega aquí las posiciones de los otros rectángulos
    // {x: <valor_x>, y: <valor_y>}
];
for (var i:int = 0; i < rectangulos.length; i++) {
    var rectangulo:DisplayObject = rectangulos[i];
    var posicion:Object = posicionesIniciales[i];
    rectangulo.x = posicion.x;
    rectangulo.y = posicion.y;
 
    // Asignar eventos de arrastrar y soltar para cada rectángulo
    rectangulo.addEventListener(MouseEvent.MOUSE_DOWN, arrastrar);
    rectangulo.addEventListener(MouseEvent.MOUSE_UP, soltar);
}
 
// Función para arrastrar el rectángulo
function arrastrar(e:MouseEvent):void {
    e.currentTarget.startDrag();
}
 
// Función para soltar el rectángulo y verificar colisión
function soltar(e:MouseEvent):void {
    e.currentTarget.stopDrag();
    var rectanguloArrastrado:DisplayObject = e.currentTarget as DisplayObject;
    var index:int = rectangulos.indexOf(rectanguloArrastrado);
    var cajaTexto:TextField = cajasTexto[index];
 
    var colision:Boolean = false;
    for (var j:int = 0; j < rectangulos.length; j++) {
        if (j != index && rectanguloArrastrado.hitTestObject(rectangulos[j])) {
            colision = true;
            break;
        }
    }
 
    if (colision) {
        cajaTexto.text = (index + 1).toString();
    } else {
        cajaTexto.text = "";
    }
}

En este ejemplo, hemos creado dos listas: `rectangulos` y `cajasTexto`, que contienen los rectángulos y las cajas de texto respectivamente. También hemos agregado una lista `posicionesIniciales` que almacena las posiciones iniciales de los rectángulos.

Luego, utilizamos un bucle `for` para asignar las posiciones iniciales y agregar los eventos de arrastrar y soltar a cada rectángulo.

La función `soltar` verifica la colisión del rectángulo arrastrado con los demás rectángulos en la lista. Si hay una colisión, se asigna el valor correspondiente a la caja de texto utilizando el índice del rectángulo en las listas. Si no hay colisión, la caja de texto se deja en blanco.

Puedes agregar más rectángulos y cajas de texto a las listas `rectangulos` y `cajasTexto` respectivamente y también agregar sus posiciones iniciales en la lista `posicionesIniciales`. Recuerda ajustar los índices en la función `soltar` si cambias el orden de los rectángulos en las listas.

Espero que esto te ayude a resolver tu problema. ¡Buena suerte con tu proyecto de ActionScript!
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