Windows Hi I have problem withe the my player control

Discussion in 'Programming' started by neryt, Jan 2, 2017.

  1. neryt

    neryt Guest


    Hi I have problem withe the my player control. it is working but when i colide the wall and have
    pressed
    Key W & Key A or Key W & Key S or Key S & Key A or Key S & Key D . player stop moving and i need relase one key to move . in Wall object i only mark as SOLID . if i make in physics it is working but rest of my stuff in game after physics is ON not working corect . If any one now how to make his work i will be very glad :) // I don't want to making this game in physics setings . Game movment is like Binding of Isac

    thanks in advance

    if (!gamepad_is_connected(0)) {

    /// player movment

    if (keyboard_check(ord("W"))) { sprite_index = s_player_up_1; direction = 90; y -= global.move_speed ; }

    if (keyboard_check(ord("S"))) { sprite_index = s_player_down_1; direction = 270;y += global.move_speed ; }

    if (keyboard_check(ord("A"))) { sprite_index = s_player_left_poprawione_bf_1; direction = 180 ;x -= global.move_speed ; }

    if (keyboard_check(ord("D"))) { sprite_index = s_player_right_1; direction = 270 ;x += global.move_speed ; }

    if (keyboard_check(ord("W"))) and (keyboard_check(ord("A"))) { global.move_speed = 5 ; }
    else if (keyboard_check(ord("W"))) and (keyboard_check(ord("D"))) { global.move_speed = 5 ; }
    else if (keyboard_check(ord("S"))) and (keyboard_check(ord("A"))) { global.move_speed = 5 ; }
    else if (keyboard_check(ord("S"))) and (keyboard_check(ord("D"))) { global.move_speed = 5 ; }


    else {global.move_speed = 5 ;}

    }
     
  2. obscene

    obscene Member

    Joined:
    Jun 21, 2016
    Posts:
    2,433
    Five things.

    1. Ow, my eyes. Thanks for the colorful post but it's not necessary.
    2. You don't need to check if a gamepad is connected before checking keyboard controls.
    3. Checking keyboard controls is slow. You are checking each key 3 times in the same frame. That's 12 key checks to check 4 keys. That will slow your game down. Check a key, assign its value to a variable and then use that variable when you need to know if the key is pressed.
    4. So no matter what.... pressing keys, not pressing keys, you set global.move_speed to 5. So the last 5 lines of your code are pointless.
    5. If you press A and W at the same time, you are moving left by 5 and then right by 5 every frame (cancelling each other out). The question is what do you want to happen if you are pressing both keys? You COULD use an else statement (ie, if A else if W) which will make the first key dominant as W will not be checked if A is pressed.
     
    rIKmAN likes this.
  3. rIKmAN

    rIKmAN Member

    Joined:
    Sep 6, 2016
    Posts:
    4,531
    Haven't got time to look at your code - I'm on my phone and the red text is hard to read against the background - but maybe this series will help you going forward with your game...

     
  4. neryt

    neryt Guest


    So the last 5 liines in code i used to get angle 45 so che walking for example up and rght = angle 45
     
  5. obscene

    obscene Member

    Joined:
    Jun 21, 2016
    Posts:
    2,433
    Maybe that's what you think you were doing, but that code sets global.move_speed to 5 and nothing else no matter what you're pressing. You can replace every single bit of that code with one line...

    global.move_speed = 5;
     
  6. neryt

    neryt Guest


    So now it is working almost correct but i can't walk in 45 degre angle
    i read that

    lengthdir_x(len,dir ) ;
    lengthdir_y(len,dir ) ;

    it is for this moovment but i don't now how tu set up




    if (!gamepad_is_connected(0)) {

    var up_key = keyboard_check(ord("W")) ;
    var down_key = keyboard_check(ord("S")) ;
    var left_key = keyboard_check(ord("A")) ;
    var right_key =keyboard_check(ord("D")) ;
    /// player movment

    if (up_key) { sprite_index = s_player_up_1; direction = 90; y -= global.move_speed ; }

    else if (down_key) { sprite_index = s_player_down_1; direction = 270;y += global.move_speed ; }

    else if (left_key) { sprite_index = s_player_left_poprawione_bf_1; direction = 180 ;x -= global.move_speed ; }

    else if (right_key) { sprite_index = s_player_right_1; direction = 270 ;x += global.move_speed ; }

    }
     
  7. obscene

    obscene Member

    Joined:
    Jun 21, 2016
    Posts:
    2,433
    You only need to use else for your opposite directions.

    Left else Right
    Up else Down

    Instead of...

    Up else Down else Left else Right
     
  8. neryt

    neryt Guest

    Not working correct sill i think i need to add ths lengthdir_x(len,dir ) ;
    lengthdir_y(len,dir ) ;
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice