Показать сообщение отдельно
  #6 (permalink)  
Старый 06.12.2012, 18:42
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

schmetterling, сразу поверхностно глянул на код , а теперь сел дальше мучатся со своим арканоидом, и понял что ваш код в общем работает так же как и мой)
вот из тестового варианта
(y <= Bl_bottom && y >= block.y - ball.R) && (x >= block.x - ball.R  && x <= Bl_right)

код ниже это просто черновик
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <canvas width="500" height="500"></canvas>
    <script>

      var canva = document.body.children[0];
      
      var ctx = canva.getContext("2d");
      
      var ball = {
      
        x:20, 
        y:280,
        R:20,
        
        Draw: function (x, y) {
          
          ctx.clearRect(this.x - this.R, this.y - this.R, this.R *2,this.R *2);
           
          ctx.beginPath();
          ctx.fillStyle = "red";
          ctx.arc(x,y, this.R,0, (Math.PI / 180)* 360, false);
          ctx.fill();
         
          this.y = y;
          this.x = x;
        }
      
        
      };
      
      var block = {
      
   
        width:150,
        height:30,
        
        Draw: function (x, y) {
           
          ctx.beginPath();
           ctx.fillStyle = "green";
          ctx.fillRect(x,y,this.width, this.height);
          this.y = y;
          this.x = x;
        }
      
        
      };
     
      block.Draw(150,100);
      
      var valX = -10 , valY = -10;
      var Bl_bottom = block.y + block.height + ball.R ;
      var Bl_right = block.x + block.width  + ball.R ;
      var one = false;

      function action(){

         if(ball.x < 0 + ball.R || ball.x > canva.width - ball.R){

           valX = -valX;
           
        
        };

        if(ball.y < 0 + ball.R || ball.y > canva.height - ball.R){

          valY = -valY;
           //y = canva.height - ball.R;

        }

        
       var x =  ball.x;
        var y = ball.y  ;

   
  if((y <= Bl_bottom && y >= block.y - ball.R) && (x >= block.x - ball.R  && x <= Bl_right)){
  
      if(!one) drawOs(x,y);
    
     if(!one){// запускаем еще один мячик
     ball.x = 200;
      ball.y = 200;
      action();
      one = true;
    }

    
   
          return;
        };
         
        x +=  valX;
       y  +=  valY;

        ball.Draw(x,y);
      
        
    
      
       setTimeout(action,1000/60);
      };
      
 action();
 
      
function drawOs(x,y){
 ctx.beginPath();
        
         ctx.moveTo(block.x - ball.R ,Bl_bottom);
         ctx.lineTo(x,y);
         ctx.stroke();
         
         ctx.beginPath();
         ctx.moveTo(Bl_right ,Bl_bottom);
         ctx.lineTo(x,y);
         ctx.stroke();
     
         ctx.beginPath();
        
         ctx.moveTo(block.x  - ball.R,block.y  - ball.R);
         ctx.lineTo(x,y);
         ctx.stroke();

         ctx.beginPath();
         ctx.moveTo(Bl_right,block.y  - ball.R );
         ctx.lineTo(x,y);
         ctx.stroke();


};



    </script>

  </body>
</html>

проблема в столкновение с углом, в примере выше видно что если сталкивается не с углом все работает.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием