制作卡车和按钮以提高速度,通过 jQuery 使用 html/js 改变方向
Posted
技术标签:
【中文标题】制作卡车和按钮以提高速度,通过 jQuery 使用 html/js 改变方向【英文标题】:making a truck and buttons to increase speed, change direction using html/js via jQuery 【发布时间】:2021-05-27 00:57:04 【问题描述】:这是我的作业问题
您需要在 Canvas 中创建相同的动画。这可以是任何对象:卡车、汽车、自行车、飞机等。Blackboard 中提供了许多示例代码以供您帮助,我也在讲座中为您提供了提示。
加载页面时,该对象应位于屏幕左侧。 将有五个按钮:开始、停止、+、- 和改变方向。您可以显示或隐藏您想要的任何按钮。这取决于你。 当点击开始按钮时,对象应该开始移动。 当您单击停止按钮时,对象应该停止移动。 当你点击“改变方向”按钮时,对象应该改变方向。 当您单击 + 按钮时,对象的速度应该增加,当您单击 - 按钮时,速度应该降低。 在按钮下方,应该有做这道题的学生的名字。
我试图解决它,但它似乎不适用于我。
这是我页面的代码。
我想通过 jQuery 使用 html/js 制作改变方向按钮。
$(document).ready(function()
var canvas = $("#myCanvas");
var ctx = canvas.get(0).getContext("2d");
var playAnimation = true;
var startButton = $("#startAnimation");
var stopButton = $("#stopAnimation");
var increaseButton = $("#increase");
var decreaseButton = $("#decrease")
var x = 0;
var b = 200;
var t = 200;
var w = 200;
var q = 255;
var cir = 240;
var cir2 = 90;
var ctx;
startButton.hide();
startButton.click(function()
$(this).hide();
stopButton.show();
playAnimation = true;
animate();
);
stopButton.click(function()
$(this).hide();
startButton.show();
playAnimation = false;
);
/*function increase()
speed += 10;
;*/
increaseButton.click(function()
var interval = 1000;
timer = function()
interval--;
//do your thing here
interval = interval < 40 ? 40 : interval;
setTimeout(timer, interval);
;
timer();
);
/*stopButton.click.(function()
if(mouseX >= 335 && mouseX <= 390 && mouseY >= 15 && mouseY <= 115)
x++;//Make faster
if(mouseX >= 335 && mouseX <= 390 && mouseY >= 295 && mouseY <= 395)
x--;//Make slower
if(speed < 0)
speed++;//Make faster, I said IT CAN'T GO TO 0 or less...
);*/
//var increase = x++;
//var decrease = x--;
function animate()
x++;
b++;
t++;
w++;
q++;
cir++;
cir2++;
//y++; //update
//ctx.clearRect(0, 0, 800, 600); //clear
ctx.clearRect(0, 0, canvas.width(), canvas.height());
ctx.fillRect(x, 350, 190, 120);
ctx.fillRect(b, 410, 60, 60);
ctx.beginPath();
ctx.moveTo(t, 350);
ctx.lineTo(w, 400);
ctx.lineTo(q, 400);
ctx.closePath();
ctx.fillStyle = "#black";
ctx.fill();
//var c = document.getElementById("myCanvas");
//var ctx = c.getContext("2d");
ctx.beginPath();
ctx.arc(cir, 490, 18, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.lineWidth = 4;
ctx.strokeStyle = '#black';
ctx.stroke();
ctx.beginPath();
ctx.arc(cir2, 490, 18, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.lineWidth = 4;
ctx.strokeStyle = '#black';
ctx.stroke();
//draw();
// removed for snippet: console.log(x);
if (playAnimation)
setTimeout(animate, 20);
//repeat
;
animate();
);
/* for snippet - a huge gap at the top makes it unviewable */
#myCanvas margin-top: -340px;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<canvas id="myCanvas" >
<!-- Insert fallback content here -->
</canvas>
<div>
<button id="startAnimation">Start</button>
<button id="stopAnimation">Stop</button>
<button id="increase"> Increase the speed</button>
<button id="decrease"> Decrease the speed</button>
</div>
【问题讨论】:
你是小白帽吗?学生? 什么特别不适合你> 离题:免费课程 1:保持代码整洁。自动格式化是你的朋友。 给您的问题:哪个位让您的卡车左右移动?一旦您回答了是什么让您的卡车移动的问题,请考虑一下,要求 3-6 本质上都是相同的。 【参考方案1】:您似乎在animate()
内调用animate()
,这不是一个好主意。
开始和停止
我用它来重复运行函数
var speed = 10;
var animation = setInterval(function ()
animate();
, speed);
现在,animate()
将每 speed
毫秒运行一次,在本例中为 10 毫秒。 (Canvas 会每 10ms 清除并更新一次)
要停止动画,只需用clearInterval(animation)
停止间隔,然后通过重新分配它重新开始。
startButton.click(function ()
$(this).hide();
stopButton.show();
animation = setInterval(function ()
animate();
, speed);
);
变化速度
increaseButton.click(function ()
changeSpeed(-10);
);
decreaseButton.click(function ()
changeSpeed(10);
);
function changeSpeed(changeValue)
speed += changeValue;
clearInterval(animation)
animation = setInterval(function ()
animate();
, speed);
改变方向
我添加了名为direction
的新变量,这将使动画在1
时向前移动,在-1
时向后移动。
我将您的代码替换为animate()
x++;
b++;
t++;
w++;
q++;
cir++;
cir2++;
与:
x += direction;
b += direction;
t += direction;
w += direction;
q += direction;
cir += direction;
cir2 += direction;
并添加允许其更改direction
值的按钮
var changeDirection = $("#changeDirection");
changeDirection.click(function ()
direction *= -1;
)
齐心协力:
$(document).ready(function ()
var canvas = $("#myCanvas");
var ctx = canvas.get(0).getContext("2d");
var playAnimation = true;
var startButton = $("#startAnimation");
var stopButton = $("#stopAnimation");
var increaseButton = $("#increase");
var decreaseButton = $("#decrease");
var changeDirection = $("#changeDirection");
var x = 0;
var b = 200;
var t = 200;
var w = 200;
var q = 255;
var cir = 240;
var cir2 = 90;
var ctx;
var direction = 1;
var speed = 10;
startButton.hide();
startButton.click(function ()
$(this).hide();
stopButton.show();
animation = setInterval(function ()
animate();
, speed);
);
stopButton.click(function ()
$(this).hide();
startButton.show();
clearInterval(animation)
);
increaseButton.click(function ()
changeSpeed(-10);
);
decreaseButton.click(function ()
changeSpeed(10);
);
changeDirection.click(function ()
direction *= -1;
)
function changeSpeed(changeValue)
speed += changeValue;
clearInterval(animation)
animation = setInterval(function ()
animate();
, speed);
function animate()
x += direction;
b += direction;
t += direction;
w += direction;
q += direction;
cir += direction;
cir2 += direction;
//update
ctx.clearRect(0, 0, canvas.width(), canvas.height());
ctx.fillRect(x, 350, 190, 120);
ctx.fillRect(b, 410, 60, 60);
ctx.beginPath();
ctx.moveTo(t, 350);
ctx.lineTo(w, 400);
ctx.lineTo(q, 400);
ctx.closePath();
ctx.fillStyle = "#black";
ctx.fill();
ctx.beginPath();
ctx.arc(cir, 490, 18, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.lineWidth = 4;
ctx.strokeStyle = '#black';
ctx.stroke();
ctx.beginPath();
ctx.arc(cir2, 490, 18, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.lineWidth = 4;
ctx.strokeStyle = '#black';
ctx.stroke();
;
var animation = setInterval(function ()
animate();
, speed);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<canvas id="myCanvas" >
<!-- Insert fallback content here -->
</canvas>
<div>
<button id="startAnimation">Start</button>
<button id="stopAnimation">Stop</button>
<button id="increase"> Increase the speed</button>
<button id="decrease"> Decrease the speed</button>
<button id="changeDirection"> Change direction</button>
</div>
</body>
【讨论】:
以上是关于制作卡车和按钮以提高速度,通过 jQuery 使用 html/js 改变方向的主要内容,如果未能解决你的问题,请参考以下文章