У меня мало настенных спрайтов, и я хочу, чтобы стена удалялась ТОЛЬКО, если спрайт робота продолжает касаться ее в течение 1 секунды.
т.е. она должна работать следующим образом:
- Робот касается стены, удерживает контакт со стеной в течение 1 секунды, стена удаляется
- Робот касается стены, теряет контакт со стеной менее чем за 1 секунду, стена не удаляется
- Точка 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 стенах одновременно.