функция javascript P5 создает бесконечный цикл

#javascript #arrays #loops #p5.js

#javascript #массивы #циклы #p5.js

Вопрос:

Я ни за что на свете не могу понять, как сбросить функцию createAliens ниже, чтобы я мог начать новую игру — я в основном ищу способ очистить спрайты с холста, чтобы я мог сбросить игру.

Любая помощь будет серьезно оценена 🙂

 const BORDER = 60;
const SPEED = 3;

let score = 0;

let numAliens = 3;
let alienSpeed = 5;
let aliensArray = [];

let ship; 
let laser;
let lasers = [];

function preload() {
    
}

function setup() {
    createCanvas(1000, 700);

    aliens = new Group();
    ships = new Group();
    lasers = new Group();

    createAliens(numAliens);

    ship = createSprite(width/2, height/1.15, 40, 60); 
    ship.setCollider('rectangle', 0, 0, 40, 60); 
    ships.add(ship); 
}

function draw() {
    background(0);
    
    if(aliens == 0) {
        createAliens(numAliens   2);
    }

    aliens.bounce(aliens); // p5 game methods - collision etc using callbacks
    aliens.overlap(lasers, scoreTotal);
    aliens.collide(lasers, die);
    ship.bounce(aliens, reset);

    keyPressed();
    drawSprites();    

    for (let i = 0; i < allSprites.length; i  ) { // game borderless
        let all = allSprites[i];
            if (all.position.x < - BORDER) {
                all.position.x = width   BORDER;
            }
            if (all.position.x > width   BORDER) {
                all.position.x = - BORDER;
            }            
            if (all.position.y < - BORDER) {
                all.position.y = height   BORDER;
            }            
            if (all.position.y > height   BORDER) {
                all.position.y = - BORDER;
            }            
    }    
}

function createAliens(numAliens) { // spawn some aliens
    for (let j = 0; j < numAliens; j  ) {
        alien = createSprite(random(width), 0, 50, 60);
        alien.shapeColor = color('red');
        alien.setSpeed(random(0.3, alienSpeed), random(45, 150));        
        
        aliensArray.push(alien); 
        aliens.add(alien); 
    }    
}

function die(alien) { // kill the alien
    alien.remove(); 
}

function scoreTotal() { 
    score  = 10;    
}
 
function reset() {
    console.log('RESET FIRING');    
}

function keyPressed() {
    if (keyDown(LEFT_ARROW)) {
        ship.setSpeed(SPEED, 180);        
        ship.friction = 0.01;
    }
    else if (keyDown(RIGHT_ARROW)) {
        ship.setSpeed(SPEED, 0);        
        ship.friction = 0.01;
    }
    else if (keyDown(UP_ARROW)) {
        ship.setSpeed(SPEED, 270);
        ship.friction = 0.01;
    }
    else if (keyDown(DOWN_ARROW)) {        
        ship.setSpeed(SPEED, 90);
        ship.friction = 0.01;
    }
    if(keyWentDown(' '))  {
        let laser = createSprite(ship.position.x, ship.position.y, 5, 5);
        laser.setSpeed(10, 270);
        laser.shapeColor = color('red');        
        laser.life = 30; 
        lasers.add(laser);        
    }
}  

У меня есть инопланетяне, порожденные простой условной логикой:

 if(aliens == 0) {
        createAliens(numAliens   2);
    }  

Комментарии:

1. я забыл упомянуть, что я использую библиотеку p5.play…

2. Не пройдя весь код: как выглядит сброс в вашем случае использования, как он будет запущен? Или уже существует код, предназначенный для выполнения этой функции, который просто не работает? Я спрашиваю, потому что ваша draw функция (которая постоянно повторяется) реагирует на присутствие 0 инопланетян.

3. И createAliens на самом деле не может быть «сброшен», потому что он предназначен для создания инопланетян. Вы спрашиваете, как переписать ваш код, чтобы createAliens функция не выполнялась автоматически все время? (Тем не менее, триггер для запуска / не запуска необходим.)

4. Привет, Кей, звучит здорово, я немного в тупике 🙂