Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - nm

Páginas: [1]
1
Vale. El problema más concretamente creo que esta relacionado con las funciones que lanzan al exterior x_origen y demás propiedas del div, es decir, relacionado con las coordenadas del div. He intentado varias cosas pero sigue actuando igual. Espero que podamos dar con la solución pronto. Gracias por ayudar.

2
Parece que el archivo se resiste a enviarse bien. Te lo adjunto de nuevo.

3
Veo que tenemos las líneas numeradas de forma diferente, al parecer. Te adjunto el archivo modificado.

4
Sí, me acabo de dar cuenta ahora. La línea 343 está mal, pon esto:

Código: [Seleccionar]
this.A2         = a2;

6
Hola, aquí te lo dejo, espero que me puedas ayudar.

   
Código: [Seleccionar]
function desplazamiento_pelota_en_tiempo(ladrillos_pantalla) {
           
            var i = 0;
                this.x_destino = this.x_actual + this.x_direccion_destino;
                this.y_destino = this.y_actual + this.y_direccion_destino;
                for ( i = 0; i<ladrillos_pantalla.length; i++ ){
                this.rebote_eje_y_superior_inferior_ladrillo(ladrillos_pantalla[i].obtener_x_origen_ladrillo(), ladrillos_pantalla[i].obtener_y_origen_ladrillo(), ladrillos_pantalla[i].obtener_x_final_ladrillo(), ladrillos_pantalla[i].obtener_y_final_ladrillo());
                this.rebote_eje_y_inferior_superior_ladrillo(ladrillos_pantalla[i].obtener_x_origen_ladrillo(), ladrillos_pantalla[i].obtener_y_origen_ladrillo(), ladrillos_pantalla[i].obtener_x_final_ladrillo(), ladrillos_pantalla[i].obtener_y_final_ladrillo());                }
                this.rebote_eje_y_superior();
                this.rebote_eje_x_izquierda();
                this.rebote_eje_y_inferior();
                this.rebote_eje_x_derecha();
                this.desplazar_pelota();
                this.mover_div();
                this.a1();
                this.a2();
                this.obtener_x_origen_ladrillo();
                this.obtener_y_origen_ladrillo();
                this.obtener_x_final_ladrillo();
                this.obtener_y_final_ladrillo();
            }
           
            function a1(){
                this.x_origen   = this.x_origen + this.velocidad;
                document.getElementById("ladrillo").style.left = this.x_origen + "px";
                if (this.x_origen >= (screen.width-(this.x_origen/2))){
                    this.estado = 1;
                }
                return this.x_origen;
            }
           
            function a2(){
                this.x_origen   = this.x_origen - this.velocidad;
                document.getElementById("ladrillo").style.left = this.x_origen + "px";
                if (this.x_origen <= 0){
                    this.estado = 0;
                }
            }
           
            function mover_div (){
                switch(this.estado){
                    case 0:
                        this.A1();
                        break;
                    case 1:
                        this.A2();
                        break;
                }
            }
            function Crear_clase_pelota (min_x_in, min_y_in, max_x_in, max_y_in, x_actual_in, y_actual_in, x_direccion_destino_in, y_direccion_destino_in, pelota_dimension_x_in, pelota_dimension_y_in, id_balon_in, tiempo_ejecucion_in, imagen_balon_in, incremento_incial, estado_incial){
                this.min_x = min_x_in;
                this.min_y = min_y_in;
                this.max_x = max_x_in;
                this.max_y = max_y_in;
                this.x_actual =  x_actual_in;
                this.y_actual = y_actual_in;
                this.x_direccion_destino = x_direccion_destino_in;
                this.y_direccion_destino = y_direccion_destino_in;
                this.x_destino = this.x_actual + this.x_direccion_destino;
                this.y_destino = this.y_actual + this.y_direccion_destino;
                this.pelota_dimension_x = pelota_dimension_x_in;
                this.pelota_dimension_y = pelota_dimension_y_in;
                this.id_balon = id_balon_in;
                this.tiempo_ejecucion = tiempo_ejecucion_in;
                this.imagen_balon = imagen_balon_in;
               
                this.rebote_eje_y_superior = rebote_eje_y_superior;
                this.rebote_eje_x_izquierda = rebote_eje_x_izquierda;
                this.rebote_eje_y_inferior = rebote_eje_y_inferior;
                this.rebote_eje_x_derecha = rebote_eje_x_derecha;
                this.desplazar_pelota = desplazar_pelota;
                this.desplazamiento_pelota_en_tiempo = desplazamiento_pelota_en_tiempo;
                this.anhadir_balon = anhadir_balon;
                this.rebote_eje_y_superior_inferior_ladrillo = rebote_eje_y_superior_inferior_ladrillo;
                this.rebote_eje_y_inferior_superior_ladrillo = rebote_eje_y_inferior_superior_ladrillo;
                this.mover_div  = mover_div;
                this.a1         = a1;
                this.a2         = a2;
                this.obtener_x_origen_ladrillo = obtener_x_origen_ladrillo;
                this.obtener_y_origen_ladrillo = obtener_y_origen_ladrillo;
                this.obtener_x_final_ladrillo = obtener_x_final_ladrillo;
                this.obtener_y_final_ladrillo = obtener_y_final_ladrillo;
               
            }
           
            function crear_ladrillo(){
            document.getElementById("ladrillo").style.width = 300 + "px";
                document.getElementById("ladrillo").style.height = this.y_final - this.y_origen + "px";
                document.getElementById("ladrillo").style.position = 'absolute';
                document.getElementById("ladrillo").style.left = this.x_origen + "px";
                document.getElementById("ladrillo").style.top = this.y_origen + "px";
               
            }
           
            function crear_clase_ladrillo (x_origen_in, y_origen_in, x_final_in, y_final_in, mi_estado, mi_velocidad, mi_id){
                this.x_origen = x_origen_in;
                this.y_origen = y_origen_in;
                this.x_final = x_final_in;
                this.y_final = y_final_in;         
                this.estado      = mi_estado;
                this.velocidad   = mi_velocidad;
                this.id_elemento = mi_id;
               
                this.MOVER_DIV  = mover_div;
                this.A1         = a1;
                this.A2         = a2;
                this.crear_ladrillo = crear_ladrillo;
                this.obtener_x_origen_ladrillo = obtener_x_origen_ladrillo;
                this.obtener_y_origen_ladrillo = obtener_y_origen_ladrillo;
                this.obtener_x_final_ladrillo = obtener_x_final_ladrillo;
                this.obtener_y_final_ladrillo = obtener_y_final_ladrillo;
            }
                       
            function inicio_pelotas (){
           
                  var i = 0;
                  vector_ladrillos[i++] = new crear_clase_ladrillo(300, 500, 800, 600, 0, 2.5, "ladrillo");
                  vector_ladrillos[i++] = new crear_clase_ladrillo(200, 200, 600, 300, 0, 2.5, "ladrillo");
                  setInterval(function(){
                    for (var i = 0; i<vector_ladrillos.length; i++ ){
                        vector_ladrillos[i].crear_ladrillo();
                        vector_ladrillos[i].MOVER_DIV();
                    }
                  }, 25);
                 
                 
Código: [Seleccionar]
<body id="mi_campo" onload="inicio_pelotas();">
        <div id="ladrillo" style="border: solid 1px #000000;"></div>
    </body>

7
Buenas,
en las modificaciones que hice simplemente añadí funciones que le indicaran a esos div que x_origen += velocidad y que esto se lo añadiera al left del div. Haciendo, por otra parte, lo propio pero restando para que se muevan hacia el otro lado. El problema que tengo es que se supone que al tomar x_origen en la posición y movimiento del div esta debería variar para que las pelotas reboten contra las nuevas posiciones del div, pero rebotan únicamente contra la posición inicial.

9
Aquí dejo el resto del código:
Código: [Seleccionar]
            /* Este método tiene como entrada ladrillos_pantalla, que es el vecor de objectos ladrillo y así saber cuando una pelota toca contra alguno. */
           
            function desplazamiento_pelota_en_tiempo(ladrillos_pantalla) {
            /* Este método lo que realiza es el desplazamiento del balón de una posición actual a la de destino dependiendo de la dirección destino a la que se dirige.*/
            /* Este método se va a ejecutar cada tiempo_ejecucion_incial milisegundos por defecto. */
           
            var i = 0; // Inicializamos una variable contador.
                this.x_destino = this.x_actual + this.x_direccion_destino; // Calculamos a partir de la posición actual y la direccion_destino cual será la nueva dirección destino inicial por defecto.
                this.y_destino = this.y_actual + this.y_direccion_destino;
                for ( i = 0; i<ladrillos_pantalla.length; i++ ){ // Comprobamos que para llegar a esa dirección destino no tengamos que pasar atraves de algún ladríllo, en caso de ser así ejecutamos rebote.
                // Indicar que los ladríllos deben de estar distanciados entre si como minimo una distancia igual a el vector direccion_destino MAS la dimensión de la pelota.
                // En caso de tocar contra algún ladrillo los métodos rebote_eje_y_superior_inferior_ladrillo y rebote_eje_y_inferior_superior_ladrillo corrigiran el vector de direccion_destino y la nueva posición de destino.
                this.rebote_eje_y_superior_inferior_ladrillo(ladrillos_pantalla[i].obtener_x_origen_ladrillo(), ladrillos_pantalla[i].obtener_y_origen_ladrillo(), ladrillos_pantalla[i].obtener_x_final_ladrillo(), ladrillos_pantalla[i].obtener_y_final_ladrillo());
                this.rebote_eje_y_inferior_superior_ladrillo(ladrillos_pantalla[i].obtener_x_origen_ladrillo(), ladrillos_pantalla[i].obtener_y_origen_ladrillo(), ladrillos_pantalla[i].obtener_x_final_ladrillo(), ladrillos_pantalla[i].obtener_y_final_ladrillo());
                }
                this.rebote_eje_y_superior(); // En caso de que la nueva dirección de destino sobrepase el punto del eje Y superior rebote_eje_y_superior corrigira el vector de direccion_destino y la nueva posición de destino.
                this.rebote_eje_x_izquierda(); // En caso de que la nueva dirección de destino sobrepase el punto del eje X de la izquierda rebote_eje_x_izquierda corrigira el vector de direccion_destino y la nueva posición de destino.
                this.rebote_eje_y_inferior(); // En caso de que la nueva dirección de destino sobrepase el punto del ej Y inferior rebote_eje_y_inferior corrigira el vector de direccion_destino y la nueva posición de destino.
                this.rebote_eje_x_derecha(); // En caso de que la nueva dirección de destino sobrepase el punto del eje X de la derecha rebote_eje_x_derecha corrigira el vector de direccion_destino y la nueva posición de destino.
                this.desplazar_pelota(); // Una vez calculado la nueva posición de destino y corregida correctamente, desplazamos a ella la pocición de la pelota y actualizamos la posición actual.
                alert(this.x_origen);
            }

            function anhadir_balon() {
            /* Método para añadir un nuevo balón en la pantalla, para ello crea una imagen con las propiedades de dimensiones, id, imagen y posición del objecto, y lo añade al Body del HTML.*/
                var nuevo_balon = "<img id='" + this.id_balon + "' src='" + this.imagen_balon + "' style='width:" + this.pelota_dimension_x + "px; height:" + this.pelota_dimension_y + "px; position:absolute; top:" + this.min_y + "px; left:" + this.min_x + "px;' />";
                var body_id = document.getElementById('mi_campo');
                body_id.innerHTML = body_id.innerHTML + nuevo_balon;
            }
           
            /* Este método tiene como entradas los valores x_origen, y_origen, x_final, y_final que son los valores que dimensiona y posicionan al ladrillo en el campo de juegos. */
           
            function rebote_eje_y_superior_inferior_ladrillo(x_origen, y_origen, x_final, y_final){
            /* Este método comprueba si una pelota está chocando contra la parte inderior de un ladrillo, para ello la pelota debe atravesar el eje Y de la posición
            en la que se encuentra el ladrillo y también debe de encontrarse en el segmento del eje X en el que se encuantra el ladrillo en su trayectoria.*/
                if( (this.y_destino <= y_final) && (this.y_actual >= y_final) ){
                /*
                En ete caso vemos que estamos atravesando el nivel de Y, por lo cual es pertinente ver si tocamos con el ladrillo.
                Para ello debemos de parametrizar la ecuación de una recta que pasa por dos puntos, que serán le punto de origen de la pelota
                y su punto de destino, que ambos conocemos. Si por medio de esa trayectoria pasamos por un punto del eje x donde se encuentra
                el ladrillo entonces existe un rebote.
                Partimos de la siguiente ecuacnión:
               
                (this.this.y_origen - this.this.y_destino) = pendeinte_de_la_recta * (this.this.x_origen - this.this.x_destino);
               
                Donde la pendiente es la incognita a responder.
                ENTONCES:
               
                pendeinte_de_la_recta = (this.this.y_origen - this.this.y_destino) / (this.this.x_origen - this.this.x_destino);
               
                Ahor sabiendo la pendiente lo que debemos de ver es al nivel de la "Y" del ladrillo que "X" tiene para ver si coincide
                con la longitud del ladrillo, en tal caso hay rebote.
               
                (this.this.y_origen - this.y_final) = pendeinte_de_la_recta * (this.this.x_origen - x_de_cruce);
               
                Donde lo que lo que nos interesa es saber la x de cruce a la altura de la y del ladrillo:
                ENTONCES:
               
                x_de_cruce = ((this.this.y_origen - this.y_final)/pendeinte_de_la_recta) + this.this.x_origen;
               
                */
                var pendeinte_de_la_recta = (this.y_actual - this.y_destino) / (this.x_actual - this.x_destino); // Sacamos la pendiente de la trayectoria de la pelota.
                var x_de_cruce = ((this.y_actual - y_final)/pendeinte_de_la_recta) + this.x_actual; // Con la posición actual, la pendiente y la posición del ladrillo en el eje Y sacamos el valor de X al llegar al ladrillo.
               
                if( (x_de_cruce > (x_origen - this.pelota_dimension_x)) && (x_de_cruce < x_final) ){ // Comprobamos que la posición de X la llegar al ladrillo no coincida con las X que ocupa el ladrillo.
                this.y_destino = y_final - this.y_destino; // En caso de eser así ejecutamos e rebote, que se hace de la misma forma que los diferentes rebotes contra los limites del campo.
                    this.y_destino = y_final + this.y_destino;
                    this.y_direccion_destino = 0 - this.y_direccion_destino;
                }
                }
            }
           
            /* Este método tiene como entradas los valores x_origen, y_origen, x_final, y_final que son los valores que dimensiona y posicionan al ladrillo en el campo de juegos. */
           
            function rebote_eje_y_inferior_superior_ladrillo(x_origen, y_origen, x_final, y_final ){
            /* Este método comprueba si una pelota está chocando contra la parte superior de un ladrillo, para ello la pelota debe atravesar el eje Y de la posición
            en la que se encuentra el ladrillo y también debe de encontrarse en el segmento del eje X en el que se encuantra el ladrillo en su trayectoria. Es totalmente semejante al anterior, solo que ahora debemos de tener en cuenta las dimensiones de la pelota. */
                if( ((this.y_destino + this.pelota_dimension_y) >= y_origen) && ((this.y_actual + this.pelota_dimension_y) <= y_origen)  ){
               
                var pendeinte_de_la_recta = ((this.y_actual + this.pelota_dimension_y) - (this.y_destino + this.pelota_dimension_y)) / (this.x_actual - this.x_destino);
                var x_de_cruce = (((this.y_actual + this.pelota_dimension_y) - (y_origen + this.pelota_dimension_y))/pendeinte_de_la_recta) + this.x_actual;
                if( (x_de_cruce > (x_origen - this.pelota_dimension_x)) && (x_de_cruce < x_final) ){
                this.y_destino = y_origen - (this.y_destino + this.pelota_dimension_y);
                    this.y_destino = y_origen + this.y_destino - this.pelota_dimension_y;
                    this.y_direccion_destino = 0 - this.y_direccion_destino;
                    }
                }
            }
           
            /* Esta función crea la clase pelota, la cual empleamos para crear los diferentes objectos pelota. */
           
            function Crear_clase_pelota (min_x_in, min_y_in, max_x_in, max_y_in, x_actual_in, y_actual_in, x_direccion_destino_in, y_direccion_destino_in, pelota_dimension_x_in, pelota_dimension_y_in, id_balon_in, tiempo_ejecucion_in, imagen_balon_in ){
                /* Propiedades. */
                this.min_x = min_x_in;
                this.min_y = min_y_in;
                this.max_x = max_x_in;
                this.max_y = max_y_in;
                this.x_actual =  x_actual_in;
                this.y_actual = y_actual_in;
                this.x_direccion_destino = x_direccion_destino_in;
                this.y_direccion_destino = y_direccion_destino_in;
                this.x_destino = this.x_actual + this.x_direccion_destino;
                this.y_destino = this.y_actual + this.y_direccion_destino;
                this.pelota_dimension_x = pelota_dimension_x_in;
                this.pelota_dimension_y = pelota_dimension_y_in;
                this.id_balon = id_balon_in;
                this.tiempo_ejecucion = tiempo_ejecucion_in;
                this.imagen_balon = imagen_balon_in;
               
                /* Métodos. */
                this.rebote_eje_y_superior = rebote_eje_y_superior;
                this.rebote_eje_x_izquierda = rebote_eje_x_izquierda;
                this.rebote_eje_y_inferior = rebote_eje_y_inferior;
                this.rebote_eje_x_derecha = rebote_eje_x_derecha;
                this.desplazar_pelota = desplazar_pelota;
                this.desplazamiento_pelota_en_tiempo = desplazamiento_pelota_en_tiempo;
                this.anhadir_balon = anhadir_balon;
                this.rebote_eje_y_superior_inferior_ladrillo = rebote_eje_y_superior_inferior_ladrillo;
                this.rebote_eje_y_inferior_superior_ladrillo = rebote_eje_y_inferior_superior_ladrillo;
               
            }

            function crear_ladrillo(){
            /* Método para crear ladrillos en el terreno de juego. se basa en crear DIV Visibles en las posiciones dadas. */
            var nuevo_ladrillo = "<div style='width:" + (this.x_final - this.x_origen) + "px; height:" + (this.y_final - this.y_origen) + "px; position:absolute; top:" + this.y_origen + "px; left:" + this.x_origen + "px; border: solid 1px #000000;' />";
                var body_id = document.getElementById('mi_campo');
                body_id.innerHTML = body_id.innerHTML + nuevo_ladrillo;
               
            }
           
            function obtener_x_origen_ladrillo(){
            /* Método que lanza al exterior la propiedad x_origen del ladrillo. */
            return this.x_origen;
            }
           
            function obtener_y_origen_ladrillo(){
            /* Método que lanza al exterior la propiedad y_origen del ladrillo. */
            return this.y_origen;
            }
           
            function obtener_x_final_ladrillo(){
            /* Método que lanza al exterior la propiedad x_final del ladrillo. */
            return this.x_final;
            }
           
            function obtener_y_final_ladrillo(){
            /* Método que lanza al exterior la propiedad y_final del ladrillo. */
            return this.y_final;
            }
           
            /* Esta función crea la clase ladrillo, la cual empleamos para crear los diferentes objectos ladrillo. */
           
            function crear_clase_ladrillo (x_origen_in, y_origen_in, x_final_in, y_final_in){
            /* Propiedades. */
                this.x_origen = x_origen_in;
                this.y_origen = y_origen_in;
                this.x_final = x_final_in;
                this.y_final = y_final_in;
               
           /* Métodos. */
                this.crear_ladrillo = crear_ladrillo;
                this.obtener_x_origen_ladrillo = obtener_x_origen_ladrillo;
                this.obtener_y_origen_ladrillo = obtener_y_origen_ladrillo;
                this.obtener_x_final_ladrillo = obtener_x_final_ladrillo;
                this.obtener_y_final_ladrillo = obtener_y_final_ladrillo;
            }
           
            /* Función que mpleamos para crear el juego y arrancarlo. */
           
            function inicio_pelotas (){
           
            /* Creamos los diferentes objectos Ladrillo y los situamos en la pantalla. */
            var i = 0;
            vector_ladrillos[i++] = new crear_clase_ladrillo(300, 500, 800, 500);
            vector_ladrillos[i++] = new crear_clase_ladrillo(200, 200, 600, 200);
                for ( i = 0; i<vector_ladrillos.length; i++ ){
                vector_ladrillos[i].crear_ladrillo();
                }
               
            /* Creamos los diferentes objectos pelota, los situamos en la pantalla y llamamos al me´tododesplazamiento_pelota_en_tiempo cada tiempo_ejecucion para su desplazamiento. */
            i = 0;
                vector_pelotas[i++] = new Crear_clase_pelota(min_x_incial, min_y_incial, max_x_incial, max_y_incial, x_actual_incial, y_actual_incial, x_direccion_destino_incial , y_direccion_destino_incial, 20, 20, id_balon_incial + i, tiempo_ejecucion_incial, './balon.png');
                vector_pelotas[i++] = new Crear_clase_pelota(min_x_incial, min_y_incial, max_x_incial, max_y_incial, 300, 40, x_direccion_destino_incial + 2, y_direccion_destino_incial - 2, 20, 10, id_balon_incial + i, tiempo_ejecucion_incial, './rugby.png');
                vector_pelotas[i++] = new Crear_clase_pelota(min_x_incial, min_y_incial, max_x_incial, max_y_incial, 300, 140, x_direccion_destino_incial-1, y_direccion_destino_incial+2, 20, 10, id_balon_incial + i, tiempo_ejecucion_incial, './rugby.png');
                vector_pelotas[i++] = new Crear_clase_pelota(min_x_incial, min_y_incial, max_x_incial, max_y_incial, 300, 80, x_direccion_destino_incial+3, y_direccion_destino_incial, 20, 20, id_balon_incial + i, tiempo_ejecucion_incial, './balon2.png');
               
                for (i = 0; i<vector_pelotas.length; i++ ){
                    vector_pelotas[i].anhadir_balon();
                    /* Creamos en modo texto la instrucción en Javascript y la ejecutamos con eval. */
                    eval("var mi_pelota_start_" + i + "= vector_pelotas[i] ");
                    eval("window.setInterval(function(){mi_pelota_start_" + i + ".desplazamiento_pelota_en_tiempo(vector_ladrillos);} , mi_pelota_start_" + i + ".tiempo_ejecucion) ");
                }
            }
        </script>
    </head>
    <body id="mi_campo" onload="inicio_pelotas();">
       
    </body>
</html>

10
Hola,
estoy practicando Javascript y a partir de un código base debo conseguir que un div se mueva y una serie de imágenes reboten contra él. El problema que tengo es que aunque consiga que el div se mueva las posiciones contra las que rebotan las imágenes son siempre las iniciales del div. Revisando el código he visto una serie de funciones llamadas:
obtener_x_origen, obtener_y_origen, obtener_x_final y obtener_y_final que quizá sean la causa del problema. Sin embargo, cómo consigo actualizar dichas variables para que, en el caso de que el div (asignándole a su left el valor de x_origen = x_origen + velocidad) las imágenes reboten contra las nuevas posiciones del div?

Aquí dejo el código:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejemplos de javascript. </title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript">
           
            function sacar_x_pantalla(){
                /* Obtenemos el tamaño de la forma normal de la pantalla total por defecto, y lo guardamos en una variable temporal de memoria que llamamos myWidth */
                var myWidth = screen.width;

                /* Comprobamos casos escepcionales. */
                if( typeof( window.innerWidth ) == 'number' ) {
                    /* IE>7 Caso de los navegadores compatibles con HTML5. */
                    myWidth = window.innerWidth;
                }
                else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
                    /*IE 6 o superior que no cumple con HTML5. */
                    myWidth = document.documentElement.clientWidth;
                }
                else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
                    /*IE 4 o compatibles. */
                    myWidth = document.body.clientWidth;
                }
                /* Enviamos al exterior el resultado de leer la propiedad. */
                return myWidth;
            }
           
            function sacar_y_pantalla(){
                /* Obtenemos el tamaño de la forma normal de la pantalla total por defecto, y lo guardamos en una variable temporal de memoria que llamamos myHeight */
                var myHeight = screen.height;

                /* Comprobamos casos escepcionales. */
                if( typeof( window.innerHeight ) == 'number' ) {
                    /* IE>7 Caso de los navegadores compatibles con HTML5. */
                    myHeight = window.innerHeight;
                }
                else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
                    /*IE 6 o superior que no cumple con HTML5. */
                    myHeight = document.documentElement.clientHeight;
                }
                else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
                    /*IE 4 o compatibles. */
                    myHeight = document.body.clientHeight;
                }
                /* Enviamos al exterior el resultado de leer la propiedad. */
                return myHeight;
            }
           
            /* Valores x e y mínimos de la pantalla por donde se mueve la pelota.*/
            var min_x_incial = 0; // Indicamos el punto minimo a donde deben de ir las pelotas por defecto.
            var min_y_incial = 0; // Indicamos el punto minimo a donde deben de ir las pelotas por defecto.

            /* Valores x e y máximos de la pantalla por donde se mueve la pelota.*/
            var max_x_incial = sacar_x_pantalla(); // Obtenermos el punto máximo a donde deben de ir las pelotas por defecto.
            var max_y_incial = sacar_y_pantalla(); // Obtenermos el punto máximo a donde deben de ir las pelotas por defecto.
           
            /* Valores de nuestra posición actual. */
            var x_actual_incial = 0; // Indicamos el punto de partida de las pelotas por defecto.
            var y_actual_incial = 0; // Indicamos el punto de partida de las pelotas por defecto.

            /* Valores de nuestra dirección y destino. */
            var x_direccion_destino_incial = 6;  // Indicamos la dirección y destino de las pelotas por defecto.
            var y_direccion_destino_incial = 10; // Indicamos la dirección y destino de las pelotas por defecto.

            /* Valores del siguiente punto de destino. */
            var x_destino_incial =  x_actual_incial +  x_direccion_destino_incial; // Indicamos el punto de llegada de las pelotas por defecto.
            var y_destino_incial =  y_actual_incial +  y_direccion_destino_incial; // Indicamos el punto de llegada de las pelotas por defecto.
           
            var pelota_dimension_x_incial = 300; // Indicamos la dimension de las pelotas por defecto.
            var pelota_dimension_y_incial = 300; // Indicamos la dimension de las pelotas por defecto.
            var id_balon_incial = 'id_balon_'; // Indicamos id de las pelotas por defecto.
            var tiempo_ejecucion_incial = 1000/50; // Indicamos el tiempo de ejecución por defecto, en base a este tiempo y del desplazamiento las pelotas ambian de velocidad.
           
            var vector_pelotas = new Array(); // Inicio el vector de pelotas con ninguna pelota activa.
            var vector_ladrillos = new Array(); // Inicio el vector de ladrillos con ningún ladrillo activo.
           
            /* Función para autollamada. */

            /* Los métodos quedarán así.*/


            function rebote_eje_y_superior(){
            /* Este método comprueba si la pelota ha llegado a la parte superior de la pantalla máxima, y en caso de ser así ejecuta elrebote. */
                if( this.y_destino < this.min_y ){
                    /* Encaso de que la pelota se va a desplazar por encima de la posición mínima ejecutamos el rebote. */
                    this.y_destino = this.min_y - this.y_destino; // Vemos cuanto se desplaza por encima de la posición minima.
                    this.y_destino = this.min_y + this.y_destino; // Este desplazamiento se lo sumamos a la posición minima.
                    this.y_direccion_destino = 0 - this.y_direccion_destino; // Cambiamos el signo al vector de desplazamiento en el eje Y, que es el que marca arriba y abajo.
                }
            }

            function rebote_eje_x_izquierda(){
            /* Este método comprueba si la pelota ha llegado a la parte izquierda de la pantalla máxima, y en caso de ser así ejecuta elrebote. */
                if( this.x_destino < this.min_x ){
                    /* Encaso de que la pelota se va a desplazar por la izquierda de la posición mínima ejecutamos el rebote. */
                    this.x_destino = this.min_x - this.x_destino; // Vemos cuanto se desplaza por la izquierda de la posición minima.
                    this.x_destino = this.min_x + this.x_destino; // Este desplazamiento se lo sumamos a la posición minima.
                    this.x_direccion_destino = 0 - this.x_direccion_destino; // Cambiamos el signo al vector de desplazamiento en el eje X, que es el que marca izquierda y derecha.
                }
            }


            function rebote_eje_y_inferior(){
            /* Este método comprueba si la pelota ha llegado a la parte inferior de la pantalla máxima, y en caso de ser así ejecuta elrebote. */
                if( (this.y_destino + this.pelota_dimension_y) > this.max_y ){
                    /* Encaso de que la pelota se va a desplazar por debajo de la posición máxima ejecutamos el rebote. Hay que tener en cuenta en este caso las dimensiones de la pelota.*/
                    this.y_destino = this.max_y - (this.y_destino + this.pelota_dimension_y); // Vemos cuanto se desplaza por debajo de la posición máxima.
                    this.y_destino = this.max_y + this.y_destino - this.pelota_dimension_y; // Este desplazamiento se lo restamos a la posición máxima.
                    this.y_direccion_destino = 0 - this.y_direccion_destino; // Cambiamos el signo al vector de desplazamiento en el eje Y, que es el que marca arriba y abajo.
                }
            }

            function rebote_eje_x_derecha(){
            /* Este método comprueba si la pelota ha llegado a la parte derecha de la pantalla máxima, y en caso de ser así ejecuta elrebote. */
                if( (this.x_destino + this.pelota_dimension_x) > this.max_x ){
                    /* Encaso de que la pelota se va a desplazar por la derecha de la posición máxima ejecutamos el rebote. Hay que tener en cuenta en este caso las dimensiones de la pelota.*/
                    this.x_destino = this.max_x - (this.x_destino + this.pelota_dimension_x); // Vemos cuanto se desplaza por la derecha de la posición máxima.
                    this.x_destino = this.max_x + this.x_destino - this.pelota_dimension_x; // Este desplazamiento se lo restamos a la posición máxima.
                    this.x_direccion_destino = 0 - this.x_direccion_destino; // Cambiamos el signo al vector de desplazamiento en el eje X, que es el que marca izquierda y derecha.
                }
            }

            function desplazar_pelota(){
            /* Este método recoge la imagen con el ID oportuno y cambia dicha imagen a la posición destino. Al final del prceso actualiza las propiedades de la posición actual de la pelota. */
                document.getElementById(this.id_balon).style.position = "absolute"; // Marcamos la posicón absoluta de  la pelota.
                document.getElementById(this.id_balon).style.top = this.y_destino + "px"; // Desplazamos la imagen a la nueva posición en Y.
                document.getElementById(this.id_balon).style.left = this.x_destino + "px"; // Desplazamos la imagen a la nueva posición en X.
                this.x_actual = this.x_destino; // Actualizamos los datos de la posición actual de la pelota.
                this.y_actual = this.y_destino; // Actualizamos los datos de la posición actual de la pelota.
            }

