亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Web Assembly 繪制灰色畫布

Web Assembly 繪制灰色畫布

Go
大話西游666 2023-06-01 14:11:49
我正在使用 Go 并將其編譯為 Web 程序集。我正在嘗試用隨機顏色渲染一堆彼此相鄰的矩形,但它們一直渲染為灰色。我的渲染函數看起來像這樣: for row,_ := range rows {    for col,_ := range row {        ctx.Set("fillStyle", fmt.Sprintf("#%06x", rand.Int()))        ctx.Call("fillRect", 20, 20 + (col * width), maxHeight - (row*height))    } }它用它渲染了一個大塊(所有矩形都彼此相鄰)但都是灰色的,而不是用不同的顏色來渲染它們。示例中的這些代碼是否足以進一步提供幫助?如果不是,我可以將它發布到要點上,因為我是 WASM 的新手,我不確定哪些部分可能真正相關 - 但據我所知,這 2 個函數是唯一與渲染有關的函數。
查看完整描述

1 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

問題是您使用此表達式來構造填充樣式:

fmt.Sprintf("#%06x",?rand.Int())

rand.Int()返回一個非負偽隨機數int。如果和的大小int為 64 位。這意味著隨機數將是隨機的 8 個字節(由于非負,第一位始終為 0)。GOOS=jsGOARCH=wasmint

如果你用動詞格式化這樣一個數字%06x,幾乎所有時間它都會不僅僅是 6 個十六進制數字。寬度表示至少6為6,標志表示如果小于則用零填充。但如果它更長,則不會被截斷。0

如果您將無效顏色設置為canvas.fillStyle,它將忽略它并且最后設置的有效填充樣式將保持活動狀態。我猜這是你在循環之前使用的灰色。

修復很容易,只要確保隨機數不超過 3 個字節,或者換句話說,6 個十六進制數字。使用一個簡單的位掩碼:

ctx.Set("fillStyle",?fmt.Sprintf("#%06x",?rand.Int()&0xffffff))

或者使用rand.Intn()代替rand.Int()

ctx.Set("fillStyle",?fmt.Sprintf("#%06x",?rand.Int(0x1000000)))

context.fillRect()需要 4 個參數:x,?y,widthheight,所以它應該是這樣的:

ctx.Call("fillRect",?20+(col*width),?maxHeight-(row*height),?width,?height)


查看完整回答
反對 回復 2023-06-01
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號