elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Problema agregar, mover, remover.
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema agregar, mover, remover.  (Leído 59 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.709


Hackentifiko!


Ver Perfil
Problema agregar, mover, remover.
« en: Hoy a las 09:35 »

Creo que esto está bien:
Código
  1. // En este momento Images es 30,
  2. // Barriles es igual no porque hayan 30 sino para evitar que...
  3. // tengan el mismo depth que las imágenes anteriores:
  4. Barriles = 30;
  5. // Para saber qué depth asignar cuando se debe insertar un barril:
  6. LdeProfundidadesDisponibles = [];
  7. do {
  8. Barriles++;
  9. LdeProfundidadesDisponibles.push(Barriles);
  10. } while (LdeProfundidadesDisponibles.length < BarrilesRate);
  11. Barriles = 30;

BarrilesRate es básicamente la máxima cantidad que puede haber.

Creo que esto también está bien:
Código
  1. function AddBarriles () {
  2. BarrilesTurn = BarrilesTurn+BarrilesRate;
  3. while (LdeProfundidadesDisponibles.length > 0 && BarrilesTurn >= 100) {
  4. BarrilesTurn = BarrilesTurn-100;
  5. Barriles++;
  6. Name = "Barril"+LdeProfundidadesDisponibles[0];
  7. trace("LdeProfundidadesDisponibles[0]: "+LdeProfundidadesDisponibles[0]);
  8. trace("se agregó el barril "+Name);
  9. attachMovie("sDKBarril", Name, LdeProfundidadesDisponibles[0]);
  10. setProperty (Name, _x, Math.random()*800);
  11. setProperty (Name, _y, -50);
  12. set(Name+".SpeedX", Math.random()*MinBarrilSpeed*(random(2)*2-1));
  13. set(Name+".SpeedY", Math.random()*MinBarrilSpeed+MinBarrilSpeed);
  14. LdeProfundidadesDisponibles[0] = LdeProfundidadesDisponibles[LdeProfundidadesDisponibles.length-1];
  15. LdeProfundidadesDisponibles.pop();
  16. trace("LdeProfundidadesDisponibles[0]: "+LdeProfundidadesDisponibles[0]);
  17. }
  18. }

BarrilesTurn determina si es momento de agregar un barril.

Cuando se debe agregar:
- Aumenta la cantidad de barriles.
- Al barril que se agregará se lo llama BarrilX donde X es la 1er profundidad disponible, guardada en el array LdeProfundidadesDisponibles. Y tiene esa profundidad.
- Se le asigna posición X, Y y velocidades en esos ejes.
- La 1er profundidad disponible es sustuída por la última.
- Se elimina la última profundidad disponible.

Probablemente sería mejor eliminar la 1era y que las demás se corran ordenadas hacia atrás (la de posición 1 pasa a la 0, la 2 a la 1, etc), pero no me di cuenta de intentarlo, y no creo que sea el problema.

El problema creo que está acá:
Código
  1. function MoveBarriles () {
  2. BarrilaMover = Barriles;
  3. while (BarrilaMover > 30) {
  4. Name = "Barril"+BarrilaMover;
  5. setProperty (Name, _x, getProperty(Name, _x)+eval(Name+".SpeedX"));
  6. trace("se movió el barril "+Name);
  7. if (getProperty(Name, _x) < -50 or getProperty(Name, _x) > 850) {
  8. removeMovieClip ("Barril"+BarrilaMover);
  9. trace("se quitó el barril "+Name);
  10. LdeProfundidadesDisponibles.push(BarrilaMover);
  11. Barriles--;
  12. } else {
  13. setProperty (Name, _y, getProperty(Name, _y)+eval(Name+".SpeedY"));
  14. if (getProperty(Name, _y) > 650) {
  15. removeMovieClip ("Barril"+BarrilaMover);
  16. trace("se quitó el barril "+Name);
  17. LdeProfundidadesDisponibles.push(BarrilaMover);
  18. Barriles--;
  19. } else {
  20. // Esto no viene al caso.
  21. }
  22. }
  23. BarrilaMover--;
  24. }
  25. }

Los muevo desde el último al 1ero, no me gusta y no recuerdo por qué, pero no creo que el problema sea eso.

Si un barril sale de la pantalla:
- Se remueve.
- Su profundidad se agrega al final de las profundidades disponibles.
- Se reduce la cantidad de barriles.

Supongamos que se mueve el barril 3 y no se sale de la pantalla.
Luego se mueve el 2, se sale, se ejecuta el código correspondiente, ahora hay 2 barriles.
Luego se mueve el 1, y no se sale de la pantalla.
El proceso se repite, hay 2 barriles así que movemos el 2, pero no existe. Y el 3ero no lo movemos porque la variable dice que hay 2. He ahí el problema. Se debe mover el 1 y el 3, en ese caso, el 2 fue eliminado. Si se hubiera eliminado el 1 solamente o también, el problema sería similar, tenemos que mover el barril llamado Barril3, pero como sólo hay 1 va a mover Barril1 solamente.

¿Cómo puedo resolver esto?

Antes no removía los barriles. Quizá no debería modificar la variable Barriles, y en vez de remover los que salgan... volverles a poner posición y velocidad como si fuese uno nuevo... Vaya truchada. Pero bueno, pruebo eso. Avisen si se les ocurre algo mejor.

Edit: Me funcionó así:
Código
  1. // /////////////////////////////////////////////
  2. // //////////////////  Pisos  //////////////////
  3. // /////////////////////////////////////////////
  4. Pisos = 0;
  5. do {
  6. Piso = "Piso"+Pisos;
  7. attachMovie("sDKPiso", Piso, Pisos);
  8. setProperty (Piso, _x, Pisos*16+16);
  9. setProperty (Piso, _y, 568-Pisos*18);
  10. PartesDelPiso = 0;
  11. PartesRequeridas = 26-Pisos/2;
  12. do {
  13. Parte = "Parte"+PartesDelPiso;
  14. // trace("Insertando "+Parte+" en "+Piso+" con depth "+PartesDelPiso);
  15. eval(Piso).attachMovie("sDKPisoParte", Parte, PartesDelPiso);
  16. RutaDeParte = Piso+"."+Parte;
  17. setProperty (RutaDeParte, _x, 32*PartesDelPiso);
  18. setProperty (RutaDeParte, _y, 0);
  19. PartesDelPiso++;
  20. } while (PartesDelPiso <= PartesRequeridas);
  21. Pisos++;
  22. } while (Pisos < 30);
  23. Images = Pisos;
  24.  
  25. // /////////////////////////////////////////////
  26. // //////////////////  Mario  //////////////////
  27. // /////////////////////////////////////////////
  28. attachMovie("sDKMario", "Player", Images);
  29.  
  30. // /////////////////////////////////////////////
  31. // ////////////////  Barriles  /////////////////
  32. // /////////////////////////////////////////////
  33. // Cuando llega a 100 puede que se inserte un barril:
  34. BarrilesTurn = 0;
  35. // Determina qué tan rápido aumenta BarrilesTurn y...
  36. // la máxima cantidad de bariiles:
  37. BarrilesRate = 1;
  38. MinBarrilSpeed = 0.1;
  39. // Para saber qué depth asignar cuando se debe insertar un barril:
  40. LdeProfundidadesDisponibles = [];
  41. do {
  42. LdeProfundidadesDisponibles.push(LdeProfundidadesDisponibles.length+1);
  43. } while (LdeProfundidadesDisponibles.length < BarrilesRate);
  44. function AddBarriles () {
  45. BarrilesTurn = BarrilesTurn+BarrilesRate;
  46. while (LdeProfundidadesDisponibles.length > 0 && BarrilesTurn >= 100) {
  47. BarrilesTurn = BarrilesTurn-100;
  48. Name = "Barril"+LdeProfundidadesDisponibles[0];
  49. attachMovie("sDKBarril", Name, LdeProfundidadesDisponibles[0]+Images);
  50. setProperty (Name, _x, Math.random()*800);
  51. setProperty (Name, _y, -50);
  52. set(Name+".SpeedX", Math.random()*MinBarrilSpeed*(random(2)*2-1));
  53. set(Name+".SpeedY", Math.random()*MinBarrilSpeed+MinBarrilSpeed);
  54. // Borra el 1er elemento de la lista:
  55. LdeProfundidadesDisponibles.shift();
  56. }
  57. }
  58. function MoveBarriles () {
  59. BarrilaMover = 0;
  60. while (BarrilaMover < BarrilesRate) {
  61. BarrilaMover++;
  62. Name = "Barril"+BarrilaMover;
  63. setProperty (Name, _x, getProperty(Name, _x)+eval(Name+".SpeedX"));
  64. if (getProperty(Name, _x) < -50 or getProperty(Name, _x) > 850) {
  65. removeMovieClip ("Barril"+BarrilaMover);
  66. LdeProfundidadesDisponibles.push(BarrilaMover);
  67. } else {
  68. setProperty (Name, _y, getProperty(Name, _y)+eval(Name+".SpeedY"));
  69. if (getProperty(Name, _y) > 650) {
  70. removeMovieClip ("Barril"+BarrilaMover);
  71. LdeProfundidadesDisponibles.push(BarrilaMover);
  72. } else {
  73. // No viene al caso;
  74. }
  75. }
  76. }
  77. }

Si saben cómo mejorarlo, digan.


« Última modificación: Hoy a las 12:55 por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Flash - Mover barra por una regla al mover el raton [SOLUCIONADO]
Diseño Gráfico
-Joserra- 0 5,208 Último mensaje 20 Septiembre 2009, 18:55 pm
por -Joserra-
problema al mover JLabel en JFrame
Java
smasher666 9 26,483 Último mensaje 30 Octubre 2009, 03:43 am
por 1mpuls0
[Problema]Chillido al mover el mouse
Windows
You-and- 4 3,739 Último mensaje 17 Enero 2013, 02:51 am
por You-and-
Problema al mover Bound Import Problema para copiar y pegar
Análisis y Diseño de Malware
kisk 2 5,794 Último mensaje 4 Abril 2017, 03:13 am
por kisk
Problema con eclipse al mover proyectos
Programación General
gabriel1995 2 3,246 Último mensaje 8 Marzo 2018, 20:23 pm
por gabriel1995
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines