Estoy haciendo un juego de plataformas en 2D y estoy trabajando en la gravedad y la colisión, pero cuando realmente logro que la colisión funcione, mi gravedad se volvió muy intermitente, ¿hay alguna manera de solucionar esto? aquí está el código:
gravity(){ if(this.y <= 400 - this.scale){ let gc = get(this.x, this.y + 20); print(gc); if(gc[0] == 0 && gc[1] == 0 && gc[2] == 255 && gc[3] == 255){ return; } else{ this.y += 2; } } }editar: He oído que esto debería funcionar, así que proporcionaré más código para ver si ayuda. aquí está la función que ejecuta todo:
var groundArray = []; groundArray[0] = [0]; groundArray[1] = [0]; groundArray[2] = [0]; groundArray[3] = [0]; groundArray[4] = [0]; groundArray[5] = [0]; groundArray[6] = [0]; groundArray[7] = [0]; groundArray[8] = [1]; groundArray[9] = [1, 1]; function setup() { noStroke(); createCanvas(400, 400); for(let y = 0; y < groundArray.length; y++){ for(let x = 0; x < groundArray[y].length; x++){ if(groundArray[y][x] != 0){ groundArray[y][x] = new ground(x * 40, y * 40); } } } } var play = new player(35, 0, 20); function draw() { background(255); for(let y = 0; y < groundArray.length; y++){ for(let x = 0; x < groundArray[y].length; x++){ if(groundArray[y][x] != 0){ groundArray[y][x].draw(); } } } play.draw(); play.gravity(); }Normalmente, una función llamada draw() se llama cada cuadro, ¿es eso lo que está sucediendo aquí? Parece que es así. En cuyo caso, ¿realmente desea llamar a new ground(x * 40, y * 40) en cada cuadro? ¿No estaría mejor ubicada esta creación de objetos en setup() ?
Sospecho que es innecesario y posiblemente haga un trabajo de inicialización costoso en cada cuadro, pero sin ver el código fuente completo, uno no puede estar seguro.