x = cos(fi) * R
y = sin(fi) * R
x = cos(fi) * R + x_игрока
y = sin(fi) * R + y_игрока
<!DOCTYPE html>
<html>
<head>
<title>Game</title>
</head>
<body>
<canvas id = "canvas" width = "320" height = "480"></canvas>
<script type="text/javascript">
document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var x = 0;
var y = 0;
var lx = 0;
var ly = 0;
var angle = 0;
function game(){
lx = Math.cos((angle/180) * Math.PI)*20;
ly = Math.sin((angle/180) * Math.PI)*20;
ctx.fillRect(x,y,32,32);
ctx.beginPath();
ctx.moveTo(x + 16,y + 16);
ctx.lineTo(lx,ly);
ctx.stroke();
ctx.closePath();
angle+=1;
}
setInterval(game,20);
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Game</title>
</head>
<body>
<canvas id = "canvas" width = "320" height = "480"></canvas>
<script type="text/javascript">
document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var x = 160;
var y = 240;
var left = 0;
var right = 0;
var rays = [];
var blocks = [];
for(i = 0;i < 100;i++){
rays.push({lx:0,ly:0,angle:i});
}
blocks.push({x:x+64,y:y});
document.addEventListener("keydown",function(e){
if(e.keyCode == 65){
left = 1;
}
if(e.keyCode == 68){
right = 1;
}
});
document.addEventListener("keyup",function(e){
if(e.keyCode == 65){
left = 0;
}
if(e.keyCode == 68){
right = 0;
}
});
function game(){
ctx.clearRect(0,0,320,480);
ctx.fillStyle = "black";
ctx.fillRect(x,y,32,32);
for(i in blocks){
ctx.fillStyle = "purple";
ctx.fillRect(blocks[i].x,blocks[i].y,32,32);
}
for(i in rays){
rays[i].lx = Math.cos((rays[i].angle/180) * Math.PI)*100 + x + 16;
rays[i].ly = Math.sin((rays[i].angle/180) * Math.PI)*100 + y + 16;
for(j in blocks){
if(rays[i].lx + 100 >= blocks[j].x && rays[i].lx <= blocks[j].x+32){
if(rays[i].ly + 1 >= blocks[j].y && rays[i].ly <= blocks[j].y+32){
rays[i].lx = rays[i].lx - 32;
rays[i].ly = rays[i].ly - 32;
}
}
}
ctx.beginPath();
ctx.moveTo(x + 16,y + 16);
ctx.lineTo(rays[i].lx,rays[i].ly);
ctx.stroke();
ctx.closePath();
if(left == 1){
rays[i].angle-=2;
}
if(right == 1){
rays[i].angle+=2;
}
}
ctx.beginPath();
ctx.fillStyle = "red";
ctx.arc(x+16,y+16,100,0,2*Math.PI);
ctx.stroke();
ctx.closePath();
}
setInterval(game,20);
</script>
</body>
</html>
КУЧА КАКОГО_ТО КОДА
for(j in blocks){
А что теперь
Ну как реализовать столкновение луча и обекта я на компьютере делаю что то не получается то луч не туда уходит то моргает то еще что вообще не понятно
x^2+y^2=R^2
(x-X1)/(X2-X1)=(y-Y1)/(Y2-Y1)
.X1, Y1, X2, Y2
(x-Xa)/(Xb-Xa)=(y-Ya)/(Yb-Ya)
(X1-Xa)/(Xb-Xa)=(y-Ya)/(Yb-Ya)
= (X1, y)(X2-Xa)/(Xb-Xa)=(y-Ya)/(Yb-Ya)
= (X2, y)(x-Xa)/(Xb-Xa)=(Y1-Ya)/(Yb-Ya)
= (x, Y1)(x-Xa)/(Xb-Xa)=(Y2-Ya)/(Yb-Ya)
= (x, Y2)Y1<y<Y2
X1<x<X2
i
откуда-то взялось. Проблема не в математике, а в адском беспорядке в голове. for(j in blocks){
if(rays[i].lx >= blocks[j].x && rays[i].ly >= blocks[j].y && rays[i].ly <= blocks[j].y + 32){
rays[i].radius = 50;
}else{
rays[i].radius = 100;
}
//if(rays[i].ly > blocks[j].y && rays[i].ly < blocks[j].y + 32){
// rays[i].radius = 50;
//}
}
for(j in blocks){
if(rays[i].lx >= blocks[j].x || rays[i].ly >= blocks[j].y && rays[i].ly <= blocks[j].y + 32){
rays[i].radius = 50;
}else{
rays[i].radius = 100;
}
Проблема не в математике, а в адском беспорядке в голове.