【问题标题】:How to properly move canvas object with more than 2 values如何正确移动具有超过 2 个值的画布对象
【发布时间】:2019-03-19 18:06:26
【问题描述】:

我正在尝试创建画布 HTML 5 来移动对象并在它到达终点时停止。为此,我为 X 设置了 10 个值,为 Y 设置了 10 个值。首先,我需要将所有值作为 X 和 Y 的坐标。单击按钮时,动画应该在到达结束时开始和停止。

注意:我必须为每个 X 和 Y 计算 10 个值,当到达 X 和 Y 的最后一个值时必须停止鱼移动。这是我必须遵循的要求。

我的代码仅适用于前两个 X 和 Y 值。我不知道怎么做剩下的。我试图在GetStarted() 函数中创建for loop,但它也不起作用。

function GetStarted(){

  for(var i=0; i<10; i++){
  // get the canvas's 2d context
  var canvas = document.getElementById("canvas");
  var context = canvas.getContext("2d");

  // clear the canvas
  context.clearRect(0, 0, canvas.width, canvas.height);

  // get the position
  var abc = Number(document.getElementById("x").value);
  var xyz = Number(document.getElementById("y").value); 

  // creating an image from scratch
  var image = new Image();
  image.src = "https://www.uow.edu.au/~dong/w3/assignment/a8/fish.png";

  // when the image are loaded,   
  // draw the image at the specified position
  image.onload = function() {
    context.drawImage(image, abc, xyz); 
  };
}
}
#x,#y {
width : 60px;
}
<table>
<tr>
<td> X </td> 
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
<td> <input id="x" /> </td>
</tr>

<tr>
<td> Y </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td>
<td> <input id="y" /> </td> 
</tr>
</table>
<button onClick="GetStarted()">
Swim little fish</button>
<br /><br />
<canvas id="canvas" width="1200" height="300"
style="border:1px solid black;">
Your browser does not support canvas.
<img src="https://www.uow.edu.au/~dong/w3/assignment/a8/fish.png" id="fishes">

</canvas>
</body>
</html>

【问题讨论】:

  • 我有什么误解吗?
  • 为什么你需要 X 和 Y 的所有 10 个值。你可以为 X 和 Y 设置起始值和结束值,并通过将步长值设为 10 来在该基础上制作动画。
  • 因为这是我必须为 X 和 Y 输入最多 10 个值然后单击按钮的要求。然后动画将从初始值开始,并在 Fish 到达最后一个值时停止。
  • 您的要求完全不清楚,虽然您当前的代码中存在一些明显的缺陷,但很难正确地帮助您。所有对象是否共享相同的“结束”?他们是否需要通过所有中间位置才能从他们的位置走到最后一个位置? (即第一个将通过所有 10 个,最后一个将保持静态)

标签: javascript html canvas html5-canvas


【解决方案1】:

这是移动鱼的起点:

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var x = y = 0

// creating an image from scratch
var image = new Image();
image.onload = function() {
  context.drawImage(image, x, y);
};
image.src = "https://www.uow.edu.au/~dong/w3/assignment/a8/fish.png";

function GetStarted() {
  setInterval(Move, 20)
}

function Move() {
  x = (x + 9) % canvas.width;
  y = (y + 1) % canvas.height; 
  
  context.clearRect(0, 0, canvas.width, canvas.height);
  context.drawImage(image, x, y);
}
<button onClick="GetStarted()">Swim little fish</button> <br /><br />

<canvas id="canvas" width="600" height="170" style="border:1px solid black;"></canvas>

如您所见,我对您的代码进行了重大更改!

现在鱼移动了,但是没有地方可以进入 X 和 Y 就像你有你所拥有的那样不会做一个非常平滑的运动反而更像是在跳来跳去,你也不能给出相同的id 到 html 元素,并期望您可以使用 document.getElementById("y") 获得所需的元素,但它无法正常工作

【讨论】:

  • 是的,它正在工作,但我必须为每个 X 和 Y 设置最多 10 个值。当到达 X 和 Y 的最后一个值时,鱼移动必须停止。这是要求我必须跟随。
  • 使用它并将其限制为 10 个值
  • @mmkk347 正确,此代码只是一个起点,您可以自行决定是否让它在您的系统中运行
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2014-07-11
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2014-09-17
相关资源
最近更新 更多