Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.12.2018, 15:16
Новичок на форуме
Отправить личное сообщение для RasuLcrose Посмотреть профиль Найти все сообщения от RasuLcrose
 
Регистрация: 18.12.2018
Сообщений: 6

Как танком не давать возможность проходить сквозь друг-друга ? JavaScript
vinit();
function init() {
    audio = new Audio("audio/audio.mp3");
    // audio.play();
    tank =  new Tank(100, 100, 60, 85, "img/killer.svg");
    enemyTank = new Tank(60, 60, 85, 75, "img/tanchik.png");
    myGame = new MyGame();
    myGame.startGame();
}


function MyGame() {
    var self = this;
    self.canvas = document.getElementById("myCanvas");
    self.context = self.canvas.getContext("2d");
    self.key = false;
    self.randomDirection = false;

    self.startGame = function() {
        setInterval(self.updateGameArea, 1);
        setInterval(enemyTank.getRandomDirection, 1000);
        window.addEventListener('keydown', function (e) {
            self.key = e.keyCode;
        });
        window.addEventListener('keyup', function (e) {
            self.key = false;
        });
    }


    self.updateGameArea = function() {
        self.clear();
        if (self.key == 37) {
            tank.moveLeft();
        }
        if (self.key == 38) {
            tank.moveUp();
        }
        if (self.key == 39) {
            tank.moveRight();
        }
        if (self.key == 40) {
            tank.moveDown();
        }
        if(self.key == 32) {
            tank.bullets.push(new Bullet(tank.angle, tank.x, tank.y, tank.width, tank.height));
            self.key = false;
        }
        tank.drawTank();
        enemyTank.drawRandomly();        
        for (i = 0; i < tank.bullets.length; i++) {
            tank.bullets[i].drawBullet();
        }
    }


    self.drawRotatedImage = function(image, x, y, angle, width, height) { 
        TO_RADIANS = Math.PI/180; 
        myGame.context.save(); 
        myGame.context.translate(x, y);
        myGame.context.rotate(angle * TO_RADIANS);
        myGame.context.drawImage(image, -(width/2), -(height/2), width, height);
        myGame.context.restore(); 
    }


    self.clear = function() {
        self.context.clearRect(0, 0, self.canvas.width, self.canvas.height);
    }

}

function Tank(x, y, width, height, src) {
    var self = this;
    self.x = x;
    self.y = y;
    self.width = width;
    self.height = height;
    self.img = new Image();
    self.img.src = src;
    self.bullets = [];
    self.angle = 0;
    self.randomMovement = self.moveLeft;

    self.moveRight = function() {
        self.angle = 90;
        if(self.canMove()) {
            self.x++;
        }
    }

    self.moveLeft = function() {
        self.angle = -90;
        if (self.canMove()) {
            self.x--;
        }
    }

    self.moveUp = function() {
        self.angle = 0;
        if (self.canMove()) {
            self.y--;
        } 
    }

    self.moveDown = function() {
        self.angle = 180;
        if (self.canMove()) {
            self.y++;
        } 
    }

    self.checkBoundaries = function() {
         
        if (self.x > self.width/2 && 
            self.x < myGame.canvas.width-self.width/2 && 
            self.y > self.height/2 && 
            self.y < myGame.canvas.height-self.height/2
            ) {
                return true;
            }

        if (self.x <= self.width/2) {
            self.x+=5;
        }
        if (self.x >= myGame.canvas.width - self.width/2) {
            self.x-=5;
        }
        if (self.y <= self.height/2) {
            self.y+=5;
        }
        if (self.y >= myGame.canvas.height - self.height/2) {
            self.y-=5;
        }


        return false;
    }

    this.canMove = function() {
        if (self.x > self.width/2 &&
            self.x < myGame.canvas.width - self.width/2 &&
            self.y > self.height/2 &&
            self.y < myGame.canvas.height - self.height/2) {
            return true;
        } 
        if (self.x >= myGame.canvas.width - self.width/2) {
            self.x-=5;
        }
        if (self.x <= self.width/2) {
            self.x+=5;
        }
        if (self.y >= myGame.canvas.height - self.height/2) {
            self.y-=5;
        }
        if (self.y <= self.height/2) {
            self.y+=5;
        }
    }

    self.drawTank = function() {
        myGame.drawRotatedImage(self.img, self.x, self.y, self.angle, self.width, self.height);
    }

    self.getRandomDirection = function() {
        movements = [self.moveRight, self.moveLeft, self.moveDown, self.moveUp];
        self.randomMovement = movements[Math.floor(Math.random() * movements.length)];
    }

    self.drawRandomly = function() {  
        self.randomMovement();
        myGame.drawRotatedImage(self.img, self.x, self.y, self.angle, self.width, self.height);
    }
}

