We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I want to make a game where players can play with just one button. This is just a test sketch. There is a function for joining in with a keypress. If press enter you will enter the next room(game). when in this room a player press his key he will move forward. but there is a problem when a other player presses his key the others players isn't working. I think it has something to do with the structure. I can't figure it out to realize individual key input. Any solutions?
    //global
    var room = 0
    var players = []
    function setup() {
        if (room === 0); {
            createCanvas(800, 600)
            setup_room0()
        }
        if (room === 1) {
            setup_room1()
        }
    }
    function draw() {
        if (room === 0) {
            post_draw_room0();
            draw_room0();
        }
        if (room === 1) {
            post_draw_room1();
            draw_room1();
        }
    }
function keyPressed() {
    if (keyCode == ENTER) {
        if (room === 0) {
            room = 1
            setup()
        }
    }
}
function keyTyped() {
    if (room === 0) {
        players.push(key)
        playersCheck.push(false)
    }
}
// room 0
var text1 = "buttons"
var playersCheck = []
//player select room
function setup_room0() {
}
function post_draw_room0() {
    background(255, 0, 255);
    // joining and leaving of player
    for (var i = 0; i < players.length; i++) {
        for (var j = 0; j < players.length; j++) {
            if (players[i] === players[j] && i != j) {
                players.splice(j, 1)
                playersCheck.splice(j, 1)
                if (key === players[i] && playersCheck[i] === true) {
                    players.splice(i, 1)
                    playersCheck.splice(i, 1)
                }
            }
            if (key === players[i] && playersCheck[i] === false) {
                playersCheck[i] = !playersCheck[i]
            }
        }
    }
}
function draw_room0() {
    textSize(20);
    textAlign(CENTER);
    text("presss one buton to join and press Enter to play", width / 2, height / 2)
    text(players, width / 2, height / 2 + 20)
}
///////////////////////////////////////////////
//room1
var players_room1 = [];
function setup_room1() {
    for (var i = 0; i < players.length; i++){
    players_room1[i] = {
        playerX: 100,
        playerY: 300,
        playerH: 100,
        playerW: 100,
        playerID: i,
        display: function() {
            rect(this.playerX, this.playerY, this.playerH, this.playerW)
        },
        move: function() {
            if (key === players[this.playerID]) {
                this.playerX += 1
            }
        }
    }
 }
}
function post_draw_room1() {
    background(255, 255, 0)
        for (var i = 0; i < players.length; i++){
    players_room1[i].move();
}
}
function draw_room1() {
        for (var i = 0; i < players.length; i++){
    players_room1[i].display();
        }
}
}
Answers
I did some testing the real problem is that p5 can't detect multi able key presses. any solution for this?
I think the most likely explanation for you issue is the OS key repeat blocking the other key (see notes on keyRepeat). You might get better results using keyReleased(); but I suspect you'll need some more complex debouncing to make this work the way you want.
i already figured it out. I used the keyPressed and keyReleased functions to create a boolean.. and that works. Thanks for answering