課程
/前端開發(fā)
/JavaScript
/JS實(shí)現(xiàn)人機(jī)大戰(zhàn)之五子棋(UI篇)
var j = Math.floor(y / 30);為什么除以30
2017-12-16
源自:JS實(shí)現(xiàn)人機(jī)大戰(zhàn)之五子棋(UI篇) 2-5
正在回答
上面同學(xué)的說法不太對(duì),不是因?yàn)榉矫娌僮靼伞?br />
var x=e.offsetX;//獲取的是相對(duì)于整個(gè)canvas容器的x坐標(biāo)值
var y=e.offsetY;//獲取的是相對(duì)于整個(gè)canvas容器的y坐標(biāo)值
var i = Math.floor(x/30);
var j = Math.floor(y/30);
oneStep(i,j,me); //傳入i,j值
context.arc(15+i*30,15+j*30,13,0,2*Math.PI) ;//oneStep(i,j,me)里的畫圓函數(shù)
以上其實(shí) 可以 等同于 15+i*30=x; 15+j*30=y; 已知x,y值,通過除30取整獲取i,j值再畫圓。
以上可能是愚見,見笑了。
有一點(diǎn)我說錯(cuò)了,重新說:比如與實(shí)際坐標(biāo)(15,315)對(duì)應(yīng)的坐標(biāo)就是(15/30,315/30)(ps:還需要進(jìn)行向下取整),即坐標(biāo)(0,10)。
var drawChessBoard=function(){
????for(var i=0;i<15;i++)
????{
????????context.moveTo(15+30*i,15);
????????context.lineTo(15+30*i,435);
????????context.stroke();
????????context.moveTo(15,15+30*i);
????????context.lineTo(435,15+30*i);
????}
}
繪制棋盤的直線時(shí),橫坐標(biāo)是15+i*30,縱坐標(biāo)15+j*30,這些實(shí)際坐標(biāo)數(shù)值比較大,不方便操作。把實(shí)際坐標(biāo)做一個(gè)運(yùn)算換成等價(jià)坐標(biāo)就比較方便了。所以先除以30而后向下取整,得到一個(gè)橫、縱坐標(biāo)的數(shù)值都在15以內(nèi)的一個(gè)等價(jià)坐標(biāo)。比如與實(shí)際坐標(biāo)(315,315)對(duì)應(yīng)的坐標(biāo)就是(15/30,315/30)(ps:還需要進(jìn)行向下取整),即坐標(biāo)(0,10)。
這是我的理解,不知我是否講的清楚了呢?
舉報(bào)
利用js及canvas繪圖知識(shí),實(shí)現(xiàn)程序界面編寫和交互邏輯處理
2 回答var gradient = context.createRadiaGradient(200,200,50,200,200,20);
1 回答var context=chess.getContext('2d');
1 回答var context = chess.getContext("2d");
1 回答只能點(diǎn)擊前兩次,以后就不能點(diǎn)了為什么
1 回答getContext是什么意思 為什么我的不顯示
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-07-03
上面同學(xué)的說法不太對(duì),不是因?yàn)榉矫娌僮靼伞?br />
var x=e.offsetX;//獲取的是相對(duì)于整個(gè)canvas容器的x坐標(biāo)值
var y=e.offsetY;//獲取的是相對(duì)于整個(gè)canvas容器的y坐標(biāo)值
var i = Math.floor(x/30);
var j = Math.floor(y/30);
oneStep(i,j,me); //傳入i,j值
context.arc(15+i*30,15+j*30,13,0,2*Math.PI) ;//oneStep(i,j,me)里的畫圓函數(shù)
以上其實(shí) 可以 等同于 15+i*30=x; 15+j*30=y; 已知x,y值,通過除30取整獲取i,j值再畫圓。
以上可能是愚見,見笑了。
2017-12-23
有一點(diǎn)我說錯(cuò)了,重新說:比如與實(shí)際坐標(biāo)(15,315)對(duì)應(yīng)的坐標(biāo)就是(15/30,315/30)(ps:還需要進(jìn)行向下取整),即坐標(biāo)(0,10)。
2017-12-23
var drawChessBoard=function(){
????for(var i=0;i<15;i++)
????{
????????context.moveTo(15+30*i,15);
????????context.lineTo(15+30*i,435);
????????context.stroke();
????????context.moveTo(15,15+30*i);
????????context.lineTo(435,15+30*i);
????????context.stroke();
????}
}
繪制棋盤的直線時(shí),橫坐標(biāo)是15+i*30,縱坐標(biāo)15+j*30,這些實(shí)際坐標(biāo)數(shù)值比較大,不方便操作。把實(shí)際坐標(biāo)做一個(gè)運(yùn)算換成等價(jià)坐標(biāo)就比較方便了。所以先除以30而后向下取整,得到一個(gè)橫、縱坐標(biāo)的數(shù)值都在15以內(nèi)的一個(gè)等價(jià)坐標(biāo)。比如與實(shí)際坐標(biāo)(315,315)對(duì)應(yīng)的坐標(biāo)就是(15/30,315/30)(ps:還需要進(jìn)行向下取整),即坐標(biāo)(0,10)。
這是我的理解,不知我是否講的清楚了呢?