Al leerte se me ocurrió la idea de crear 9 objetos:
Carta2:
- Le coloco un objeto vacío en la punta izquierda superior.
- Otro en la punta derecha inferior.
- 2 más en lugares intermedios.
- Copio los objetos de las esquinas.
- Usando las herramientas de alinear los distribuyo horizontal y verticalmente.
- Borro los objetos de las esquinas.
- Al objeto vacío (esto se aplicará a sus copias) le pongo código para que agregue el dibujo del palo que le corresponda y el tamaño que le corresponda (aún no sé bien cómo se calcularía).
Duplico Carta2 para hacer Carta3:
- Pego los objetos de las esquinas.
- Agrego otro.
- Repito el proceso de alinearlos, copiarlos y borrar los 2 extremos.
Y repito hasta Carta10 inclusive.
PERO la idea era hacer una única carta, o sea, un único objeto llamado Carta, al que con código se le agregaran los dibujos, se pusieran las posiciones correctas y con los tamaños correctos.
De la forma que te dije es manual, pero al menos no tengo que hacerlo tantas veces como pensé al inicio, sólo 9.
Hasta que no lo aplique no te puedo mostrar mucho de eso, sólo el código que tengo hasta ahora, que no pensé que tuviese mucho que ver con el tema, pero quizá ayude a aclarar:
// Generar array de cartas:
Cartas = [];
Nro = 0;
do {
Nro++;
Cartas[Cartas.length] = "P"+Nro;
Cartas[Cartas.length] = "T"+Nro;
Cartas[Cartas.length] = "C"+Nro;
Cartas[Cartas.length] = "D"+Nro;
} while (Nro < 13);
// Ordenarlas al azar:
Posicion1aReubicarse = Cartas.length-1;
while (Posicion1aReubicarse>0) {
Posicion2aReubicarse = random(Posicion1aReubicarse+1);
SaveDeElemento1 = Cartas[Posicion1aReubicarse];
Cartas[Posicion1aReubicarse] = Cartas[Posicion2aReubicarse];
Cartas[Posicion2aReubicarse] = SaveDeElemento1;
Posicion1aReubicarse--;
}
// Dar a jugadores:
SiguienteNroDeCarta = 0;
CartasDeHumano = [];
NumerosDeHumano = [];
CartasDeIA = [];
do {
CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
CartasDeIA[CartasDeIA.length] = Cartas[SiguienteNroDeCarta+1];
SiguienteNroDeCarta = SiguienteNroDeCarta+2;
} while (SiguienteNroDeCarta < 4);
Mensaje = "Has recibido "+CartasDeHumano[0];
Mensaje = Mensaje+"\nY "+CartasDeHumano[1];
// Agregarlas en pantalla:
function AgregarCartasDeHumano () {
CartaaAgregar = 0;
if (CartasDeHumano.length % 2 == 0) {
PosicionDe0 = 256 - CartasDeHumano.length-1 * 50 - 25;
} else {
PosicionDe0 = 256 - CartasDeHumano.length * 50;
}
do {
Nombre = "CartaDeHumano"+CartasDeHumano[CartaaAgregar];
attachMovie ("sCarta", Nombre, CartaaAgregar);
setProperty (Nombre, _x, PosicionDe0+(CartaaAgregar)*150);
setProperty (Nombre, _y, 192);
// Para el interior de la carta:
Tipo = CartasDeHumano[CartaaAgregar].charat(0);
if (Tipo == "T") {
Tipo = "tréboles";
} else if (Tipo == "D") {
Tipo = "diamantes";
} else if (Tipo == "P") {
Tipo = "picas";
} else {
Tipo = "corazones";
}
set (Nombre+".Text", NumerosDeHumano[CartaaAgregar]+"\n"+Tipo);
CartaaAgregar++;
} while (CartaaAgregar < CartasDeHumano.length);
}
AgregarCartasDeHumano();
// Calcular suma de humano:
ValorDeCartaHumana0 = Math.min(10, NumerosDeHumano[0]);
ValorDeCartaHumana1 = Math.min(10, NumerosDeHumano[1]);
if (ValorDeCartaHumana0 == 1) {
SumaDeHumano = 11+ValorDeCartaHumana1;
} else if (ValorDeCarta1 == 1) {
SumaDeHumano = ValorDeCartaHumana0+11;
} else {
SumaDeHumano = ValorDeCartaHumana0+ValorDeCartaHumana1;
}
Mensaje = Mensaje+"\nTu suma es "+SumaDeHumano;
// Calcular suma de IA:
ValorDeCartaDeIA0 = Math.min(10, Number(CartasDeIA[0].substring(1, CartasDeIA[0].length)));
ValorDeCartaDeIA1 = Math.min(10, Number(CartasDeIA[1].substring(1, CartasDeIA[1].length)));
if (ValorDeCartaDeIA0 == 1) {
SumaDeIA = 11+ValorDeCartaDeIA1;
} else if (ValorDeCartaDeIA1 == 1) {
SumaDeIA = ValorDeCartaDeIA0+11;
} else {
SumaDeIA = ValorDeCartaDeIA0+ValorDeCartaDeIA1;
}
Mensaje = Mensaje+"\nLa suma del rival es "+SumaDeIA;
Mensaje = Mensaje+"\n¿Quieres otra carta?";
Mensaje = Mensaje+"\nIzquierda: No";
Mensaje = Mensaje+"\nDerecha: Sí";
// Tomar carta sí o no. Un objeto en F2 repite esto:
function TomarCartaSoN () {
// Si se presiona izquierda:
if (Key.isDown(37)) {
/// Acá debería mostrar puntaje.
} else if (Key.isDown(39)) {
SiguienteNroDeCarta++;
CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length];
AgregarCartasDeHumano();
}
}Salvo lo de cómo se define y/o guarda de qué palo es, creo que todo lo demás tiene que ver con cosas ajenas al interior de la carta, a su dibujo, pero el tema trata del dibujo nada más.
Edit: En cuanto a la solución mencionada al inicio, ya no me gusta, porque me di cuenta que en vez de insertar un objeto Carta podría ser Carta2, Carta3, etc, y además son casi iguales, sólo tienen objetos en distintas posiciones y más o menos cantidad, y tamaño.
A ver si puedo explicarlo mejor el hacerlo con código.
Supongamos que se debe mostrar un 2 de picas.
Inserto la carta, vacía.
Le inserto un dibujo de pica:
su posición x: 100/4
su y: 150/4
Le inserto otro dibujo de pica:
su x: 100/4*3
su y: 150/4*3
¿Por qué esas cuentas? No sé si están bien.
El 1er dibujo debe estar entre el extremo izquierdo y el centro, que es 50 (para x), por lo que 50/2 está bien.
Y debe estar entre la parte superior y el centro, que para y es 75, así que 75/2 está bien.
El 2ndo dibujo debe estar entre el centro y el extremo derecho, o sea (50+100)/2.
Y entre el centro y la parte inferior, o sea (75+150)/2
Ahora que recuerdo el dibujo de la carta 2 es más simplón:

