gpt4 book ai didi

javascript - Canvas 对象更新位置并重绘对象

转载 作者:行者123 更新时间:2023-11-30 19:03:26 25 4
gpt4 key购买 nike

我有一个 Canvas ,在初始化页面时绘制了两个矩形对象。

我有一个 X 和 Y 的变量,当按下键盘按钮时它会改变,它工作正常。

我想根据新的 X 和 Y 值移动其中一个对象方 block “playerCar”,因为它们发生变化,但我无法让方 block 发生变化。

我在不使用对象的情况下使用了它,但我想使用对象以便我可以添加更多(当我学习它时)。

我试过 playercar.draw(keyX, KeyY); 但这不是更新。

var canvas = document.getElementById('plot');
var context;

var keyX = 100;
var keyY = 100;

playerCar = new car(100, 100, 'red');
playerCar2 = new car(350, 100, 'blue');

init()
playerCar.draw();
playerCar2.draw();


document.addEventListener('keydown', function(event){
var keyPressed = event.keyCode;
switch(keyPressed){
case 104:
keyY = keyY -1;
break;
case 98:
keyY = keyY +1;
break;
case 100:
keyX = keyX -1;
break;
case 102:
keyX = keyX +1;
break;
}

playerCar.draw();

console.log('key Y = ' + keyY);
console.log('key X = ' + keyX);
});

function init(){
context = canvas.getContext('2d');
context.fillStyle = "green";
var plot = {height: 800, width: 800};
context.fillRect(1, 1, plot.width, plot.height);
}

function car (keyX, keyY, color){
carwidth = 150;
carHeight = 100;
this.x = keyX;
this.y = keyY;
this.color = color;
this.draw = function (){
context.fillStyle = this.color;
context.fillRect(this.x, this.y, carwidth, carHeight);
}

}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<canvas id="plot" width="800" height="800"></canvas>
<script src="index.js"></script>
</body>
</html>

最佳答案

您遇到的问题是您指望的是 KeyX 和 KeyY 的初始值,而不是存储在 car 对象中的值。您需要在 playerCar.y

上递增

所以我将 keyY = keyY +1; 替换为 playerCar.y += 1;
如您所见,我使用了 += 这只是编写相同内容的一种更短的方式,参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators

您也可以使用 playerCar.y++,但您无法再调整它添加的数量。

除了这个问题之外,您还遇到了一个问题,即您没有重绘 Canvas 。这是一个稍微大一点的问题,在大多数游戏中,您会有一个负责所有绘图的绘图函数(循环)和一个负责逻辑(循环)的单独函数。

现在我添加了一个重绘函数来重绘屏幕上的所有对象。

var canvas = document.getElementById('plot');
var context;

var keyX = 100;
var keyY = 100;

playerCar = new car(100, 100, 'red');
playerCar2 = new car(350, 100, 'blue');

init()

document.addEventListener('keydown', function(event){
var keyPressed = event.keyCode;
switch(keyPressed){
case 104:
playerCar.y += 1;
break;
case 98:
playerCar.y -= 1;
break;
case 100:
playerCar.x += 1;
break;
case 102:
playerCar.x -= 1;
break;
}

redraw()

console.log('key Y = ' + playerCar.y);
console.log('key X = ' + playerCar.x);
});

function init(){
context = canvas.getContext('2d');
redraw();
}
function redraw() {
context.fillStyle = "green";
var plot = {height: 800, width: 800};
context.fillRect(1, 1, plot.width, plot.height);
playerCar.draw();
playerCar2.draw();
}

function car (keyX, keyY, color){
carwidth = 150;
carHeight = 100;
this.x = keyX;
this.y = keyY;
this.color = color;
this.draw = function (){
context.fillStyle = this.color;
context.fillRect(this.x, this.y, carwidth, carHeight);
}

}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<canvas id="plot" width="800" height="800"></canvas>
<script src="index.js"></script>
</body>
</html>

关于javascript - Canvas 对象更新位置并重绘对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59248182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com