function Bullet(direction, x, y, tank_width, tank_height) {
    var self = this;
    self.img = new Image();
    self.img.src = "img/tank_bullet.png";
    self.direction = direction;
    self.tank_width = tank_width;
    self.tank_height = tank_height;
    self.width = 50;
    self.height = 20;
    self.angle = 0;
    self.current_movement = self.moveDown;
    
    if (self.direction == 0) {
        self.x = x;
        self.y = y - self.tank_height/2 - 15;
    } else if (self.direction == 90) {
        self.x = x + self.tank_width/2 + 15;
        self.y = y;
    } else if (self.direction == -90) {
        self.x = x - self.tank_width/2 - 15;
        self.y = y;
    } else if (self.direction == 180) {
        self.x =x;
        self.y = y + self.tank_height/2 + 15;
    }

    self.moveUp = function() {
        self.y-=3;
        self.angle=-90;
    }
    self.moveLeft = function() {
        self.x-=3;
        self.angle=180;
    }
    self.moveRight = function() {
        self.x+=3;
        self.angle=0;
    }
    self.moveDown = function() {
        self.y+=3;
        self.angle=90;
    }

    self.drawBullet = function() {
        if (self.direction == 0) {
            self.moveUp();
        }        
        if (self.direction == 90) {
            self.moveRight();
        }
        if (self.direction == -90) {
            self.moveLeft();
        }
        if (self.direction == 180) {
            self.moveDown();
        }
        myGame.drawRotatedImage(self.img, self.x, self.y, self.angle, self.width, self.height);
    }
}
Ответить с цитированием
  #2 (permalink)  
Старый 23.12.2018, 23:48
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Проверять пересечение прямоугольников, формула
function collision(rect1, rect2) {
    // collision detected?
}

Опознать прямоугольники, например
boundaryUp = { x: 0, y: 0, width: canvas.width, height: 1 };
boundaryDown = { x: 0, y: canvas.height, width: canvas.width, height: 1 };
boundaryLeft = { x: 0, y: 0, width: 1, height: canvas.height };
boundaryRight = { x: canvas.width, y: 0, width: 1, height: canvas.height };

tank = { x: 100, y: 100, width: 80, height: 40 };
enemyTank = { x: 200, y: 200, width: 80, height: 40 };

bullet = { x: tank.x, y: tank.y, width: 10, height: 5 };

Делать нужные комбинации
if (collision(tank, boundaryUp)) {
    // collision detected!
}
if (collision(tank, enemyTank)) {
    // collision detected!
}
if (collision(bullet, enemyTank)) {
    // collision detected!
}
Ответить с цитированием
  #3 (permalink)  
Старый 24.12.2018, 14:37
Профессор
Отправить личное сообщение для s24344 Посмотреть профиль Найти все сообщения от s24344
 
Регистрация: 12.08.2015
Сообщений: 206

Спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слои перекрывают друг друга на 100% как кликнуть на слой снизу? ViRuSreloaded Элементы интерфейса 2 18.12.2014 00:24
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Два javascript перебивают друг друга Максим21 Ваши сайты и скрипты 0 29.07.2013 12:24
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34