11
Aprender a programar desde cero / Calculadora Javascript
« en: 12 de Marzo 2015, 01:22 »
Buenas,

he comenzado a trabajar creando una calculadora básica con HTML y Javascript y hasta ahora no encontrado problemas con el funcionamiento de eventos usados, funciones, operaciones, etc. Sin embargo, no consigo introducir un símbolo que indique que el número es negativo y que no reste. Es decir, no quiero una operación sino que lo que deseo obtener es un símbolo (-) que indique que el número es negativo de forma que, por ejemplo, 5-(-)5 se pueda obtener sin que Javascript alerte de un Sintax error.
Cabe mencionar que el operar el número introducido por (-1) para obtener el numero negativo correspondiente al usado no me resulta útil ya que, al multiplicar, ya se hace una operación y, por ello, la calculadora resetea los valores.
¿Alguna idea?
Saludos.

12
Hola Alex,
muchas gracias por responder tan rápido. Efectivamente, el problema que tenía era que aún haciendo uso de switch case sabía que los valores no estaban variando pero no sabía cómo conseguir que x fuera variando y así conseguir que las imágenes fueran cambiando. Con el código que me has puesto de ejemplo ya funciona a la perfección.
Ah, y gracias por recomendarme el curso. Lo iré revisando para poder reforzar los conocimientos según avancemos en clase.
Saludos  :)

