Autor Tema: Problema al tomar cartas.

0 Usuarios y 1 Visitante están viendo este tema.

17 Febrero, 2026, 09:50 am
Respuesta #10

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Anduve pensando mientras me alejé de los ruidos vecinales, luego pensaré sobre tu mensaje.

Así está bien, acabo de probarlo:
Código: [Seleccionar]
LargoDeEspacios = 512/(CartasDeHumano.length+1);
trace("LargoDeEspacios: "+LargoDeEspacios);
NroDeCartaaMostrar = 0;
do {
NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
attachMovie ("sCarta", NombreDeCarta, NroDeCartaaMostrar);
setProperty (NombreDeCarta, _x, (NroDeCartaaMostrar+1)*LargoDeEspacios);
y el resto del código.
PERO cuando LargoDeEspacios < 50, parte de la carta nro 0 va a quedar demasiado a la izquierda.
La solución supongo, cuando eso pasa, es recalcular reduciendo el tamaño de la pantalla (no realmente, sólo en el cálculo) ¿pero cuánto? Piénselo, yo lo pienso otro día, ahora se me complica.

24 Febrero, 2026, 03:02 pm
Respuesta #11

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Lo que probé no sirvió tampoco  :P

Pruebo lo tuyo.

Tu quieres  formar  algo como  $$xececec...cex$$ pero en realidad es $$xc/2eeeee...eeec/2x$$
No, quiero ECECE.

Ahí puse las cartas manualmente, arriba cuando son 2 y abajo cuando son 3.
Las posiciones para 2 son 153 y 359.
Las posiciones para 3: 103, 255, 408.
Se ve que algún pequeño error pero la cosa es que es como si hubiera una carta en -50 y en 562, o como si los bordes extremos de la pantalla fuesen bordes de una carta, y entonces todos los espacios de separación son iguales.
ECECE
ECECECE
¿De dónde salen esos número?
¿Tendrá que ver con (512-100*cartas)/(cartas+1)?
(512-200)/3
312/3 = 104
Podría ser de cuando hay 3 cartas, aunque yo pensé para 2.
¿Cómo se obtiene 153 (aproximadamente) a partir 512 y 2?
512-100*cartas)/cartas
312/2 = 156
A ver con 3 cartas:
212/3 = 70.6
No, debería ser aproximadamente 103.
No lo entiendo >______<

Noté que el largo de los espacios, o sea hasta los extremos de las cartas, no es lo mismo que hasta sus centros.
E = 512-100*C)/(C+1)
Cuando C=2
E = 312/3 = 104
Pero la carta 0 no va en 104, va en 153 aprox. Parece claro que se le sumó la mitad del ancho de la carta. Entonces posición de carta 0 = E+50
La carta 1 va en 359 aprox.
¿Será E*2+100?
104*2+100 = 208+100 = 308
Se le debe sumar 50.
Entonces la fórmula podría ser E*(N+1)+N*100+50
Yo que sé...
N es el número de carta.

Entonces:
E es espacio entre cartas.
C total de cartas a poner.

E = 512-100*C)/(C+1)

posición de carta N = E*(N+1)+N*100+50

Luego lo pruebo.

Citar
Entonces la separación entre cartas es el espacio disponible dividido la cantidad de espacios

$$e=Ed/(n +1)$$  si $$n$$ es la cantidad de cartas a mostrar.
De acuerdo.

Citar
La carta nro $$i$$ ira ubicada en la posicion

$$X_i=x+c/2+e+i*e$$
Me resulta difícil entender qué significa cada cosa.
x era el extremo pero no debe haber dijimos...
Cuando el ancho sumado de las cartas es mayor que el espacio disponible, asumo que la fórmula debe ser otra. Estuve pensando en eso hace un tiempo y lo acabo de probar pero está mal. Resolvamos el caso de pocas cartas 1ero.

Citar
c/2 es el espacio que dejas para que la primera carta pueda ir hacia la izquierda sin salirse de pantalla y tampoco pisar el extremo
¿c/2 es el ancho de la carta/2 o qué?

En fin, me cuesta entenderte algunas cosas.

