Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测对象是否位于画布上的cordinates元素?_Javascript_Html_Math_Canvas - Fatal编程技术网

Javascript 如何检测对象是否位于画布上的cordinates元素?

Javascript 如何检测对象是否位于画布上的cordinates元素?,javascript,html,math,canvas,Javascript,Html,Math,Canvas,我正在画布上创作一个井字游戏。我现在被困在一个点上,我检测画布上的X/y坐标上是否已经有一个符号(X或O) 我尝试使用ImageData检查元素是否存在,但如果不存在任何元素,则返回错误。我还想也许我可以给正方形或符号分配一个ID。然而,从我所读到的来看,这似乎是不可能的 任何帮助都将不胜感激 你可以看到游戏在这里运行 函数TTT(){ this.canvas=document.getElementById('ttt'); this.context=this.canvas.getContext(

我正在画布上创作一个井字游戏。我现在被困在一个点上,我检测画布上的X/y坐标上是否已经有一个符号(X或O)

我尝试使用ImageData检查元素是否存在,但如果不存在任何元素,则返回错误。我还想也许我可以给正方形或符号分配一个ID。然而,从我所读到的来看,这似乎是不可能的

任何帮助都将不胜感激

你可以看到游戏在这里运行

函数TTT(){
this.canvas=document.getElementById('ttt');
this.context=this.canvas.getContext('2d');
this.width=this.width;
this.height=this.height;
这个平方=100;
this.box=[];
this.turn=Math.floor(Math.random()*2)+1;
this.message=$('.message');
};
var ttt=新的ttt();
TTT.prototype.currentPlayer=函数(){
var symbol=(this.turn==1)?'X':'O';
html('轮到'+symbol+'\'了');
};
//画板
TTT.prototype.draw=函数(回调){
//绘制网格

对于(var row=0;row使用数组跟踪网格位置对您来说不是很容易。当您在网格上放置某个对象时,将该位置分配到数组中。这样,您就不必想办法从画布中读取该对象,而只需查看数组。这还允许您在n需要,例如当屏幕调整大小时…

使用数组跟踪网格位置对您来说不是很容易。当您在网格上放置某个对象时,将该位置分配到数组中。这样,您就不用想办法从画布中读取它,而只需查看数组。这还允许您快速重新绘制当需要时,例如当屏幕调整大小时,从数组中选择画布…

要检测单击了哪个字段,请遍历9个字段,并检查单击的位置是否在绘制字段的区域中

要做到这一点,请存储字段的状态(位置和是否包含X、O或任何内容)。还应将9个字段存储在一个数组中,以便可以轻松地对它们进行迭代。我会将其存储在二维数组(3x3)中

tic tac toe字段的初始化:

var fields = [
    [new Field(0,0), new Field(1,0), new Field(2,0)],
    [new Field(0,1), new Field(1,1), new Field(2,1)],
    [new Field(0,2), new Field(1,2), new Field(2,2)]
];
迭代:

for (var y = 0; y <= 2; y++) {
    for (var x = 0; x <= 2; x++) {
        var field = fields[y][x];
        // Do something with the field.
    }
}

for(var y=0;y要检测单击了哪个字段,请遍历9个字段,并检查单击的位置是否在绘制字段的区域中

要做到这一点,请存储字段的状态(位置和是否包含X、O或任何内容)。还应将9个字段存储在一个数组中,以便可以轻松地对它们进行迭代。我会将其存储在二维数组(3x3)中

tic tac toe字段的初始化:

var fields = [
    [new Field(0,0), new Field(1,0), new Field(2,0)],
    [new Field(0,1), new Field(1,1), new Field(2,1)],
    [new Field(0,2), new Field(1,2), new Field(2,2)]
];
迭代:

for (var y = 0; y <= 2; y++) {
    for (var x = 0; x <= 2; x++) {
        var field = fields[y][x];
        // Do something with the field.
    }
}

用于(var y=0;y+1是的,数组在检查董事会中获胜的位置时也很有用。是的,这很有意义。我可能会走这条路。只是为了了解如何在cordinates检测对象?我可能错了,因为我上次做canvas编程已经有几年了,但canvas没有你所画的一切都只是像素。你基本上必须自己跟踪这些对象。如果你想在更高级别的“对象”上编程,而不是用像素来考虑使用SVG。请查看Raphael.js在SVG上的一个漂亮、干净的API(它也会下降到更大的IE上的VML)。。@slebetman所说的是正确的,你通过从画布上读取像素来“检测”,或者你使用你自己物体的坐标来计算。你负责跟踪你放在画布上的所有东西。+1是的,一个数组也将有助于检查你在棋盘上的获胜位置。是的,这很有意义。我是我可能会走这条路。只是为了了解如何在cordinates检测对象?我可能错了,因为我上次做canvas编程已经有几年了,但canvas没有“对象”事实上,你绘制的一切都只是像素。你基本上必须自己跟踪这些对象。如果你想在更高级别的“对象”上编程而不是像素,考虑使用SVG。在Raphael.js上查看一个漂亮的、干净的API(SVG)(它也会下降到更大的IE上的VML)。。@slebetman所说的是正确的,您可以通过从画布上读取像素来“检测”,或者使用您自己对象的坐标来计算。您负责跟踪放置在画布上的所有内容。如何迭代画布上绘制的9个字段?如何迭代画布上绘制的9个字段?