Ir para conteúdo
Fórum Script Brasil
  • 0

Multiplos canvas javascript


Monzo

Pergunta

Gente, boa tarde.

To bolando um game em javascript com o canvas e to com uma dúvida que é a parte final do game.

Preciso gerar blocos (27 em largura e 10 ou 12 em altura) que tem 30w e 20h.

O problema esta que, eu já tenho 2 objetos na minha canvas, uma barra e uma bola, sempre que eu crio dois objetos bloco, a bola n anda ou tudo some..
Vou deixar o codigo do java aqui.. queria ver como gerar os blocos dinamicamente na tela, ou seja.. 270 blocos multiplicados e n um por um no codigo fonte..

Segue o codigo:

 

        var cnv = document.getElementById('canvas').getContext('2d')
        //Liga o game completo;
        cnv.fillRect(0, 0, canvas.width, canvas.height);
            // representar o tamanho máximo da tela onde movimenta os quadrados
            var w = 810;
            var h = 500;
            // Aqui cria as arrays que irão armazenar a posição dos quadrados (importante)
            var x = 390;
            var y = 300;
            // Aqui representará a velocidade dos nossos quadrados
            var vel = 15;
            
            var id;
            
            //Registro de game pause ou load game;
            var gameload = false;
                        
        //Da partida ao motor em 24frames por segundo
        function loading(){ 
            id = window.setInterval(motor, 1000/60)
        };
        
        function bloco(x, y){
            this.x = x;
            this.y = y;
            this.w = 30;
            this.h = 20;
            this.color;
            this.colorcont = 0;
        };
        
        bloco.prototype.render = function(context){
            context.fillStyle = this.color;
            context.fillRect(this.x, this.y, this.w, this.h);    
        };
        
        bloco.prototype.colors = function(){
            var colors = Math.floor(Math.random()*70+1);
            if((colors > 0) && (colors < 10) && this.colorcont == 0){ 
                this.color = '#6B6B6B';
                this.colorcont = 1;
            }
            if((colors < 10) && this.colorcont == 0){ 
                this.color = '#FFFFFF';
                this.colorcont = 1;
            }
            if((colors > 10 && colors < 20) && this.colorcont == 0){ 
                this.color = '#415FAC';
                this.colorcont = 1;
            }
            if((colors > 20 && colors < 30) && this.colorcont == 0){ 
                this.color = '#91CE9E';
                this.colorcont = 1;
            }
            if((colors > 30 && colors < 40) && this.colorcont == 0){ 
                this.color = '#E4E881';
                this.colorcont = 1;
            }
            if((colors > 40 && colors < 50) && this.colorcont == 0){ 
                this.color = '#EACC80';
                this.colorcont = 1;
            }
            if((colors > 50 && colors < 60) && this.colorcont == 0){ 
                this.color = '#EAA480';
                this.colorcont = 1;
            }
            if((colors > 60 && colors < 70) && this.colorcont == 0){ 
                this.color = '#CD87BA';
                this.colorcont = 1;
            }
        };
        
        var bloco = new bloco(0,0);
        
        
        //Dados da barra que segura a bola
        function barra(x, w, h){
            this.x = x;
            this.y = 426;
            this.w = w;
            this.h = h;
            this.color = "#0D8961";
        };
        //Renderiza a barra
        barra.prototype.render = function(context){
            context.fillStyle = this.color;
            context.fillRect(this.x, this.y, this.w, this.h);    
        };
        //Adiciona o movimento a variavel x de barra
        barra.prototype.move = function(pos){
            if(pos < canvas.width - this.w){
                this.x = pos;
            }
            if(pos > 0){
                this.x = pos;
            }
        };
        //Cria o objeto barra no sistema
        var barra = new barra(350,100,20);
        //Dados da bola seguindo os padrões
        function bola(x, y, raio, vel){
            this.x = x;
            this.y = y;
            this.raio = raio;
            this.vel = vel;
            this.color = "white";
            this.dirx = this.vel;
            this.diry = this.vel;
        };
        //Renderiza a bola
        bola.prototype.render = function(context){
            context.beginPath();
            context.arc(this.x,this.y,this.raio,0,2*Math.PI);
            context.fillStyle = this.color;
            context.fill();
            context.closePath();
            
        };
        //Cria o movimento diagonal da bola
        bola.prototype.move = function(){
            //Lado Esquerdo da tela
            if(this.x < 10 && this.diry > 0) this.dirx = -this.dirx;
            if(this.x < 10 && this.diry < 0) this.dirx = -this.dirx;
            //Topo da tela
            if(this.y < 10 && this.dirx > 0) this.diry = -this.diry;
            if(this.y < 10 && this.dirx < 0) this.diry = -this.diry;
            //Lado direito da tela
            if(this.x > canvas.width - this.raio*2 && this.diry > 0) this.dirx = -this.dirx;
            if(this.x > canvas.width - this.raio*2 && this.diry < 0) this.dirx = -this.dirx;
            //Baixo da tela
            if(this.y > 450 - this.raio*2 && this.dirx > 0){
                 lifePoint(); 
                 this.x = 350;
                 this.y = 400;
                 this.diry = -this.diry;
            }
            if(this.y > 450 - this.raio*2 && this.dirx < 0){
                 lifePoint();
                 this.x = 350;
                 this.y = 400;
                 this.diry = -this.diry;
            }
            
            
            if(bola.y + (bola.raio*2) == barra.y &&
               bola.x < barra.x + barra.w &&
               bola.x + (bola.raio*2) > barra.x){
                    if((this.dirx > 0) || (this.dirx < 0)) this.diry = -this.diry;
            }
            if(bola.y + (bola.raio*2) > barra.y &&
               bola.x < barra.x + barra.w &&
               bola.x + (bola.raio*2) > barra.x){
                    if((this.dirx > 0) || (this.dirx < 0)) this.diry = -this.diry;
            }
            this.x += this.dirx;
            this.y -= this.diry;
        };
        //Cria o objeto bola no sistema
        var bola = new bola(350, 400, 5, 5)

        //Renderiza todo o conteudo visual
        function render(){
            //cria os objetos
            barra.render(cnv);
            bola.render(cnv);
            
        };
        //Chama os movimentos
        function move(){
            barra.move();
            bola.move();
            
            
        };
        //Blocos
        function blocoMotor(){
            bloco.colors();
            bloco.render(cnv);
        };
        //motor do game
         function motor(){
            //apaga a tela
            cnv.clearRect(0, 0, canvas.width, canvas.height);
            render();
            move();
            blocoMotor();
            
        };
        
        
        //Captura o movimento x do mouse
        function getMousePos(canvas, evt) {
        var rect = canvas.getBoundingClientRect();
        return {
          x: evt.clientX - rect.left,
        };
        };
        //Cria o movimento x da barra a partir do mouse
        document.addEventListener('mousemove', function(evt) {
        var mousePos = getMousePos(canvas, evt);
        var PosX = 350;
        if(mousePos.x < 750){
                var PosX = mousePos.x - 50;
        }
        if(mousePos.x > 50){
                var PosX = mousePos.x - 50;
        }
        if(mousePos.x < 50){
                var PosX = 0;
        }
        if(mousePos.x > 750){
                var PosX = 710;
        }
        barra.move(PosX);
          }, false);
        
        //Controle de teclas para pause e load game
        document.onkeydown = startGame;
        function startGame(evt){
            //Tecla espaço keycode 32 inicia o game
            if(evt.keyCode == '32' && gameload == false){
                gameload = true;
                loading();    
            }
            //Tecla p keycode 80 pausa o game
            if(evt.keyCode == '80'){
                window.clearInterval(id);
                gameload = false;
            }
        };
        
        //Controle de life point
        function lifePoint(){
            alert('derrota');
        };

Editado por Monzo
gramatica
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...