EDIT:
El caso en que son menos de 6 cartas parece que lo resolvimos. Cuando LargoDeEspacios>0.
Fijate el código a ver si lo podés entender (es la fórmula que comenté arriba) y como resolverías el caso de LargoDeEspacios<=0.

Código: [Seleccionar]
function MostrarCartasDeHumano () {
LargoDeEspacios = (512-100*CartasDeHumano.length)/(CartasDeHumano.length+1);
if (LargoDeEspacios>0) {
trace ("LargoDeEspacios: "+LargoDeEspacios);
NroDeCartaaMostrar = 0;
do {
NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar);
setProperty (NombreDeCarta, _x, LargoDeEspacios*(NroDeCartaaMostrar+1)+NroDeCartaaMostrar*100+50);
trace (getProperty(NombreDeCarta, _x));
setProperty (NombreDeCarta, _y, 192);
// Para el interior de la carta:
AgregarSignos();
NroDeCartaaMostrar++;
} while (NroDeCartaaMostrar<CartasDeHumano.length);
} else {
// La 1er carta irá en x 50 y la última en 512-50,
// justo en los extremos de la pantalla,
// así que un largo de 50 de un lado y del otro está ocupado,
// por eso se recalcula LargoDeEspacios con espacio-100 y...
// 2 cartas menos:
LargoDeEspacios = 412/(CartasDeHumano.length-1);
attachMovie("sCarta", "CartaDeHumano0", 0);
setProperty ("CartaDeHumano0", _x, 50);
trace (getProperty("CartaDeHumano0", _x));
setProperty ("CartaDeHumano0", _y, 192);
// Para el interior de la carta:
NombreDeCarta = "CartaDeHumano0";
// Esto porque AgregarSignos lo usa:
NroDeCartaaMostrar = 0;
AgregarSignos();
// Para las siguientes hasta la última (no incluida):
NroDeCartaaMostrar = 1;
do {
NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar);
setProperty (NombreDeCarta, _x, (NroDeCartaaMostrar+1)*LargoDeEspacios);
trace (getProperty(NombreDeCarta, _x));
setProperty (NombreDeCarta, _y, 192);
// Para el interior de la carta:
AgregarSignos();
NroDeCartaaMostrar++;
} while (NroDeCartaaMostrar<CartasDeHumano.length-1);
// Última carta:
NombreDeCarta = "CartaDeHumano"+CartasDeHumano.length;
attachMovie("sCarta", NombreDeCarta, CartasDeHumano.length);
setProperty (NombreDeCarta, _x, 462);
trace (getProperty(NombreDeCarta, _x));
setProperty (NombreDeCarta, _y, 192);
// Para el interior de la carta:
AgregarSignos();
}
}

Agregar signos es para agregar los tréboles o lo que sea.
Lo que está mal tiene que ver con esto
LargoDeEspacios = 412/(CartasDeHumano.length-1);
y esto
setProperty (NombreDeCarta, _x, (NroDeCartaaMostrar+1)*LargoDeEspacios);

Más tarde te doy más detalles.

Edit 2:

El caso de LargoDeEspacios<=0 lo había intentado resolver con un método que ya no recuerdo bien pero la idea es que la carta 0 va en el extremo izquierdo, o sea en 50, y la última irá en el extremo derecho, o sea 512-50, que da 462. El espacio disponible entonces es 512-100.
Luego habría que colocar las cartas del medio.
0ECEu
donde 0 es la carta 0 y u la última.
Según veo, E se está calculando mal.
LargoDeEspacios = 412/(CartasDeHumano.length-1);
Otro día lo sigo pensando, pero leeré sugerencias.

26 Febrero, 2026, 04:10 am
Respuesta #12

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
No, quiero ECECE.
A ver , hay dos situaciones diferentes mientras estas dibujando, una cuando tienes pocas cartas  y entonces hay espacio sobrante a los lados de cada carta, pero si una carta mide 100 y hay solo 512 de espacio es evidente que la sexta carta no podrá visualizarse sin solapar a alguna de las previas.

