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

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

將緩沖區繪制到屏幕時綁定不匹配(golang.org/x/exp/shiny/screen)

將緩沖區繪制到屏幕時綁定不匹配(golang.org/x/exp/shiny/screen)

Go
哆啦的時光機 2023-07-10 17:36:38
我正在嘗試使用 golang.org/x/exp/shiny/screen 創建一個窗口,然后在屏幕上繪制一個緩沖區。我已為窗口和在窗口上發布的緩沖區分配了相同的邊界(高度和寬度),但當我看到結果時似乎存在不匹配。您可以在圖片中看到,上傳到窗口的藍色緩沖區并未完全覆蓋它。package mainimport (    "image"    "image/color"    "log"    "golang.org/x/exp/shiny/driver"    "golang.org/x/exp/shiny/screen"    "golang.org/x/mobile/event/key"    "golang.org/x/mobile/event/lifecycle")const (    Row = 32    Col = 64)// Colorsvar (    Black = color.RGBA{0, 0, 0, 1.0}    White = color.RGBA{255, 255, 255, 1.0}    Blue  = color.RGBA{0, 0, 255, 1.0})func main() {    go driver.Main(func(s screen.Screen) {        opts := screen.NewWindowOptions{            Height: Row,            Width:  Col,            Title:  "Chip-8 VM",        }        window, err := s.NewWindow(&opts)        if err != nil {            log.Print("Unable to create display window: ")            log.Fatal(err)            return        }        defer window.Release()        dim := image.Point{Col, Row}        drawBuff, err := s.NewBuffer(dim)        if err != nil {            log.Fatal(err)        }        defaultDrawToBuffer(drawBuff.RGBA())        log.Print("Window bounds: ", opts)        log.Printf("Buffer bounds: %s", drawBuff.Bounds())        log.Printf("Buffer size: %s", drawBuff.Size())        window.Upload(image.Point{}, drawBuff, drawBuff.Bounds())        window.Publish()        for {            e := window.NextEvent()            switch e := e.(type) {            case lifecycle.Event:                if e.To == lifecycle.StageDead {                    return                } else if e.To == lifecycle.StageFocused {                    log.Print("Focus back on the screen!")                }            case key.Event:                log.Print("pressed key: ", e.Code)                // exit game                if e.Code == key.CodeEscape {                    return                }            case error:                log.Print(e)            }        }    })    for {    }}
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

您指定初始大小width=62, height=32,這些大小以像素為單位。這意味著您希望您的窗口“小”。Windows 通常有一個最小尺寸(通常由窗口控件決定),并且這個最小尺寸似乎比您預期的尺寸大。因此,您繪制的藍色矩形不會覆蓋整個窗口(不會小于最小尺寸)。

如果您增加尺寸,例如Rows = 300, Cols = 600,那么它將填滿您的窗口。

go另外,在調用時刪除關鍵字driver.Main(),一些特定于操作系統的庫要求從 goroutine 中調用它main。因此,請刪除,for塊中的空塊,直到您的應用程序退出。main()driver.Main()

另外,這仍然不能保證您看到藍色矩形,就像刷新/清除窗口(屏幕)一樣,可能需要重繪。

因此,請將繪圖邏輯移至事件循環,并針對paint.Event事件執行它:

case paint.Event:
    defaultDrawToBuffer(drawBuff.RGBA())
    window.Upload(image.Point{}, drawBuff, drawBuff.Bounds())
    window.Publish()


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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