gpt4 book ai didi

javascript - 确定 Canvas 网格的单元格 x 和 y

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:47 25 4
gpt4 key购买 nike

我有一个nodejs应用程序,它在当前使用for循环的 Canvas 中创建一个网格。我需要帮助编写一个算法来确定我的光标当前在 x 和 y 方向上的哪个单元格。网格当前为 25x25,我正在跟踪 Canvas 内的鼠标移动。我不想给我原始的 x 和 y 鼠标坐标,而是想要一个单元格坐标。有什么帮助吗?谢谢!

//START {EXPRESS}
var express = require('express');
var app = express();
var serv = require('http').Server(app);

app.get('/',function(req, res) {
res.sendFile(__dirname + '/client/index.html');
});
app.use('/client',express.static(__dirname + '/client'));

serv.listen(2000);
console.log("Server started.");


var io = require('socket.io')(serv,{});
io.sockets.on('connection', function(socket){
//RETRIEVING THE MOUSE X AND Y COORDINATES
socket.on('mouseMove', function(data){
console.log(data.x + ", " + data.y);
});

});
<div id="gameDiv">
<center>
<canvas id="ctx" width="750" height="750" style="border:1px solid #000000;"></canvas>
</center>
</div>

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>

<script>
//NETWORK VARIABLES
var socket = io();
//GETTING THE CANVAS BY ID
var canvas = document.getElementById("ctx");
context = canvas.getContext("2d");

//GRID VARIABLES
var w=30,
h=30,
row=25,
col=25,
x=0,
y=0;

//LOOP TO DRAW THE GRID
for(x=0; x<row; x++){
for(y=0; y<col; y++){
context.strokeRect(w*x,h*y,w,h);
}
}

//GETTING THE MOUSE X AND Y
function getMousePos(canvas, event){
var rect = canvas.getBoundingClientRect();
return {
x:event.clientX - rect.left,
y:event.clientY - rect.top
};
}

canvas.addEventListener('mousemove', function(event){
var pos = getMousePos(canvas, event);
var posx = pos.x;
var posy = pos.y;

socket.emit('mouseMove',{x:x, y:y});
}, false);



</script>

</html>

最佳答案

啊,我最终自己弄清楚了。

算法是 posx/height 四舍五入posy/宽度向上取整

这是 html

<div id="gameDiv">
<center>
<canvas id="ctx" width="750" height="750" style="border:1px solid #000000;"></canvas>
</center>
</div>

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>

<script>
//NETWORK VARIABLES
var socket = io();
//GETTING THE CANVAS BY ID
var canvas = document.getElementById("ctx");
context = canvas.getContext("2d");

//GRID VARIABLES
var w=30,
h=30,
row=25,
col=25,
x=0,
y=0,
cX=0,
cY=0;

//LOOP TO DRAW THE GRID
for(x=0; x<row; x++){
for(y=0; y<col; y++){
context.strokeRect(w*x,h*y,w,h);
}
}

//GETTING THE MOUSE X AND Y
function getMousePos(canvas, event){
var rect = canvas.getBoundingClientRect();
return {
x:event.clientX - rect.left,
y:event.clientY - rect.top
};
}

canvas.addEventListener('mousemove', function(event){

var pos = getMousePos(canvas, event);
var posx = pos.x;
var posy = pos.y;

**cX = Math.ceil(posx/30);
cY = Math.ceil(posy/30);**

socket.emit('mouseMove',{x:cX, y:cY});
}, false);

关于javascript - 确定 Canvas 网格的单元格 x 和 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43196318/

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