Lo que te proponía era lo siguiente.
Dejar siempre a los lados izquierdo y derecho un espacio en blanco al que llame extremo  si cada uno de estos espacios mide 6 , y habiendo uno a derecha y otro aizquierda  te quedaran solo 512-2*6=500 pixeles para las cartas.
 si tu me dijiste que el punto de inserción de una carta esta a la mitad del ancho de la carta , es decir si la carta mide 100 , para colocarla en pantalla y se vea entera a la izquierda debo insertarla en el valor 100/2=50.
Ok, si dejo espacio en las puntas y me queda 500 para las cartas, y además deseo que los espacios sean simétricos y centrados , es decir las cartas se vayan centrando, entonces de los 500 disponibles  si hay una sola carta la debo colocar a la mitad 500/2 250 , y como debo dejar además un espacio a la izquierda  de 6 que no se usa la carta se inserta en el 250+6=256 ,
pero claro cuando intentes con la quinta carta  de los 500 disponibles vas a usar 5*100 =500 es decir todo el espacio sin los extremos, a partir de allí la sexta hasta la doceava se superpondrán...

Entonces en la búsqueda de que queden centradas y a la vez que solo variando la cantidad se superpongan solo variando el numero de carta, esta lo que te propuse.
Si observas cuando hay 5 cartas y la pantalla esta completa la primer carta la colocas en 50+6  y ocupara del 6 al 106 , la segunda la pones en el 156 y ocupa del 106 al 206, así hasta la última que la pones en 456, y llega hasta el 506 que con el extremo de 6  llegara a fin de pantalla 512.

Entonces cuando pongas 6 cartas si no reservas espacio , la carta se imprimirá mas a la izquierda fuera de pantalla por eso te recomendé que el espacio extra para poner carta  es lo que hay de pantalla menos los extremos menos el ancho de una carta, es decir 512-2*6-100=400, si te manejas con ese espacio ninguna se ira de izquierda o de derecha.

Supón  que hay 9 cartas  entonces lo que te propongo es que el espacio de 400 lo dividas entre la cantidad de cartas menos -1  es decir 8   así la separación entre centros de cartas será 400/8=50 pixeles

Así si te fijas la carta  0 se coloca pasado el extremo, mas media carta + 0 por la separación calculada  es decir c_0=6+50+50*0=56 ,  y como la colocas en el 56 la carta se tendría que ver desde el pixel 6 al 106 (-50 para un lado y +50 para el otro desde el punto de inserción), la segunda carta la colocas en c_1 va de 6+50+50*1=106,  es decir se va a ver desde el 56 al 156, o sea solapa a la anterior en 50 , veras la parte izquierda de c_0 , la izquierda de c_1  y solo veras sin superponer la c_8 o novena carta , que su centro esta en  c_8=6+50+8*50=456  , entonces la carta ocupa desde el 406 hasta el 506 y te sobran los 6 del extremo para competar lo 512


Así que las fórmulas son 
X=extremo=6
C=anchocarta =100
P=pantalla =512
N= numero de cartas a presentar
i= variable que va de 0 a N-1, y recorre todas las cartas

luego espacio libre es $$SP=P-2*X-C=400$$

la separación entre cartas entonces es $$E=SP/(N-1)$$  cuando N=1 directamente pones la mitad de 512 es decir 256

la ubicación de la carta $$i$$ es  $$U_i=X+C/2+i*E$$

Otro ejemplo  con 11 cartas

X=extremo=6
C=anchocarta =100
P=pantalla =512
N=11 numero de cartas a presentar
i= variable que va de 0 a N-1, y recorre todas las cartas  va de 0 a 10

luego espacio libre es $$SP=P-2*X-C=400$$

la separación entre cartas entonces es $$E=SP/(N-1)=400/(11-1)=400/10=40$$

