Контролируйте скорость мяча в понге

У меня есть этот код ниже, и мне трудно его решить. В функции dotime у меня есть скорость мяча:

/* HERE */
function dotime() {
    move1();
    if (myform != null) {
        myform.text3.value = display1();
        myform.score.value = "" + score;
    }
    /* ---Ball Speed--- */
    if (!oops_flag) timerID = setTimeout("dotime()", 190);
    /* ---trying to make ball speed faster--- */
    if (score == 1) {
        timerID = setTimeout("dotime()", 100 - 30);
    }
    timerRunning = true;
}

Я пытался заставить мяч двигаться быстрее, но когда я делаю второе «если», мяч летит слишком быстро.

Заранее спасибо, фуфле.

полный код:

var crlf = "\r\n";
var x = 0;
var y = 0;
var dx = 1;
var dy = 1;
var s = "";
var u = 0;
var oops_flag = false;
var score = 0;

function move1() {
    x += dx;
    if (x > 61) {
        x -= 2 * Math.abs(dx);
        if (dx > 0) dx = -dx;
    }
    if (x < 0) {
        x += 2 * Math.abs(dx);
        if (dx < 0) dx = -dx;
    }
    y += dy;
    if (y > 24) {
        y -= 2 * Math.abs(dy);
        if (dy > 0) dy = -dy;
        if (Math.abs(x - 2 * u - 1) > 2) {
            oops_flag = true;
        } else {
            score += 1;
        }
    }
    if (y < 0) {
        y += 2 * Math.abs(dy);
        if (dy < 0) dy = -dy;
    }
}

function display1() {
    var s1 = ""
    var i, j;
    if (oops_flag) return "                       Unlucky, Play again?"
    for (j = 0; j < 25; j++) {
        for (i = 0; i < 62; i++) {
            /* BALL */
            if (j == y && i == x) s1 += "????";
            else s1 += " ";
        }
        s1 += crlf;
    }
    /* DEFENDER */
    var s2 = "";
    for (i = 0; i < 31; i++) {
        if (u == i) s2 += "▄▄▄▄▄";
        else s2 += "  ";
    }
    return (s1 + s2);
}
var timerID = null;
var timerRunning = false;
var myform;

function stopclock() {
    if (timerRunning) clearTimeout(timerID);
    timerRunning = false;
}

function startclock(form) {
    myform = form;
    oops_flag = false;
    score = 0;
    if (navigator.userAgent.indexOf("Mac") > 2) crlf = "\n";
    stopclock();
    dotime();
    // var id= setInterval(frameElement,10000);
}
/* HERE */
function dotime() {
    move1();
    if (myform != null) {
        myform.text3.value = display1();
        myform.score.value = "" + score;
    }
    if (!oops_flag) timerID = setTimeout("dotime()", 100);
    if (score == 1) {
        timerID = setTimeout("dotime()", 100 - 30);
    }
    timerRunning = true;
}

person fufle    schedule 23.03.2017    source источник
comment
Что значит слишком быстро? Чего ты хочешь?   -  person evolutionxbox    schedule 23.03.2017
comment
Это слишком расплывчато. Вы не дали достаточно информации. В сочетании с тем фактом, что код очень плохо отформатирован, вы очень затрудняете кому-либо помощь.   -  person Carcigenicate    schedule 23.03.2017
comment
потому что первый раз и второй таймер оба работают?   -  person epascarello    schedule 23.03.2017


Ответы (1)


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

if (!oops_flag) {
    var speed = 100;
    if (score===1) speed = 70;
    timerID = setTimeout(dotime, speed);
}

или с тернарным оператором

if (!oops_flag) {
    var speed = (score===1) ? 70 : 100;
    timerID = setTimeout(dotime, speed);
}
person epascarello    schedule 23.03.2017
comment
Большое спасибо! и как я могу сделать 3 разные скорости? - person fufle; 23.03.2017
comment
Используйте 1_ - person epascarello; 23.03.2017
comment
Нет успеха. Благодарю вас! - person fufle; 23.03.2017