Alguien me ayuda con Delphi?


  • 0

    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

    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.



  • 2

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

    Gracias por responder :)



  • 3

    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.



  • 4

    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...



  • 5

    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





Has perdido la conexión. Reconectando a Hardlimit.