la ubicación de la carta $$0$$ es  $$U_0=X+C/2+0*E=6+50+0*40=56$$
la ubicación de la carta $$1$$ es  $$U_1=X+C/2+1*E=6+50+1*40=96$$
la ubicación de la carta $$2$$ es  $$U_2=X+C/2+2*E=6+50+2*40=136$$
la ubicación de la carta $$3$$ es  $$U_3=X+C/2+3*E=6+50+3*40=176$$
la ubicación de la carta $$4$$ es  $$U_4=X+C/2+4*E=6+50+4*40=216$$
la ubicación de la carta $$5$$ es  $$U_5=X+C/2+5*E=6+50+5*40=256$$
la ubicación de la carta $$6$$ es  $$U_6=X+C/2+6*E=6+50+6*40=296$$
la ubicación de la carta $$7$$ es  $$U_7=X+C/2+7*E=6+50+7*40=336$$
la ubicación de la carta $$8$$ es  $$U_8=X+C/2+8*E=6+50+8*40=376$$
la ubicación de la carta $$9$$ es  $$U_9=X+C/2+9*E=6+50+9*40=416$$
la ubicación de la carta $$10$$ es  $$U_10=X+C/2+10*E=6+50+10*40=456$$

como ves se reparten equidistante y a la vez se solapan si son muchas , y no tienes que tocar nada solo código con un bucle que recorra de 0 a N-1.

Saludos
Saludos  \(\mathbb {R}^3\)

03 Marzo, 2026, 12:36 am
Respuesta #13

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Quería evitar poner un espacio en los extremos así que lo pensé y hallé la solución.



Citar
Supongamos que el ancho de la pantalla fuese 500.
0~100 x~X 400~500
Significa que la 1er carta iría de 0 a 100, la última de 400 a 500, y habría que averiguar la del medio.
50 y 450 ¿qué va entre medio? 250. Parece tan simple como dividir el espacio total entre cartas-1.
Algo está fallando.
Carta 0: 250*0+50 o simplemente 50
Carta 1: 250*1
Carta 2: 250*2-50 o simplemente 450
Si fueran 4 cartas:
0~100 x~X y~Y 400~500
50, 450
500/3 no creo que sea.
0, 133, 266, 400
50, 183, 316, 450
Parece 400/(cartas-1) y se suma 50 a cada una:
Carta 0: 0*133+50
Carta 1: 1*133+50
Carta 2: 2*133+50
Carta 3: 3*133+50

Claro que son 2 situaciones diferentes como dices Richard, acá está la solución para ambas:
Código: [Seleccionar]
function MostrarCartasDeHumano () {
LargoDeEspacios = (512-100*CartasDeHumano.length)/(CartasDeHumano.length+1);
if (LargoDeEspacios>0) {
trace ("LargoDeEspacios: "+LargoDeEspacios);
NroDeCartaaMostrar = 0;
do {
NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar);
setProperty (NombreDeCarta, _x, LargoDeEspacios*(NroDeCartaaMostrar+1)+NroDeCartaaMostrar*100+50);
trace (getProperty(NombreDeCarta, _x));
setProperty (NombreDeCarta, _y, 192);
// Para el interior de la carta:
AgregarSignos();
NroDeCartaaMostrar++;
} while (NroDeCartaaMostrar<CartasDeHumano.length);
} else {
// La 1er carta irá en x 50 y la última en 512-50,
// justo en los extremos de la pantalla,
// así que un largo de 50 de un lado y del otro está ocupado,
// por eso se recalcula LargoDeEspacios con espacio-100 y...
// 2 cartas menos:
LargoDeEspacios = 412/(CartasDeHumano.length-1);
trace ("LargoDeEspacios: "+LargoDeEspacios);
NroDeCartaaMostrar = 0;
do {
NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
attachMovie("sCarta", NombreDeCarta, NroDeCartaaMostrar);
// setProperty (NombreDeCarta, _x, (NroDeCartaaMostrar+1)*LargoDeEspacios);
setProperty (NombreDeCarta, _x, LargoDeEspacios*NroDeCartaaMostrar+50);
trace (getProperty(NombreDeCarta, _x));
setProperty (NombreDeCarta, _y, 192);
// Para el interior de la carta:
AgregarSignos();
NroDeCartaaMostrar++;
} while (NroDeCartaaMostrar<CartasDeHumano.length);
}
}