#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. Привет, Кей, звучит здорово, я немного в тупике 🙂