13
Hola. Hace unas semanas he empezado a aprender un poco de Javascript: partiendo de diagramas de flujo, pseudocódigo y, finalmente, código. Tras hacer varios ejemplos, nos han propuesto uno nuevo que no consigo solucionar. El ejemplo en sí consiste en tomar una imagen de una persona y hacer que dicha imagen se mueva a lo largo de la pantalla. Ahora bien, esa parte la he logrado, así como indicar, también, que dicha imagen cambie a otra (usando if y else) diferente para simular que esa persona anda. Mi pregunta es que, si quiero cambiar esa imagen varias veces, es decir, no tener solo 2 poses de esa persona sino cuatro, ¿cómo podría cambiar esas imágenes mientras se está moviendo? Lo he intentado con un switch case pero no me ha dado resultado. ¿Alguna solución?

Código: [Seleccionar]

        <script type="text/javascript">
            var x       = 0;
            var minimo  = 200;
            var maximo  = 1000;
            var despl_actual = minimo;
            var incremento = 20;
            var elemento_1 = 0;
            var elemento_2 = 0;
            var elemento_3 = 0;
            var imagen = null;

            function practicas( )
            {
                imagen = document.getElementById( "img_script" );
                switch (x) {
                    case 0: imagen.src = "./css/imagenes/walk_2.jpg"; break;
                    case 1: imagen.src = "./css/imagenes/walk_1.jpg"; break;
                    case 2: imagen.src = "./css/imagenes/walk_3.jpg"; break;
                    case 3: imagen.src = "./css/imagenes/walk_4.jpg"; break;
                }
                if (minimo <= despl_actual){
                    if (maximo>=despl_actual){
                        despl_actual = despl_actual + incremento;
                        imagen.style.left = despl_actual + "px";
                    }
                }
           }

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".