Ambos dibujos están en el centro.
Yo pensaba en algo así:

Por lo visto no es lo normal, bueno, pero me gustaría así.
Necesitaría un algoritmo para las otras cartas.
Claro que el 4 se vería como un cuadrado, o sea un dibujo en la punta más o menos.
El 5 se vería como es sabido, y las demás también. El 2 y 3 serían los únicos casos especiales "diferentes" como comenté.
Edit2: Logré esto:

Nota: Decidí que las coordenadas 0, 0 de las cartas estén en su centro, no sé si ayuda, pero si lo cambio tengo que cambiar cómo se distribuyen las cartas en la mesa, y eso me costó mucho así que por eso prefiero dejarlo así.
Está claro que este código habría que mejorarlo:
if (NumerosDeHumano[CartaaAgregar] == 2) {
eval(Nombre).attachMovie ("sPica", "Dibujo1", 1);
Nombre2 = Nombre+".Dibujo1";
setProperty (Nombre2, _x, -25);
setProperty (Nombre2, _y, -37.5);
eval(Nombre).attachMovie ("sPica", "Dibujo2", 2);
Nombre2 = Nombre+".Dibujo2";
setProperty (Nombre2, _x, 25);
setProperty (Nombre2, _y, 37.5);
}Además el dibujo necesito que sea más cuadrado, o algo está mal, el espacio que queda hacia los costados es bastante menor que hacia arriba o abajo.