2012-07-04 48 views
0

我正在研究一个简单的html5平台游戏,建立一个以前的游戏,但遇到碰撞和物理问题。下面是关于地板以及如何处理碰撞的代码示例。完整的代码在这里。 http://www.ambitiongames.co.uk/dev/game.php随着游戏在这里http://www.ambitiongames.co.uk/dev/html5画布对象碰撞和物理

我遇到的问题是碰撞是基于事件抓取有时会让玩家不在场上。

另外,由于跳跃和坠落的方式,没有重力,这意味着玩家可以跳到更高的壁架上,然后走到空中。

什么是建立永久重力状态的好方法?

什么是与地板或其他物体相互作用/碰撞的好方法?

 that.draw = function(){ 
      try { 
       ctx.drawImage(that.image, that.x, that.y, that.width, that.height); 
       } catch (e) { 
       } 
     } 
     return that; 
    }; 

    var nrOffloors = 40, 
     floors = [], 
     floorWidth = 20, 
     floorHeight = 40; 
     var generatefloor = function(){ 

      for (var i = 0; i < 10; i++) { 
       floors[i] = new Floor(i * 20,280); 
      } 
      for (var i = 10; i < 12; i++) { 
       floors[i] = new Floor(i * 20,260); 
      } 
     }(); 

    var checkCollisionfloor = function(){ 
     floors.forEach(function(e, ind){ 
      if ( 
       (player.X < e.x + floorWidth) && 
       (player.X + player.width > e.x) && 
       (player.Y + player.height > e.y) && 
       (player.Y + player.height < e.y + floorHeight) 

       ) { 
        e.onCollide(); 
       } 
     });  
    } 
+0

我无法加载游戏,这是一个相当广泛的问题,但在设计这样的游戏时,您会从使用传统的面向对象方法中获益非凡。通过这种方式,每个物体(玩家和/或其他物体)可以跟踪他们自己的速度和加速度,并且重力的计算应该非常简单。你基本上只是将因重力而产生的恒定负加速度加到目标现有加速度上,并且你可以跟踪玩家的'Y'位置以确保它们不低于0(地面) – Cecchi

+0

...为了模拟击球地面上你可以转换他们的速度,这会导致玩家弹起一点,重力最终会压制他们。 – Cecchi

+0

我看到你说什么,而不是var'Floor = function(x,y){insert stuff here' it should be'var StartButton = new Object();'并相应地添加变量? –

回答

1

您可以尝试一个库,如Box2D.js。它处理从碰撞检测到重力的所有内容。

看看它的演示。

+0

这实际上很酷,谢谢:)后玩它的正是我需要的。 –