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