html 5 canvas如何让玩家跳转(纯粹没有框架)

时间:2013-12-09 03:16:14

标签: javascript html5 html5-canvas

我有一个玩家,一个背景和一个地块都设置好了。我需要的是当我点击屏幕或屏幕按钮时玩家跳跃和降落的方式。我正在为移动设备做这个。这是我到目前为止所做的编码。

  <!DOCTYPE html>
  <head>
  <meta charset="UTF-8">
  <title> Testing Canvas</title>
  <script type="text/javascript">
  window.onload = function ()
  {

  var canvas = document.getElementById("canvasOne");
  var context = canvas.getContext("2d");
  var canvasbk = document.getElementById("bk");
  var contextbk = canvasbk.getContext("2d");


 var myelf = new Image();
 var myice = new Image() ;
 var mybk  = new Image();

 myice.src="iceland.png";
  myelf.src="elf1.png" ;
 mybk.src="bk.png";

 myelf.onload = function()
 {
 context.drawImage(myelf,40,55);


 }
 myice.onload = function()
 {

 context.drawImage(myice,0,150);

}    
 mybk.onload = function()
{

 contextbk.drawImage(mybk,0,0,canvasbk.width,canvasbk.height);

}


}

 </script>
 </head>
<body>

 <div style = “width:500px; height:500px; margin:0 auto; padding:5px;”>

 <canvas id="canvasOne" width="500" height="300"
  style="border:2px solid black; position:absolute; 
  left:auto; top:auto; z-index:2"></canvas>

  <canvas id="bk" width=500px; height="300px; style="border:solid black;
  position:absolute; top:auto left:auto; z-index 1"></canvas>

  </div>
 </body>
 </html>

1 个答案:

答案 0 :(得分:1)

既然你想做一些学习,我不会破坏你的编码答案的经验,但你应该检查这两种方法让你的角色跳跃。

要进行静止跳跃(在同一坐标上开始和降落),请查看“缓和”。

Easing让你的角色快速跳跃,在他们的顶点和加快下降速度。特别是,请查看easeOutQuart for ascent和easeInQuart for descent。

http://jqueryui.com/resources/demos/effect/easing.html

要从起点跳到不同的终点,请查看二次曲线。

它绘制从精确起点到精确终点的曲线,其中“曲率”的数量由控制点定义。关于二次曲线公式的好处是它自然地在其顶点产生更多的点(更多的点意味着你的角色将快速开始,在顶点处缓慢并且在下降时加速)。这是在给定时间(T)返回XY的二次公式。

// get XY along quadratic bezier at T 
// (T==0.00 at start of curve, T==1.00 at end of curve) 

function getQuadraticBezierXYatT(startPt,controlPt,endPt,T) {
    var x = Math.pow(1-T,2) * startPt.x + 2 * (1-T) * T * controlPt.x + Math.pow(T,2) * endPt.x; 
    var y = Math.pow(1-T,2) * startPt.y + 2 * (1-T) * T * controlPt.y + Math.pow(T,2) * endPt.y; 
    return( {x:x,y:y} );
}

BTW,您的示例代码可能存在问题:

你的bk.png图片可能是你填充画布的最大图像。它可能需要最长时间才能加载并最后绘制。因此,您的背景可能会覆盖您的elf1.png和Iceland.png图像。要更正此问题,请检查图像加载器,以便在画布上绘制它们之前所有图像都已完全加载。