所以我是Java语言的新手,正在尝试让它像一个游戏...在这个游戏中,红色的球可以移动,蓝色的球应该跟随红色的球,就像蓝色的球应该朝向红色的球一样
现在他们正在跟随,但蓝色的球彼此重叠,最后只上交了一个球...
我不希望这个重叠...怎么做?
这是我的代码
const canvas = document.getElementById("game");
const context = canvas.getContext("2d");
canvas.width = window.innerWidth-20;
canvas.height = window.innerHeight-20;
let gameover = false;
let x = canvas.width / 2;
let y = canvas.height / 2;
let dx = 0;
let dy = 0;
x3=y3=0;
virx = new Array();
viry = new Array();
for (i=0; i<25; i++)
{
virx.push(Math.floor((Math.random() * window.innerWidth-20) + 1));
viry.push(Math.floor((Math.random() * window.innerHeight-20) + 1));
}
const state = {
"ArrowRight": false,
"ArrowLeft": false,
"ArrowUp": false,
"ArrowDown": false
}
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.arc(x, y, 10, 0, Math.PI * 2, false);
context.fillStyle = "red";
context.fill();
context.closePath();
for (i=0; i<25; i++)
{
newpoint();
context.beginPath();
context.arc(virx[i], viry[i], 10, 0, Math.PI * 2, false);
context.fillStyle = "blue";
context.fill();
context.closePath();
}
}
function logic() {
const direction = determineDirection();
if (direction.dx) {
dx = dx + direction.dx;
}
if (direction.dy) {
dy = dy + direction.dy;
}
x = x + dx;
y = y + dy;
if (dx > 0) {
dx -= 0.02;
}
if (dx < 0) {
dx += 0.02;
}
if (dy > 0) {
dy -= 0.02;
}
if (dy < 0) {
dy += 0.02;
}
}
function play() {
draw();
logic();
}
document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);
function newpoint()
{
flag=0;
vx= x - virx[i];
vy= y - viry[i];
vsize = Math.sqrt((vx*vx) + (vy*vy));
vn_x = vx / vsize;
vn_y = vy / vsize;
newx = virx[i] + 0.5 * vn_x;
newy = viry[i] + 0.5 * vn_y;
// virx[i] = newx;
// viry[i] = newy;
// for (j=0; j<25; j++)
// {
// c = Math.sqrt(Math.pow((virx[j]-newx), 2)+Math.pow((viry[j]-newy), 2));
// if (c<20)
// {
// flag=1;
// }
// }
if (flag==0)
{
virx[i] = newx;
viry[i] = newy;
}
}
function determineDirection() {
const {
ArrowRight,
ArrowLeft,
ArrowUp,
ArrowDown
} = state
if (ArrowRight && ArrowUp) {
return {
dx: .040,
dy: -.040
};
}
if (ArrowRight && ArrowDown) {
return {
dx: .040,
dy: .040
};
}
if (ArrowLeft && ArrowUp) {
return {
dx: -.040,
dy: -.040
};
}
if (ArrowLeft && ArrowDown) {
return {
dx: -.040,
dy: .040
};
}
if (ArrowLeft) {
return {
dx: -.040,
dy: 0
}
}
if (ArrowRight) {
return {
dx: .040,
dy: 0
}
}
if (ArrowUp) {
return {
dx: 0,
dy: -.040
}
}
if (ArrowDown) {
return {
dx: 0,
dy: .040
}
}
return {
dx: 0,
dy: 0
}
}
function keyDownHandler({
key
}) {
state[key] = true;
}
function keyUpHandler({
key
}) {
state[key] = false;
}
setInterval(play, 10);
在游戏的任何时刻,您都知道红色和蓝色球的位置。让我们将“向量”称为球之间x
和y
的增量。
vx= red_x - blue_x
vy= red_y - blue_y
为了使用一些力大小f
,最好使用大小为1的向量:
vsize = sqrt(vx*vx + vy*vy)
vn_x = vx / vsize
vn_y = vy / vsize
现在蓝色球必须移向红色球:
newblue_x = blue_x + f * vn_x
newblue_y = blue_y + f * vn_y