Как удалить спрайт через 1 секунду, только если он все еще касается второго спрайта (javascript) - PullRequest
0 голосов
/ 20 марта 2020

У меня мало настенных спрайтов, и я хочу, чтобы стена удалялась ТОЛЬКО, если спрайт робота продолжает касаться ее в течение 1 секунды.

т.е. она должна работать следующим образом:

  1. Робот касается стены, удерживает контакт со стеной в течение 1 секунды, стена удаляется
  2. Робот касается стены, теряет контакт со стеной менее чем за 1 секунду, стена не удаляется
  3. Точка 2 происходит, затем точка 1 выполняется и работает.

Это связанный код (я вырезал несвязанный код, поэтому некоторые части могут выглядеть странно) -

//sketch.js
var l1c1_top, l1c1_right, l1c1_bottom, l1c1_left;
var create = true;
var player;
var lvl = 1;
var robot = [];
var rbt = [];
var edge;
var level;

function setup() {
  createCanvas(1920,1080);
  player = createSprite(160,90,10,10);
  player.speed = 5;
  level = new Level;
  edge = createEdgeSprites();
}
function draw() {
  background(255);  
  level.play(); 
  drawSprites();
}

и

//level.js
class Level{
    constructor(){}

    play(){
        if(lvl === 1){
            if(create){
                l1c1_top = createSprite(displayWidth/2,displayHeight/2 - 80,50,20);
                l1c1_bottom = createSprite(displayWidth/2,displayHeight/2 + 80,50,20);
                l1c1_right = createSprite(displayWidth/2 + 35,displayHeight/2,20,140);
                l1c1_left = createSprite(displayWidth/2 - 35,displayHeight/2,20,140);
                robot.push(createSprite(140,78.75,10,10)); //robot[0]
                rbt.push(new Rbt(0)); //rbt[0]
                create = false;
            }
            rbt[0].move();
            rbt[0].turn();
            rbt[0].break(l1c1_top);
            rbt[0].break(l1c1_bottom);
            rbt[0].break(l1c1_right);
            rbt[0].break(l1c1_left);
            rbt[0].collideGems();
            rbt[0].collide(l1c1_top);
            rbt[0].collide(l1c1_bottom);
            rbt[0].collide(l1c1_right);
            rbt[0].collide(l1c1_left);   
        }
    }
}

основной файл сейчас:

//rbt.js
class Rbt{
    constructor(n){
        this.serial = n;
        this.m = true;
        this.b = true;
        robot[n].speed = 4.9;
    }
    turn(){
        //just a command here related to the robot's rotation, dont mind this
    }
    move(){
        if(this.m){
            var run = player.x - robot[this.serial].x;
            var rise = player.y - robot[this.serial].y;

            var length  = sqrt((rise * rise) + (run * run));
            var unitX   = run   / length;
            var unitY   = rise  / length;

            robot[this.serial].x += unitX * robot[this.serial].speed;
            robot[this.serial].y += unitY * robot[this.serial].speed;

            robot[this.serial].collide(edge);
        }
    }
    break(sprite){
        if(this.b){
            //QUESTION'S ANSWER WILL BE HERE               
        }
    }
    collideGems(){
        //just a function for colliding with few other things
    }
    collide(sprite){
        robot[this.serial].collide(sprite);
    }
}

Хорошо, чтобы вам было проще понять, смотрите это изображение , оно показывает стены в красном цвете. Робот должен уметь выполнять это c правило разрушения стены на каждой стене. Хорошо, если код соответствует тому, что робот может разбить 2 стены за раз, если они удовлетворяют условию, но было бы лучше, если бы он ломал только одну стену за раз, даже если он соответствует условию на 2 стенах одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...