• Portada
    • Recientes
    • Usuarios
    • Registrarse
    • Conectarse

    Alguien me ayuda con Delphi?

    Programado Fijo Cerrado Movido
    Software
    4
    6
    1.1k
    Cargando más mensajes
    • Más antiguo a más nuevo
    • Más nuevo a más antiguo
    • Mayor número de Votos
    Responder
    • Responder como tema
    Accede para responder
    Este tema ha sido borrado. Solo los usuarios que tengan privilegios de administración de temas pueden verlo.
    • B
      barc
      Última edición por

      Hola a todos (os tengo abandonados :(),

      Estoy con Delphi (no por ganas, es lo que nos hacen utilizar en el insituto) y necesito resolver una cosilla.

      El tema: estoy programando un juego que parte de el es como el Arcanoid. Lo tengo todo ya casi montado, solo tengo un problema: para hacer el movimiento de "la nave que mata" (para entendernos) utilizo las teclas del teclado. Hasta ahí perfecto.
      Utilizo el Procedure OnKeyPress, que solo me permite una sola variable Key (de tipo Char). El problema viene que para ejecutar el disparo de "la nave que mata" necesito tener una tecla que siempre estará pulsada (para disparar), mientras que tengo que utilizar las de movimiento.

      El problema? El Procedure OnKeyPress solo me da una variable Key, así que: o muevo la "nave que mata" o disparo con ella. No hay forma de tener más de una variable Key?

      No se si me habré liado mucho explicando..

      En el Procedure OnKeyPress tengo escrito esto (para que os hagáis una idea):

      –-----------------------------------------------------------------------------------------
      procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
      begin

      if key= 'a' then begin
      if image2.left>10 then image2.left:=Image2.left-10;

      if image4.top=464 then begin
      image4.top:=464;
      image4.left:=image2.left;
      end;

      if image5.top=464 then begin
      image5.top:=464;
      image5.left:=image2.left+image2.width-image5.width;
      end;
      end;

      if key= 'd' then begin
      if image2.left<415 then image2.left:=Image2.left+10;

      if image4.top=464 then begin
      image4.top:=464;
      image4.left:=image2.left;
      end;

      if image5.top=464 then begin
      image5.top:=464;
      image5.left:=image2.left+image2.width-image5.width;
      end;
      if (key='l') and (timer2.enabled=false) then begin
      timer2.enabled:=true;
      end;
      end;

      el Timer2 controla el evento de disparar.

      Sorry por el rollo, alguien me echa un cable?

      P.D.: Sé poco de Delphi.

      Gracias de adelantado 🙂

      1 Respuesta Última respuesta Responder Citar 0
      • SergimanS
        Sergiman
        Última edición por

        Es que realmente solo se pulsa una tecla cada vez, asi que registras solo la tecla pulsada. Como bien has dicho es un evento y por lo tanto se lanzara cada vez que se pulse una tecla y lo unico que debes hacer es preguntar si la tecla que se pulso es la que tu has decidido que sea la de disparo.

        Lo he mirado en la ayuda de Delphi y pone literalmente "Occurs when key pressed" . Cuando se pulse una tecla se lanza el evento que te llevara al procedimiento que has definido; preguntas si la tecla pulsada es la de disparo pues disparas, si es alguna de las de movimiento te mueves y sino es ninguna de ellas no haces nada.

        B 1 Respuesta Última respuesta Responder Citar 0
        • B
          barc @Sergiman
          Última edición por

          Si, eso lo entiendo. Lo que necesito es poder tener 2 teclas pulsadas a la vez y que tengan distintos eventos.

          Gracias por responder 🙂

          B 1 Respuesta Última respuesta Responder Citar 0
          • B
            barc @barc
            Última edición por

            Necesito una solución antes del martes.. tengo que presentar la "Beta" (o Alpha xD) y con ese fallo la nota me caerá en picado…

            Gracias de nuevo.

            JosepJ 1 Respuesta Última respuesta Responder Citar 0
            • JosepJ
              Josep @barc
              Última edición por

              Podrias hacer uso de 2 eventos en vez de uno solo. Podrias usar algun KeyPress y KeyRelease (no sé si se llamarán así) y creas tres variables booleanas (globales o como encaje mejor en tu estructura de programa): Derecha, Izquierda, disparar.

              De este modo puedes hacer lo siguiente: (te lo escribo en pseudopascal, no te fijes mucho en la sintaxis…)

              procedure OnKeyPress(tecla: key);
              begin

              if (tecla=derecha) then
              begin
              derecha=true;
              izquierda=false;
              disparar=false;
              end;
              else if (tecla=izquierda) then
              begin
              derecha=false;
              izquierda=true;
              disparar=false;
              end;
              else if (tecla=disparar) then
              begin
              derecha=false;
              izquierda=false;
              disparar=true;
              end;
              end;

              if derecha then mover_nave_hacia_la_derecha();
              else if izquierda then mover_nave_hacia_la_izquierda();

              if disparar then disparar_superrayo();

              En fin espero haberte ayudado.

              Un saludo y suerte!

              Edito: Oh vaya...lo escribí con diseño descendiente pero el sistema del foro se lo ha cargado...

              ninchi_punkrockN 1 Respuesta Última respuesta Responder Citar 0
              • ninchi_punkrockN
                ninchi_punkrock @Josep
                Última edición por

                no se en delphi, pero en javascript y muchos otros, te permite leer dos teclas a la vez, que son la tecla Ctrl y Alt. Podrías usar esas.

                Así, para mover la nave usas las flechas y para disparar el control o el alt.

                Todo sería preguntar si la tecla control o alt está pulsada y si hay alguna más. En javascript creo que era algo así como:

                if(event.AltKey && event.keyCode = '143') //imaginando que es alt y flecha izquierda
                {
                //Se está disparando y moviendo hacia la izquierda
                }

                if(event.AltKey && event.keyCode == '145') // alt + flecha derecha
                {
                //se está disparando y moviendo a la derecha
                }

                Y así con todos.
                Estoy casi seguro de que Delphi debe contemplar por separado cuando se pulsa alt o ctrl.

                No se si esto te servirá, pero weno, una idea es una idea. :sisi:
                Suerte,
                un saludo

                1 Respuesta Última respuesta Responder Citar 0
                • 1 / 1
                • First post
                  Last post

                Foreros conectados [Conectados hoy]

                3 usuarios activos (0 miembros e 3 invitados).
                febesin, pAtO,

                Estadísticas de Hardlimit

                Los hardlimitianos han creado un total de 543.3k posts en 62.8k hilos.
                Somos un total de 34.8k miembros registrados.
                Mia ha sido nuestro último fichaje.