Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2020, 21:28
Новичок на форуме
Отправить личное сообщение для namboodiris Посмотреть профиль Найти все сообщения от namboodiris
 
Регистрация: 14.06.2020
Сообщений: 2

необходимо, чтобы функция вызывалась каждый раз, когда нажимается кнопка
Здравствуйте, уважаемые форумчане!
Подскажите, пожалуйста, в чем проблема.
Я начал изучать js и в качестве пет проджекта захотел сделать игру наподобие space invaders.
есть два вопроса:
- как сделать так, чтобы "выстрел" срабатывал каждый раз, когда нажимается "пробел", а не единожды, как это работает сейчас?
- как сделать "независимыми" друг от друга оси Х? Ситуация: "снаряд" должен появляться ровно посередине зеленого квадрата, и когда происходит выстрел снаряд летит вперед до самого верха канваса. Сначала сделал так чтобы снаряд появлялся посередине, но когда двигаешь зеленый квадрат, снаряд тоже двигается по оси Х. Сейчас они раздельны, но снаряд появляется посередине канваса.

window.onload = function () {

    let canvas = document.getElementById('canv');
    let ctx = canvas.getContext("2d");
    let x = canvas.width/2;
    let y = canvas.height - 20;
    let dx = 2;
    let dy = -2;
    let fireHeight = 2;
    let fireWidth = 2;

    let fireY = canvas.height - fireHeight;
    let spaceHeight = 20;
    let spaceWidth = 20;
    let spaceX = (canvas.width - spaceWidth)/2;

    let fireRadius = 2;
    let status = false;



    let spaceShip = {

        drawShip:function (){
            ctx.beginPath();
            ctx.rect(spaceX,canvas.height - spaceHeight,spaceHeight,spaceWidth);
            ctx.fillStyle = "#191";
            ctx.fill();
            ctx.closePath();

        },
        moveShip:{
            moveX:{
                left: function () {
                    spaceX -=5;
                    if(spaceX <= 0){
                        spaceX=0;

                    }
                    console.log(spaceX);
                    console.log(canvas.width);
                },
                right: function () {
                    spaceX += 5;
                    if(spaceX >= canvas.width - spaceWidth){
                        spaceX=canvas.width - spaceWidth;
                    }
                    console.log(spaceX);
                    console.log(canvas.width);
                }
            },
            moveY:{
                up: function () {

                },
                down: function () {

                }
            }
        },
        gun: {
            makeFire: function () {

                this.drawGun();
                let timerId = setInterval(function() {
                    if (fireY >= 0){
                        fireY+=dy ;
                        clearInterval(timerId);

                    }

                }, 102);
                this.makeFire.onload = function () {
                    status = false;

                }


            },
            drawGun :function () {
                let spaceFire = (canvas.width - spaceWidth)/2;
                
                ctx.beginPath();
                ctx.arc(spaceFire+spaceWidth/2, fireY - spaceHeight,fireRadius,0,Math.PI*2);
                ctx.fillStyle = "#f11";
                ctx.fill();
                ctx.arc(spaceFire+spaceWidth/2, fireY - spaceHeight,fireRadius,0,Math.PI*2);
                ctx.closePath();
            },

        }

    };



    document.addEventListener('keydown', event => {
        if (event.key === 'A'||event.key === 'a'||event.key === 'Ф'||event.key === 'ф'){
            spaceShip.moveShip.moveX.left();
        } else if (event.key === 'D'||event.key === 'd'|| event.key === 'В'||event.key === 'в'){
            spaceShip.moveShip.moveX.right();
        } else if(event.key === " "){
            status = true;
        }

    })



    function draw() {
        ctx.clearRect(0,0, canvas.width, canvas.height);
        spaceShip.drawShip();
        if(status === true){

            spaceShip.gun.makeFire();


        }





        requestAnimationFrame(draw);
    }



draw();
}

Последний раз редактировалось namboodiris, 14.06.2020 в 22:09.
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2020, 21:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

namboodiris,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2020, 19:54
Новичок на форуме
Отправить личное сообщение для namboodiris Посмотреть профиль Найти все сообщения от namboodiris
 
Регистрация: 14.06.2020
Сообщений: 2

Сообщение от Rise Посмотреть сообщение
namboodiris,
На классы надо переписать, иначе то как сейчас будет сложно.
спасибо! до классов мне еще целый раздел нужно освоить))
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2020, 20:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

namboodiris,
https://himbotop.github.io/MFG3/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вставлять переменную в span Hovik Общие вопросы Javascript 17 20.12.2018 08:30
узнать индекс кнопки из массива Hovik Общие вопросы Javascript 0 16.12.2018 02:20